diff --git a/Assets/AssetCaches.asset b/Assets/AssetCaches.asset index 39ef4b5fd..3943a116e 100644 --- a/Assets/AssetCaches.asset +++ b/Assets/AssetCaches.asset @@ -18660,7 +18660,7 @@ MonoBehaviour: Filter: '*' - Path: Assets/ResRaw/Prefabs/Line/FishingRopeLong.asset Address: Plyaer/FishingRopeLong - Type: ObiRopeBlueprint + Type: Missing Bundle: main/plyaer.bundle Tags: Group: @@ -18675,7 +18675,7 @@ MonoBehaviour: Filter: '*' - Path: Assets/ResRaw/Prefabs/Line/FishingRopeLong2.asset Address: Plyaer/FishingRopeLong2 - Type: ObiRopeBlueprint + Type: Missing Bundle: main/plyaer.bundle Tags: Group: @@ -18690,7 +18690,7 @@ MonoBehaviour: Filter: '*' - Path: Assets/ResRaw/Prefabs/Line/FishingRopeShort.asset Address: Plyaer/FishingRopeShort - Type: ObiRopeBlueprint + Type: Missing Bundle: main/plyaer.bundle Tags: Group: @@ -18720,7 +18720,7 @@ MonoBehaviour: Filter: '*' - Path: Assets/ResRaw/Prefabs/Line/RopeSegment_4.asset Address: Plyaer/RopeSegment_4 - Type: ObiRopeBlueprint + Type: Missing Bundle: main/plyaer.bundle Tags: Group: @@ -41538,414 +41538,9 @@ MonoBehaviour: Dependencies: [] Tags: - Name: main/plyaer.bundle - Hash: 3b776aff4b78aa80eb66895d5a7df917 - Size: 393872102 + Hash: 33dc3a2319b9cf939df327449db4bddf + Size: 378598574 Assets: - - Path: Assets/ResRaw/Prefabs/chwytak/chwytak.prefab - Address: Plyaer/chwytak - Type: GameObject - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Material/ekran.mat - Address: Plyaer/ekran - Type: Material - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Material/hak.mat - Address: Plyaer/hak - Type: Material - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Material/panel.mat - Address: Plyaer/panel - Type: Material - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Material/plastik.mat - Address: Plyaer/plastik - Type: Material - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Material/uchwyt.mat - Address: Plyaer/uchwyt - Type: Material - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Mesh/Box001_18.mesh - Address: Plyaer/Box001_18 - Type: Mesh - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Mesh/Box002_6.mesh - Address: Plyaer/Box002_6 - Type: Mesh - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Mesh/Box003_0.mesh - Address: Plyaer/Box003_0 - Type: Mesh - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Mesh/Cylinder001_7.mesh - Address: Plyaer/Cylinder001_7 - Type: Mesh - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Mesh/ekran.mesh - Address: Plyaer/ekran - Type: Mesh - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Mesh/srubka 2.mesh - Address: Plyaer/srubka 2 - Type: Mesh - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Mesh/Tube001_0.mesh - Address: Plyaer/Tube001_0 - Type: Mesh - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Texture2D/chwytak ufs_ekran_MetallicSmoothness.png - Address: Plyaer/chwytak ufs_ekran_MetallicSmoothness - Type: Texture2D - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Texture2D/chwytak ufs_hak_AlbedoTransparency.png - Address: Plyaer/chwytak ufs_hak_AlbedoTransparency - Type: Texture2D - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Texture2D/chwytak ufs_hak_MetallicSmoothness.png - Address: Plyaer/chwytak ufs_hak_MetallicSmoothness - Type: Texture2D - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Texture2D/chwytak ufs_hak_Normal.png - Address: Plyaer/chwytak ufs_hak_Normal - Type: Texture2D - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Texture2D/chwytak ufs_panel_AlbedoTransparency.png - Address: Plyaer/chwytak ufs_panel_AlbedoTransparency - Type: Texture2D - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Texture2D/chwytak ufs_panel_MetallicSmoothness.png - Address: Plyaer/chwytak ufs_panel_MetallicSmoothness - Type: Texture2D - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Texture2D/chwytak ufs_panel_Normal.png - Address: Plyaer/chwytak ufs_panel_Normal - Type: Texture2D - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Texture2D/chwytak ufs_plastik_AlbedoTransparency.png - Address: Plyaer/chwytak ufs_plastik_AlbedoTransparency - Type: Texture2D - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Texture2D/chwytak ufs_plastik_MetallicSmoothness.png - Address: Plyaer/chwytak ufs_plastik_MetallicSmoothness - Type: Texture2D - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Texture2D/chwytak ufs_plastik_Normal.png - Address: Plyaer/chwytak ufs_plastik_Normal - Type: Texture2D - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Texture2D/chwytak ufs_uchwyt_Normal.png - Address: Plyaer/chwytak ufs_uchwyt_Normal - Type: Texture2D - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/chwytak/Texture2D/kategoria selected.png - Address: Plyaer/kategoria selected - Type: Texture2D - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/FFishingLine_0.prefab - Address: Plyaer/FFishingLine_0 - Type: GameObject - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - - Path: Assets/ResRaw/Prefabs/FFishingLine_1.prefab - Address: Plyaer/FFishingLine_1 - Type: GameObject - Bundle: main/plyaer.bundle - Tags: - Group: - Name: Plyaer - Enable: 1 - BundleMode: 0 - AddressMode: 2 - Tags: - Collectors: - - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} - FilterEnum: 0 - Filter: '*' - Path: Assets/ResRaw/Prefabs/Line/fishing line float set.prefab Address: Plyaer/fishing line float set Type: GameObject @@ -41978,7 +41573,22 @@ MonoBehaviour: Filter: '*' - Path: Assets/ResRaw/Prefabs/Line/FishingRopeLong.asset Address: Plyaer/FishingRopeLong - Type: ObiRopeBlueprint + Type: Missing + Bundle: main/plyaer.bundle + Tags: + Group: + Name: Plyaer + Enable: 1 + BundleMode: 0 + AddressMode: 2 + Tags: + Collectors: + - {fileID: 102900000, guid: aa3f5467c0c153642ac320466aee0ec1, type: 3} + FilterEnum: 0 + Filter: '*' + - Path: Assets/ResRaw/Prefabs/Line/FishingRopeLong2.asset + Address: Plyaer/FishingRopeLong2 + Type: Missing Bundle: main/plyaer.bundle Tags: Group: @@ -41993,7 +41603,7 @@ MonoBehaviour: Filter: '*' - Path: Assets/ResRaw/Prefabs/Line/FishingRopeShort.asset Address: Plyaer/FishingRopeShort - Type: ObiRopeBlueprint + Type: Missing Bundle: main/plyaer.bundle Tags: Group: @@ -42023,7 +41633,7 @@ MonoBehaviour: Filter: '*' - Path: Assets/ResRaw/Prefabs/Line/RopeSegment_4.asset Address: Plyaer/RopeSegment_4 - Type: ObiRopeBlueprint + Type: Missing Bundle: main/plyaer.bundle Tags: Group: diff --git a/Assets/Obi.meta b/Assets/Obi.meta deleted file mode 100644 index a1435212a..000000000 --- a/Assets/Obi.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 36112b76e54ae47b48e48d646aee4ed0 -folderAsset: yes -timeCreated: 1435850625 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/CHANGELOG_rope.txt b/Assets/Obi/CHANGELOG_rope.txt deleted file mode 100644 index 97384c8fa..000000000 --- a/Assets/Obi/CHANGELOG_rope.txt +++ /dev/null @@ -1,552 +0,0 @@ -# Change Log -All notable changes to “Obi - Advanced ropes for Unity” will be documented in this file. - -## [7.1] - -### Added -- ObiBone now exposes one particle group per bone in the hierarchy, allowing to easily use attachments. -- New ObiBoneOverride component that allows to override curve-driven properties for a specific sub-hierarchy. -- Solvers can now optionally enforce boundary limits, so that particles can't go outside those limits. This is often more convenient than manually placing invisible colliders for the same purpose. -- Dynamic ObiParticleAttachments now have a "projection" boolean, when enabled it forces the rendered position/orientation of the attached particles to match that of the attachment location, even if the constraint doesn't fully converge. This is useful to avoid visual gaps under extreme conditions. -- Actors now have a "mass scale" parameter, that multiplies the mass of all particles in the blueprinyt at the time of loading it into the solver. This is handy to create actors of different masses without the need to create a new blueprint. -- ObiForceZones now have a "color" parameter, that can be used to change the color of particles entering the zone. - -### Changed -- Improved performance for large amounts of static colliders: they're not processed at all during ObiSolver.Update(). - -### Fixed -- Null reference exception when using a ObiRopeExtrudedRenderer that doesn't reference a section asset. - -## [7.0.5] - -### Added -- New pinhole constraint type and ObiPinhole component, that allows to constrain ropes to a point in space while allowing it to slide trough it. Supports two-way rigidbody coupling and can be motor driven. - -### Fixed -- Erratic bend/twist constraint behavior when darboux vector is close to identity. -- Crash when attempting to bake ObiRopeExtrudedRenderer paired with an ObiPathSmoother that uses a non-zero decimation factor. -- IndexOutOfRangeError when having ropes using multiple different section assets and disabling all rope instances using one of them. -- InvalidOperationException in Burst backend when having simulateWhenInvisible = false and solver not seen by any camera. - -## [7.0.4] - -### Fixed -- Bug that caused inactive particles to still be rendered by ObiInstancedParticleRenderer. -- Bug that preventing pin constraints' break threshold from working when using the Compute backend. - -## [7.0.3] - -### Added -- Object layer support for all renderers. -- New "Synchronous Fixed" solver synchronization mode, similar to Obi 6, offers tighter integration with rigidbody physics. -- New "Tangled Ropes" sample scene. - -## [7.0.2] - -### Fixed -- Solvers not placed at the scene origin would result in actors having incorrect motion blur in HDRP. -- Fixed issue when disabling all solvers and colliders simultaneously: ipon re-enabling them, the colliders would be ignored. -- Issue withe ElectricalSparks sample scene, ObiRopePrefabPlugger sample component may sometimes thorw an exception dependin on Unity's OnEnable call order. -- Rope would sometimes disappear when using aerodynamic constraints with zero wind in Burst, due to a math.project returning NaN. Replaced with math.projectsafe. - -## [7.0.1] - -### Added -- BakeMesh functionality to ObiRopeChainRenderer, you can now export baked chain meshes. -- Render layer mask support to all rope renderers and particle renderers. - -### Fixed -- Sceneview mouse lookaround in flytrough mode (right click + drag) didn't work in the path editor in Windows. -- Having a ObiParticleRenderer with no material applied resulted in a exception in builds due GetInstanceID() returning 0 in editor but raising a nullref exception in the build. - -## [7.0] - -### Added -- Compute shader based GPU solver backend. -- More efficient solver update cycle, that also removes the need to have ObiUpdater components. -- Aerodynamic constraint support for ObiRope, ObiRod and ObiBone. - -### Changed -- 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/Assets/Obi/CHANGELOG_rope.txt.meta b/Assets/Obi/CHANGELOG_rope.txt.meta deleted file mode 100644 index 7cc321af1..000000000 --- a/Assets/Obi/CHANGELOG_rope.txt.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 8d9d04260bc994f1b9d444b675212dc6 -labels: -- ObiRope -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor.meta b/Assets/Obi/Editor.meta deleted file mode 100644 index ec618e6c7..000000000 --- a/Assets/Obi/Editor.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: d6a0c47fa0afb4e1fb441061faa32d50 -folderAsset: yes -timeCreated: 1435569421 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common.meta b/Assets/Obi/Editor/Common.meta deleted file mode 100644 index 5684f1cf4..000000000 --- a/Assets/Obi/Editor/Common.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3d5722720e25b4db69e767c6920cf081 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints.meta b/Assets/Obi/Editor/Common/Blueprints.meta deleted file mode 100644 index 5576b9554..000000000 --- a/Assets/Obi/Editor/Common/Blueprints.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1af54f7feeec0410cada2fc051752b61 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools.meta b/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools.meta deleted file mode 100644 index 6737bc72c..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: aa63386a67f904b399175c9931270250 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiBlueprintEditorTool.cs b/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiBlueprintEditorTool.cs deleted file mode 100644 index 54dcca92d..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiBlueprintEditorTool.cs +++ /dev/null @@ -1,40 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiBlueprintEditorTool.cs.meta b/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiBlueprintEditorTool.cs.meta deleted file mode 100644 index 95c9d3dd5..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiBlueprintEditorTool.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ca0c1c4cbbd024d49b15bf3439506500 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPaintBrushEditorTool.cs b/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPaintBrushEditorTool.cs deleted file mode 100644 index c2c9e1233..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPaintBrushEditorTool.cs +++ /dev/null @@ -1,130 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPaintBrushEditorTool.cs.meta b/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPaintBrushEditorTool.cs.meta deleted file mode 100644 index b0abbdf5a..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPaintBrushEditorTool.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 332bb5fc94a774291b4c4ebe50f61205 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiParticleSelectionEditorTool.cs b/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiParticleSelectionEditorTool.cs deleted file mode 100644 index 6a21eb662..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiParticleSelectionEditorTool.cs +++ /dev/null @@ -1,336 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiParticleSelectionEditorTool.cs.meta b/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiParticleSelectionEditorTool.cs.meta deleted file mode 100644 index 774ebafc2..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiParticleSelectionEditorTool.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b3940c62f9ffe4808afc4d2d70ae5e28 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPropertyTextureEditorTool.cs b/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPropertyTextureEditorTool.cs deleted file mode 100644 index 8ceee4b05..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPropertyTextureEditorTool.cs +++ /dev/null @@ -1,166 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPropertyTextureEditorTool.cs.meta b/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPropertyTextureEditorTool.cs.meta deleted file mode 100644 index 0655a7673..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiPropertyTextureEditorTool.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7727285b07aa44d6e8f65a8bc1f5d972 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiTethersTool.cs b/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiTethersTool.cs deleted file mode 100644 index a1e4d29fe..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiTethersTool.cs +++ /dev/null @@ -1,86 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiTethersTool.cs.meta b/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiTethersTool.cs.meta deleted file mode 100644 index fd2ba16fb..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/BlueprintEditorTools/ObiTethersTool.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6aefc9e7e74be461e93ee58f15c5a1dd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Brushes.meta b/Assets/Obi/Editor/Common/Blueprints/Brushes.meta deleted file mode 100644 index 23624c350..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 625a6e0c1ba72483190830373b7b45fe -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes.meta b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes.meta deleted file mode 100644 index 9bdbd1de6..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4fc4d44dc6d334c2985875fc6f7b8cb1 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/IObiBrushMode.cs b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/IObiBrushMode.cs deleted file mode 100644 index 4257fe690..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/IObiBrushMode.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Obi -{ - public interface IObiBrushMode - { - string name{get;} - bool needsInputValue{ get; } - void ApplyStamps(ObiBrushBase brush, bool modified); - } -} diff --git a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/IObiBrushMode.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/IObiBrushMode.cs.meta deleted file mode 100644 index ab2580d12..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/IObiBrushMode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4c46364da0f1641c7ab84e12348a6a4b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorPaintBrushMode.cs b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorPaintBrushMode.cs deleted file mode 100644 index e094e7c17..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorPaintBrushMode.cs +++ /dev/null @@ -1,38 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorPaintBrushMode.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorPaintBrushMode.cs.meta deleted file mode 100644 index d9fe60146..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorPaintBrushMode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1fd033c8f79b1494d8b8de5c8311f8c1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorSmoothBrushMode.cs b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorSmoothBrushMode.cs deleted file mode 100644 index a5fd9c632..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorSmoothBrushMode.cs +++ /dev/null @@ -1,53 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorSmoothBrushMode.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorSmoothBrushMode.cs.meta deleted file mode 100644 index 8a0a75a71..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiColorSmoothBrushMode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a69a8a1614478445cbb770a5e123ab18 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatAddBrushMode.cs b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatAddBrushMode.cs deleted file mode 100644 index 8c2a5aa81..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatAddBrushMode.cs +++ /dev/null @@ -1,36 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatAddBrushMode.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatAddBrushMode.cs.meta deleted file mode 100644 index 66272b907..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatAddBrushMode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8b39e10cedc94461083b3b19c3ddb343 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatCopyBrushMode.cs b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatCopyBrushMode.cs deleted file mode 100644 index ae0b60fee..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatCopyBrushMode.cs +++ /dev/null @@ -1,42 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatCopyBrushMode.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatCopyBrushMode.cs.meta deleted file mode 100644 index a51236b78..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatCopyBrushMode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 95bb470841f42415ab256cd64adb9242 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatPaintBrushMode.cs b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatPaintBrushMode.cs deleted file mode 100644 index 369a0d1e2..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatPaintBrushMode.cs +++ /dev/null @@ -1,37 +0,0 @@ - -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/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatPaintBrushMode.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatPaintBrushMode.cs.meta deleted file mode 100644 index 94c33004a..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatPaintBrushMode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: eb3d176006d404a508bef284d2701ab0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatSmoothBrushMode.cs b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatSmoothBrushMode.cs deleted file mode 100644 index 35cfcdbc5..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatSmoothBrushMode.cs +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatSmoothBrushMode.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatSmoothBrushMode.cs.meta deleted file mode 100644 index d3a486a2e..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiFloatSmoothBrushMode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 63dad56a994af4db7bb3449382022c54 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiIntPaintBrushMode.cs b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiIntPaintBrushMode.cs deleted file mode 100644 index 426e4c680..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiIntPaintBrushMode.cs +++ /dev/null @@ -1,33 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiIntPaintBrushMode.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiIntPaintBrushMode.cs.meta deleted file mode 100644 index 0bef4606e..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiIntPaintBrushMode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d8882849c81104cef80b3dfdab2021c9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiMasterSlavePaintBrushMode.cs b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiMasterSlavePaintBrushMode.cs deleted file mode 100644 index 2691275af..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiMasterSlavePaintBrushMode.cs +++ /dev/null @@ -1,39 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiMasterSlavePaintBrushMode.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiMasterSlavePaintBrushMode.cs.meta deleted file mode 100644 index 83254b41c..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiMasterSlavePaintBrushMode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 62f8e9adfc17440359a9b51005cd0948 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiSelectBrushMode.cs b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiSelectBrushMode.cs deleted file mode 100644 index 66d732c00..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiSelectBrushMode.cs +++ /dev/null @@ -1,33 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiSelectBrushMode.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiSelectBrushMode.cs.meta deleted file mode 100644 index ed3edeabf..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/BrushModes/ObiSelectBrushMode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9cea7ef42253f4d2b9b5a222521cdee8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushBase.cs b/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushBase.cs deleted file mode 100644 index 37951d48c..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushBase.cs +++ /dev/null @@ -1,161 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushBase.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushBase.cs.meta deleted file mode 100644 index 692767df9..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushBase.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 094253962d646436792561e708e62376 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushMirrorSettings.cs b/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushMirrorSettings.cs deleted file mode 100644 index c4bd65c1d..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushMirrorSettings.cs +++ /dev/null @@ -1,51 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushMirrorSettings.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushMirrorSettings.cs.meta deleted file mode 100644 index d33b4379e..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiBrushMirrorSettings.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d10a9257ac23248418439eb80e02a611 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiRaycastBrush.cs b/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiRaycastBrush.cs deleted file mode 100644 index 0578e888f..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiRaycastBrush.cs +++ /dev/null @@ -1,125 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiRaycastBrush.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiRaycastBrush.cs.meta deleted file mode 100644 index d3e4fb086..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiRaycastBrush.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d925323750dca4dcaa5cca91b18521b5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiScreenSpaceBrush.cs b/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiScreenSpaceBrush.cs deleted file mode 100644 index 341b491bb..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiScreenSpaceBrush.cs +++ /dev/null @@ -1,61 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiScreenSpaceBrush.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiScreenSpaceBrush.cs.meta deleted file mode 100644 index 71c3ff401..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Brushes/ObiScreenSpaceBrush.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 38fc5288fb3c94ebeb7eaa88a3bc5119 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditor.cs b/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditor.cs deleted file mode 100644 index 0e819c697..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditor.cs +++ /dev/null @@ -1,477 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditor.cs.meta b/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditor.cs.meta deleted file mode 100644 index c1fbbadee..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2e39e6eea226f4ecbbe091613ff79f85 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditorStage.cs b/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditorStage.cs deleted file mode 100644 index 561ee8976..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditorStage.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System; -using System.IO; -using UnityEditor; -using UnityEditor.SceneManagement; -using UnityEngine; - -namespace Obi -{ - [Serializable] - class ObiActorBlueprintEditorStage : PreviewSceneStage - { - ObiActorBlueprintEditor m_BlueprintEditor; - - string m_AssetPath; - public override string assetPath { get { return m_AssetPath; } } - - internal static ObiActorBlueprintEditorStage CreateStage(string assetPath, ObiActorBlueprintEditor avatarEditor) - { - ObiActorBlueprintEditorStage stage = CreateInstance(); - stage.Init(assetPath, avatarEditor); - return stage; - } - - private void Init(string modelAssetPath, ObiActorBlueprintEditor avatarEditor) - { - m_AssetPath = modelAssetPath; - m_BlueprintEditor = avatarEditor; - } - - protected override bool OnOpenStage() - { - base.OnOpenStage(); - - if (!File.Exists(assetPath)) - { - Debug.LogError("ActivateStage called on BlueprintStage with an invalid path: Blueprint file not found " + assetPath); - return false; - } - - return true; - } - - protected override void OnCloseStage() - { - m_BlueprintEditor.CleanupEditor(); - - base.OnCloseStage(); - } - - protected override void OnFirstTimeOpenStageInSceneView(SceneView sceneView) - { - // Frame in scene view - sceneView.Frame(m_BlueprintEditor.blueprint.bounds); - - // Setup Scene view state - sceneView.sceneViewState.showFlares = false; - sceneView.sceneViewState.alwaysRefresh = false; - sceneView.sceneViewState.showFog = false; - sceneView.sceneViewState.showSkybox = false; - sceneView.sceneViewState.showImageEffects = false; - sceneView.sceneViewState.showParticleSystems = false; - sceneView.sceneLighting = true; - } - - protected override GUIContent CreateHeaderContent() - { - return new GUIContent( - "Blueprint Editor", - Resources.Load("Icons/ObiActorBlueprint Icon")); - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditorStage.cs.meta b/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditorStage.cs.meta deleted file mode 100644 index 91b16abee..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/ObiActorBlueprintEditorStage.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4c8d9d8042d49436c89c515b001088ac -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/ObiMeshBasedActorBlueprintEditor.cs b/Assets/Obi/Editor/Common/Blueprints/ObiMeshBasedActorBlueprintEditor.cs deleted file mode 100644 index 98630677a..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/ObiMeshBasedActorBlueprintEditor.cs +++ /dev/null @@ -1,275 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/ObiMeshBasedActorBlueprintEditor.cs.meta b/Assets/Obi/Editor/Common/Blueprints/ObiMeshBasedActorBlueprintEditor.cs.meta deleted file mode 100644 index 497250ff1..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/ObiMeshBasedActorBlueprintEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c81a94632ae434014aedb4cc241e73e2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/ObiMeshUtils.cs b/Assets/Obi/Editor/Common/Blueprints/ObiMeshUtils.cs deleted file mode 100644 index 02ae7b5d5..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/ObiMeshUtils.cs +++ /dev/null @@ -1,93 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/ObiMeshUtils.cs.meta b/Assets/Obi/Editor/Common/Blueprints/ObiMeshUtils.cs.meta deleted file mode 100644 index 90c00ab9b..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/ObiMeshUtils.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4d2a4dd4e807c4053b4e4af4d43db45e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/ObiParticleEditorDrawing.cs b/Assets/Obi/Editor/Common/Blueprints/ObiParticleEditorDrawing.cs deleted file mode 100644 index b3af4d4a8..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/ObiParticleEditorDrawing.cs +++ /dev/null @@ -1,127 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/ObiParticleEditorDrawing.cs.meta b/Assets/Obi/Editor/Common/Blueprints/ObiParticleEditorDrawing.cs.meta deleted file mode 100644 index 561f8c744..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/ObiParticleEditorDrawing.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 982f73e0e40c749f09db403624bbd8e1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Properties.meta b/Assets/Obi/Editor/Common/Blueprints/Properties.meta deleted file mode 100644 index 1efd01e8b..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: dfda10b0e82f747998295540d5750108 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes.meta b/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes.meta deleted file mode 100644 index 1de2e12b8..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7b9ba4ddc644a4bfa8ab44a5826b8007 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintBoolProperty.cs b/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintBoolProperty.cs deleted file mode 100644 index d3b35a8d7..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintBoolProperty.cs +++ /dev/null @@ -1,24 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintBoolProperty.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintBoolProperty.cs.meta deleted file mode 100644 index 719c085a0..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintBoolProperty.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 19cb8e21747094d6dae8dff155654066 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintColorProperty.cs b/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintColorProperty.cs deleted file mode 100644 index a62d0c3b2..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintColorProperty.cs +++ /dev/null @@ -1,31 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintColorProperty.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintColorProperty.cs.meta deleted file mode 100644 index 226bed79e..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintColorProperty.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 64ab0b4fad7614808acc3cdb75215c50 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintFloatProperty.cs b/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintFloatProperty.cs deleted file mode 100644 index 8b5217444..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintFloatProperty.cs +++ /dev/null @@ -1,94 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintFloatProperty.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintFloatProperty.cs.meta deleted file mode 100644 index a8a2539df..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintFloatProperty.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: be67f2576200242f080bbcc074dc598a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintIntProperty.cs b/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintIntProperty.cs deleted file mode 100644 index 4cbc05b86..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintIntProperty.cs +++ /dev/null @@ -1,41 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintIntProperty.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintIntProperty.cs.meta deleted file mode 100644 index 069bfc02e..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintIntProperty.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d8661f9e9cfd044c7bb759145c2a8d73 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintMaskProperty.cs b/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintMaskProperty.cs deleted file mode 100644 index e4b0713e0..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintMaskProperty.cs +++ /dev/null @@ -1,28 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintMaskProperty.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintMaskProperty.cs.meta deleted file mode 100644 index 60f3c1783..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintMaskProperty.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 165ad17d69adf415ea7609a9373de001 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintProperty.cs b/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintProperty.cs deleted file mode 100644 index fb7681244..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintProperty.cs +++ /dev/null @@ -1,79 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintProperty.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintProperty.cs.meta deleted file mode 100644 index ba7b85be8..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/BaseTypes/ObiBlueprintProperty.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 60a83ba184caf4a1aba4da6754776a1d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Properties/IObiPropertyEditableProvider.cs b/Assets/Obi/Editor/Common/Blueprints/Properties/IObiPropertyEditableProvider.cs deleted file mode 100644 index f5345891b..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/IObiPropertyEditableProvider.cs +++ /dev/null @@ -1,13 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Properties/IObiPropertyEditableProvider.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Properties/IObiPropertyEditableProvider.cs.meta deleted file mode 100644 index 3bf0408fa..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/IObiPropertyEditableProvider.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0c3a2643915854763af75d63fa1ec0c9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintColor.cs b/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintColor.cs deleted file mode 100644 index 83d73b9fd..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintColor.cs +++ /dev/null @@ -1,33 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintColor.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintColor.cs.meta deleted file mode 100644 index a371aacab..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintColor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 810c95482e60a44209c5ece07e287153 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterCategory.cs b/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterCategory.cs deleted file mode 100644 index acd53eef4..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterCategory.cs +++ /dev/null @@ -1,32 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterCategory.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterCategory.cs.meta deleted file mode 100644 index 503074933..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterCategory.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 08502999496e54f49bb9dee0e0855794 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterMask.cs b/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterMask.cs deleted file mode 100644 index 6c2d57b57..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterMask.cs +++ /dev/null @@ -1,32 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterMask.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterMask.cs.meta deleted file mode 100644 index 2bdf6b4af..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintFilterMask.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ead8a00c964834718a2411be5d7361f3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintMass.cs b/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintMass.cs deleted file mode 100644 index 32b0e3dd6..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintMass.cs +++ /dev/null @@ -1,33 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintMass.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintMass.cs.meta deleted file mode 100644 index 7dcb1686f..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintMass.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bd39fbd4c226542e58dc8ecceb5f8f14 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintRadius.cs b/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintRadius.cs deleted file mode 100644 index 21f8d384e..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintRadius.cs +++ /dev/null @@ -1,37 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintRadius.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintRadius.cs.meta deleted file mode 100644 index 174009811..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintRadius.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b5c61b50f6f4a468aa246f01e5268831 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintSelected.cs b/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintSelected.cs deleted file mode 100644 index 920a50202..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintSelected.cs +++ /dev/null @@ -1,29 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintSelected.cs.meta b/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintSelected.cs.meta deleted file mode 100644 index d46419e14..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/Properties/ObiBlueprintSelected.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 270971958421b4fec9e5a5ba95699518 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/RenderModes.meta b/Assets/Obi/Editor/Common/Blueprints/RenderModes.meta deleted file mode 100644 index d44e8e2f7..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/RenderModes.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: be5de82c95ded480d881176f73fc19b7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderMode.cs b/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderMode.cs deleted file mode 100644 index 0b780b88f..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderMode.cs +++ /dev/null @@ -1,25 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderMode.cs.meta b/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderMode.cs.meta deleted file mode 100644 index 585711f9b..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderMode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d60f616a126974e6d8be81fbbe459bac -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeAerodynamicConstraints.cs b/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeAerodynamicConstraints.cs deleted file mode 100644 index eeb6854bf..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeAerodynamicConstraints.cs +++ /dev/null @@ -1,63 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeAerodynamicConstraints.cs.meta b/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeAerodynamicConstraints.cs.meta deleted file mode 100644 index c6efaed72..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeAerodynamicConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 18881e26e784d47aaa8aa27c93fe0b49 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeBendConstraints.cs b/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeBendConstraints.cs deleted file mode 100644 index a5f68cb9d..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeBendConstraints.cs +++ /dev/null @@ -1,44 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeBendConstraints.cs.meta b/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeBendConstraints.cs.meta deleted file mode 100644 index ec81849a4..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeBendConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 15e21bc6bea1c4320948413c8d7334bd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeDistanceConstraints.cs b/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeDistanceConstraints.cs deleted file mode 100644 index b4fb4f071..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeDistanceConstraints.cs +++ /dev/null @@ -1,44 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeDistanceConstraints.cs.meta b/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeDistanceConstraints.cs.meta deleted file mode 100644 index c6b32ad18..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeDistanceConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ac734c05a2b994f148fd43cd5829b1be -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeMesh.cs b/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeMesh.cs deleted file mode 100644 index 2f3473b9d..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeMesh.cs +++ /dev/null @@ -1,46 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeMesh.cs.meta b/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeMesh.cs.meta deleted file mode 100644 index 19cb4d496..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeMesh.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: dbcd302f71d6446cd976f736b365c7ba -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeParticles.cs b/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeParticles.cs deleted file mode 100644 index 47135af02..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeParticles.cs +++ /dev/null @@ -1,65 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeParticles.cs.meta b/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeParticles.cs.meta deleted file mode 100644 index 7e91ad77d..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeParticles.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b51ea2becbebe48ba9d77e9d28403f51 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeShapeMatchingConstraints.cs b/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeShapeMatchingConstraints.cs deleted file mode 100644 index 582243824..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeShapeMatchingConstraints.cs +++ /dev/null @@ -1,54 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeShapeMatchingConstraints.cs.meta b/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeShapeMatchingConstraints.cs.meta deleted file mode 100644 index 201059f1d..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeShapeMatchingConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e5ff128cfebee45ffb8266eb3e75522e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeTetherConstraints.cs b/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeTetherConstraints.cs deleted file mode 100644 index bd33fafd7..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeTetherConstraints.cs +++ /dev/null @@ -1,43 +0,0 @@ -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/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeTetherConstraints.cs.meta b/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeTetherConstraints.cs.meta deleted file mode 100644 index 948860366..000000000 --- a/Assets/Obi/Editor/Common/Blueprints/RenderModes/ObiBlueprintRenderModeTetherConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 63054cbedb75c4aa7906bf1c24552085 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Collisions.meta b/Assets/Obi/Editor/Common/Collisions.meta deleted file mode 100644 index e3f2bc768..000000000 --- a/Assets/Obi/Editor/Common/Collisions.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5759f1c7beafc485489fb47abffaa269 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Collisions/ObiColliderEditor.cs b/Assets/Obi/Editor/Common/Collisions/ObiColliderEditor.cs deleted file mode 100644 index 548574a92..000000000 --- a/Assets/Obi/Editor/Common/Collisions/ObiColliderEditor.cs +++ /dev/null @@ -1,110 +0,0 @@ -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"); - - foreach (ObiColliderBase t in targets) - { - if (!t.gameObject.isStatic) - t.ForceUpdate(); - } - - // Apply changes to the serializedProperty - if (GUI.changed) - { - serializedObject.ApplyModifiedProperties(); - } - - } - - } -} - - diff --git a/Assets/Obi/Editor/Common/Collisions/ObiColliderEditor.cs.meta b/Assets/Obi/Editor/Common/Collisions/ObiColliderEditor.cs.meta deleted file mode 100644 index 0373df8a6..000000000 --- a/Assets/Obi/Editor/Common/Collisions/ObiColliderEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 7c99a0a8358754501b3c8089185b0e6f -timeCreated: 1502034385 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Collisions/ObiDistanceFieldEditor.cs b/Assets/Obi/Editor/Common/Collisions/ObiDistanceFieldEditor.cs deleted file mode 100644 index 1ca4989cb..000000000 --- a/Assets/Obi/Editor/Common/Collisions/ObiDistanceFieldEditor.cs +++ /dev/null @@ -1,178 +0,0 @@ -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/Assets/Obi/Editor/Common/Collisions/ObiDistanceFieldEditor.cs.meta b/Assets/Obi/Editor/Common/Collisions/ObiDistanceFieldEditor.cs.meta deleted file mode 100644 index 60e8555ce..000000000 --- a/Assets/Obi/Editor/Common/Collisions/ObiDistanceFieldEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 5d47dd3a8215841aca1fe5b272cb24f2 -timeCreated: 1507046737 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Collisions/ObiForceZoneEditor.cs b/Assets/Obi/Editor/Common/Collisions/ObiForceZoneEditor.cs deleted file mode 100644 index 884ac4c0e..000000000 --- a/Assets/Obi/Editor/Common/Collisions/ObiForceZoneEditor.cs +++ /dev/null @@ -1,30 +0,0 @@ -using UnityEditor; -using UnityEngine; - -namespace Obi -{ - - /** - * Custom inspector for ObiForceZone component. - */ - - [CustomEditor(typeof(ObiForceZone)), CanEditMultipleObjects] - public class ObiForceZoneEditor : Editor - { - - public override void OnInspectorGUI() - { - - serializedObject.UpdateIfRequiredOrScript(); - - DrawPropertiesExcluding(serializedObject, "m_Script"); - - // Apply changes to the serializedProperty - if (GUI.changed) - serializedObject.ApplyModifiedProperties(); - } - - } - -} - diff --git a/Assets/Obi/Editor/Common/Collisions/ObiForceZoneEditor.cs.meta b/Assets/Obi/Editor/Common/Collisions/ObiForceZoneEditor.cs.meta deleted file mode 100644 index 99479b1eb..000000000 --- a/Assets/Obi/Editor/Common/Collisions/ObiForceZoneEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 724435a7a84154b27bb0c8ea49b611df -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Constraints.meta b/Assets/Obi/Editor/Common/Constraints.meta deleted file mode 100644 index 8cfd63c92..000000000 --- a/Assets/Obi/Editor/Common/Constraints.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: cf28ba8ff6a7140e6a7e50a5030ff3e7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Constraints/ObiConstraintParametersDrawer.cs b/Assets/Obi/Editor/Common/Constraints/ObiConstraintParametersDrawer.cs deleted file mode 100644 index 579843b35..000000000 --- a/Assets/Obi/Editor/Common/Constraints/ObiConstraintParametersDrawer.cs +++ /dev/null @@ -1,73 +0,0 @@ -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/Assets/Obi/Editor/Common/Constraints/ObiConstraintParametersDrawer.cs.meta b/Assets/Obi/Editor/Common/Constraints/ObiConstraintParametersDrawer.cs.meta deleted file mode 100644 index ec24a9697..000000000 --- a/Assets/Obi/Editor/Common/Constraints/ObiConstraintParametersDrawer.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: bc70cbc4838a4467687180e4d555b069 -timeCreated: 1515057027 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/ObiAboutWindow.cs b/Assets/Obi/Editor/Common/ObiAboutWindow.cs deleted file mode 100644 index e7b22a08c..000000000 --- a/Assets/Obi/Editor/Common/ObiAboutWindow.cs +++ /dev/null @@ -1,73 +0,0 @@ - -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/Assets/Obi/Editor/Common/ObiAboutWindow.cs.meta b/Assets/Obi/Editor/Common/ObiAboutWindow.cs.meta deleted file mode 100644 index 6166f573a..000000000 --- a/Assets/Obi/Editor/Common/ObiAboutWindow.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: c6764c51caa004a25ab49afc9865d2b3 -timeCreated: 1498062614 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/ObiSettingsProvider.cs b/Assets/Obi/Editor/Common/ObiSettingsProvider.cs deleted file mode 100644 index a03cb52b5..000000000 --- a/Assets/Obi/Editor/Common/ObiSettingsProvider.cs +++ /dev/null @@ -1,81 +0,0 @@ -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/Assets/Obi/Editor/Common/ObiSettingsProvider.cs.meta b/Assets/Obi/Editor/Common/ObiSettingsProvider.cs.meta deleted file mode 100644 index 7c37da331..000000000 --- a/Assets/Obi/Editor/Common/ObiSettingsProvider.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 19ac664f594284b3c92ddb354155d814 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Rendering.meta b/Assets/Obi/Editor/Common/Rendering.meta deleted file mode 100644 index 07c70140c..000000000 --- a/Assets/Obi/Editor/Common/Rendering.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 60a71308789c34bb8a53415b380a6706 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Rendering/ObiParticleRendererEditor.cs b/Assets/Obi/Editor/Common/Rendering/ObiParticleRendererEditor.cs deleted file mode 100644 index 310ac05e3..000000000 --- a/Assets/Obi/Editor/Common/Rendering/ObiParticleRendererEditor.cs +++ /dev/null @@ -1,32 +0,0 @@ -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/Assets/Obi/Editor/Common/Rendering/ObiParticleRendererEditor.cs.meta b/Assets/Obi/Editor/Common/Rendering/ObiParticleRendererEditor.cs.meta deleted file mode 100644 index e249bdb53..000000000 --- a/Assets/Obi/Editor/Common/Rendering/ObiParticleRendererEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 2a7e6fcc51ab349e687aa6ca5bdf6739 -timeCreated: 1463090765 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Solver.meta b/Assets/Obi/Editor/Common/Solver.meta deleted file mode 100644 index 0d6cdda63..000000000 --- a/Assets/Obi/Editor/Common/Solver.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d82f874c48e764fb8b49f1767f76a94a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Solver/ObiSolverEditor.cs b/Assets/Obi/Editor/Common/Solver/ObiSolverEditor.cs deleted file mode 100644 index bf3eebebb..000000000 --- a/Assets/Obi/Editor/Common/Solver/ObiSolverEditor.cs +++ /dev/null @@ -1,406 +0,0 @@ -using UnityEditor; -using UnityEngine; -using UnityEditor.IMGUI.Controls; -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 useLimits; - SerializedProperty boundaryLimits; - SerializedProperty killOffLimitsParticles; - SerializedProperty worldLinearInertiaScale; - SerializedProperty worldAngularInertiaScale; - - SerializedProperty foamSubsteps; - SerializedProperty foamMinNeighbors; - SerializedProperty foamCollisions; - SerializedProperty foamRadiusScale; - SerializedProperty foamVolumeDensity; - SerializedProperty foamAmbientDensity; - SerializedProperty foamScatterColor; - SerializedProperty foamAmbientColor; - SerializedProperty maxFoamVelocityStretch; - SerializedProperty foamFade; - SerializedProperty foamAccelAgingRange; - SerializedProperty foamAccelAging; - - SerializedProperty distanceConstraintParameters; - SerializedProperty bendingConstraintParameters; - SerializedProperty particleCollisionConstraintParameters; - SerializedProperty particleFrictionConstraintParameters; - SerializedProperty collisionConstraintParameters; - SerializedProperty frictionConstraintParameters; - SerializedProperty skinConstraintParameters; - SerializedProperty volumeConstraintParameters; - SerializedProperty shapeMatchingConstraintParameters; - SerializedProperty tetherConstraintParameters; - SerializedProperty pinConstraintParameters; - SerializedProperty pinholeConstraintParameters; - SerializedProperty stitchConstraintParameters; - SerializedProperty densityConstraintParameters; - SerializedProperty stretchShearConstraintParameters; - SerializedProperty bendTwistConstraintParameters; - SerializedProperty chainConstraintParameters; - - SerializedProperty maxSurfaceChunks; - SerializedProperty maxQueryResults; - SerializedProperty maxFoamParticles; - SerializedProperty maxParticleNeighbors; - SerializedProperty maxParticleContacts; - - BooleanPreference solverFoldout; - BooleanPreference simulationFoldout; - BooleanPreference advectionFoldout; - BooleanPreference collisionsFoldout; - BooleanPreference constraintsFoldout; - BooleanPreference memoryFoldout; - - GUIContent constraintLabelContent; - - BoxBoundsHandle limitsBoxHandle; - - public void OnEnable() - { - solver = (ObiSolver)target; - constraintLabelContent = new GUIContent(); - limitsBoxHandle = new BoxBoundsHandle(); - - solverFoldout = new BooleanPreference($"{target.GetType()}.solverFoldout", true); - simulationFoldout = new BooleanPreference($"{target.GetType()}.simulationFoldout", false); - advectionFoldout = new BooleanPreference($"{target.GetType()}.advectionFoldout", false); - collisionsFoldout = new BooleanPreference($"{target.GetType()}.collisionsFoldout", false); - constraintsFoldout = new BooleanPreference($"{target.GetType()}.constraintsFoldout", false); - memoryFoldout = new BooleanPreference($"{target.GetType()}.memoryFoldout", false); - - backend = serializedObject.FindProperty("m_Backend"); - substeps = serializedObject.FindProperty("substeps"); - maxStepsPerFrame = serializedObject.FindProperty("maxStepsPerFrame"); - synchronization = serializedObject.FindProperty("synchronization"); - simulateWhenInvisible = serializedObject.FindProperty("simulateWhenInvisible"); - parameters = serializedObject.FindProperty("parameters"); - gravity = serializedObject.FindProperty("gravity"); - gravitySpace = serializedObject.FindProperty("gravitySpace"); - ambientWind = serializedObject.FindProperty("ambientWind"); - windSpace = serializedObject.FindProperty("windSpace"); - useLimits = serializedObject.FindProperty("useLimits"); - boundaryLimits = serializedObject.FindProperty("boundaryLimits"); - killOffLimitsParticles = serializedObject.FindProperty("killOffLimitsParticles"); - worldLinearInertiaScale = serializedObject.FindProperty("worldLinearInertiaScale"); - worldAngularInertiaScale = serializedObject.FindProperty("worldAngularInertiaScale"); - - foamSubsteps = serializedObject.FindProperty("foamSubsteps"); - foamMinNeighbors = serializedObject.FindProperty("foamMinNeighbors"); - foamCollisions = serializedObject.FindProperty("foamCollisions"); - foamRadiusScale = serializedObject.FindProperty("foamRadiusScale"); - foamVolumeDensity = serializedObject.FindProperty("foamVolumeDensity"); - foamAmbientDensity = serializedObject.FindProperty("foamAmbientDensity"); - foamScatterColor = serializedObject.FindProperty("foamScatterColor"); - foamAmbientColor = serializedObject.FindProperty("foamAmbientColor"); - maxFoamVelocityStretch = serializedObject.FindProperty("maxFoamVelocityStretch"); - foamFade = serializedObject.FindProperty("foamFade"); - foamAccelAgingRange = serializedObject.FindProperty("foamAccelAgingRange"); - foamAccelAging = serializedObject.FindProperty("foamAccelAging"); - - distanceConstraintParameters = serializedObject.FindProperty("distanceConstraintParameters"); - bendingConstraintParameters = serializedObject.FindProperty("bendingConstraintParameters"); - particleCollisionConstraintParameters = serializedObject.FindProperty("particleCollisionConstraintParameters"); - 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"); - pinholeConstraintParameters = serializedObject.FindProperty("pinholeConstraintParameters"); - stitchConstraintParameters = serializedObject.FindProperty("stitchConstraintParameters"); - densityConstraintParameters = serializedObject.FindProperty("densityConstraintParameters"); - stretchShearConstraintParameters = serializedObject.FindProperty("stretchShearConstraintParameters"); - bendTwistConstraintParameters = serializedObject.FindProperty("bendTwistConstraintParameters"); - chainConstraintParameters = serializedObject.FindProperty("chainConstraintParameters"); - - maxSurfaceChunks = serializedObject.FindProperty("m_MaxSurfaceChunks"); - maxQueryResults = serializedObject.FindProperty("maxQueryResults"); - maxFoamParticles = serializedObject.FindProperty("maxFoamParticles"); - maxParticleNeighbors = serializedObject.FindProperty("maxParticleNeighbors"); - maxParticleContacts = serializedObject.FindProperty("maxParticleContacts"); - } - - public void OnSceneGUI() - { - if (solver.useLimits) - { - using (new Handles.DrawingScope(Color.red, solver.transform.localToWorldMatrix)) - { - limitsBoxHandle.center = solver.boundaryLimits.center; - limitsBoxHandle.size = solver.boundaryLimits.size; - - EditorGUI.BeginChangeCheck(); - limitsBoxHandle.DrawHandle(); - if (EditorGUI.EndChangeCheck()) - { - solver.boundaryLimits = new Bounds(limitsBoxHandle.center, limitsBoxHandle.size); - EditorUtility.SetDirty(target); - } - } - } - } - - public override void OnInspectorGUI() - { - serializedObject.UpdateIfRequiredOrScript(); - EditorGUILayout.HelpBox("Particles:" + solver.allocParticleCount + "\n" + - "Simplices:" + solver.simplexCounts.simplexCount + "\n" + - "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.PropertyField(useLimits); - if (useLimits.boolValue) - { - EditorGUI.indentLevel++; - EditorGUILayout.PropertyField(killOffLimitsParticles); - EditorGUILayout.PropertyField(boundaryLimits); - EditorGUI.indentLevel--; - } - } - EditorGUILayout.EndFoldoutHeaderGroup(); - - advectionFoldout.value = EditorGUILayout.BeginFoldoutHeaderGroup(advectionFoldout, "Foam settings"); - if (advectionFoldout) - { - EditorGUILayout.PropertyField(foamSubsteps); - EditorGUILayout.PropertyField(foamMinNeighbors); - EditorGUILayout.PropertyField(foamCollisions, new GUIContent("Foam Collisions (Compute only)")); - EditorGUILayout.PropertyField(foamRadiusScale); - EditorGUILayout.PropertyField(foamVolumeDensity); - EditorGUILayout.PropertyField(foamAmbientDensity); - EditorGUILayout.PropertyField(foamScatterColor); - EditorGUILayout.PropertyField(foamAmbientColor); - EditorGUILayout.PropertyField(maxFoamVelocityStretch); - EditorGUILayout.PropertyField(parameters.FindPropertyRelative("foamGravityScale")); - EditorGUILayout.PropertyField(foamFade); - EditorGUILayout.PropertyField(foamAccelAgingRange); - EditorGUILayout.PropertyField(foamAccelAging); - } - EditorGUILayout.EndFoldoutHeaderGroup(); - - collisionsFoldout.value = EditorGUILayout.BeginFoldoutHeaderGroup(collisionsFoldout, "Collision settings"); - if (collisionsFoldout) - { - EditorGUILayout.PropertyField(parameters.FindPropertyRelative("colliderCCD")); - EditorGUILayout.PropertyField(parameters.FindPropertyRelative("particleCCD")); - EditorGUILayout.PropertyField(parameters.FindPropertyRelative("collisionMargin")); - EditorGUILayout.PropertyField(parameters.FindPropertyRelative("maxDepenetration")); - EditorGUILayout.PropertyField(parameters.FindPropertyRelative("shockPropagation")); - EditorGUILayout.PropertyField(parameters.FindPropertyRelative("surfaceCollisionIterations")); - EditorGUILayout.PropertyField(parameters.FindPropertyRelative("surfaceCollisionTolerance")); - EditorGUILayout.PropertyField(parameters.FindPropertyRelative("diffusionMask")); - } - EditorGUILayout.EndFoldoutHeaderGroup(); - - 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 = "Pinhole"; - EditorGUILayout.PropertyField(pinholeConstraintParameters, 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/Assets/Obi/Editor/Common/Solver/ObiSolverEditor.cs.meta b/Assets/Obi/Editor/Common/Solver/ObiSolverEditor.cs.meta deleted file mode 100644 index 07e52a910..000000000 --- a/Assets/Obi/Editor/Common/Solver/ObiSolverEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d776094922a7647ccb5194d08e93ceaf -timeCreated: 1444024856 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Utils.meta b/Assets/Obi/Editor/Common/Utils.meta deleted file mode 100644 index b00896037..000000000 --- a/Assets/Obi/Editor/Common/Utils.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b7a80ed0e578946aaad351df0313281a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Utils/BooleanPreference.cs b/Assets/Obi/Editor/Common/Utils/BooleanPreference.cs deleted file mode 100644 index d74b8dc46..000000000 --- a/Assets/Obi/Editor/Common/Utils/BooleanPreference.cs +++ /dev/null @@ -1,46 +0,0 @@ - -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/Assets/Obi/Editor/Common/Utils/BooleanPreference.cs.meta b/Assets/Obi/Editor/Common/Utils/BooleanPreference.cs.meta deleted file mode 100644 index f74e188c6..000000000 --- a/Assets/Obi/Editor/Common/Utils/BooleanPreference.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4af60554659c94226a5b3cf0b5987a5f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Utils/ObiEditorUtils.cs b/Assets/Obi/Editor/Common/Utils/ObiEditorUtils.cs deleted file mode 100644 index be05d5a30..000000000 --- a/Assets/Obi/Editor/Common/Utils/ObiEditorUtils.cs +++ /dev/null @@ -1,254 +0,0 @@ -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/Assets/Obi/Editor/Common/Utils/ObiEditorUtils.cs.meta b/Assets/Obi/Editor/Common/Utils/ObiEditorUtils.cs.meta deleted file mode 100644 index 582e66409..000000000 --- a/Assets/Obi/Editor/Common/Utils/ObiEditorUtils.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 57c936f7a4f99456d944beed51c5b935 -timeCreated: 1452817402 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Utils/ObiFoamGeneratorEditor.cs b/Assets/Obi/Editor/Common/Utils/ObiFoamGeneratorEditor.cs deleted file mode 100644 index 42d4e21df..000000000 --- a/Assets/Obi/Editor/Common/Utils/ObiFoamGeneratorEditor.cs +++ /dev/null @@ -1,24 +0,0 @@ -using UnityEditor; -using UnityEngine; - -namespace Obi -{ - - [CustomEditor(typeof(ObiFoamGenerator)), CanEditMultipleObjects] - public class ObiFoamGeneratorEditor : Editor - { - public override void OnInspectorGUI() - { - serializedObject.UpdateIfRequiredOrScript(); - - DrawPropertiesExcluding(serializedObject, "m_Script"); - - // Apply changes to the serializedProperty - if (GUI.changed) - serializedObject.ApplyModifiedProperties(); - } - - } - -} - diff --git a/Assets/Obi/Editor/Common/Utils/ObiFoamGeneratorEditor.cs.meta b/Assets/Obi/Editor/Common/Utils/ObiFoamGeneratorEditor.cs.meta deleted file mode 100644 index baab18072..000000000 --- a/Assets/Obi/Editor/Common/Utils/ObiFoamGeneratorEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b9656e2c54d9e4c478c74ca6d97428f8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Utils/ObiParticleAttachmentEditor.cs b/Assets/Obi/Editor/Common/Utils/ObiParticleAttachmentEditor.cs deleted file mode 100644 index b9f0bf988..000000000 --- a/Assets/Obi/Editor/Common/Utils/ObiParticleAttachmentEditor.cs +++ /dev/null @@ -1,124 +0,0 @@ -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 projectPosition; - 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"); - projectPosition = serializedObject.FindProperty("m_Projection"); - constrainOrientation = serializedObject.FindProperty("m_ConstrainOrientation"); - compliance = serializedObject.FindProperty("m_Compliance"); - breakThreshold = serializedObject.FindProperty("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(projectPosition, new GUIContent("Projection")); - 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/Assets/Obi/Editor/Common/Utils/ObiParticleAttachmentEditor.cs.meta b/Assets/Obi/Editor/Common/Utils/ObiParticleAttachmentEditor.cs.meta deleted file mode 100644 index 4d17dbba7..000000000 --- a/Assets/Obi/Editor/Common/Utils/ObiParticleAttachmentEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1587d981fa96c4b2291e19484a5a5b13 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Utils/ObiRaycastHit.cs b/Assets/Obi/Editor/Common/Utils/ObiRaycastHit.cs deleted file mode 100644 index d56e32775..000000000 --- a/Assets/Obi/Editor/Common/Utils/ObiRaycastHit.cs +++ /dev/null @@ -1,26 +0,0 @@ -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/Assets/Obi/Editor/Common/Utils/ObiRaycastHit.cs.meta b/Assets/Obi/Editor/Common/Utils/ObiRaycastHit.cs.meta deleted file mode 100644 index 27e33591e..000000000 --- a/Assets/Obi/Editor/Common/Utils/ObiRaycastHit.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2eb47a91b4f7c4f4aa52d4b914caa96e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Common/Utils/PreviewHelpers.cs b/Assets/Obi/Editor/Common/Utils/PreviewHelpers.cs deleted file mode 100644 index 5ba601a90..000000000 --- a/Assets/Obi/Editor/Common/Utils/PreviewHelpers.cs +++ /dev/null @@ -1,150 +0,0 @@ -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/Assets/Obi/Editor/Common/Utils/PreviewHelpers.cs.meta b/Assets/Obi/Editor/Common/Utils/PreviewHelpers.cs.meta deleted file mode 100644 index 8ff77efc9..000000000 --- a/Assets/Obi/Editor/Common/Utils/PreviewHelpers.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 886ef4783c97a4dac9034b48a6c94b6c -timeCreated: 1438171037 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Obi.Editor.asmdef b/Assets/Obi/Editor/Obi.Editor.asmdef deleted file mode 100644 index 3c97604ac..000000000 --- a/Assets/Obi/Editor/Obi.Editor.asmdef +++ /dev/null @@ -1,33 +0,0 @@ -{ - "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/Assets/Obi/Editor/Obi.Editor.asmdef.meta b/Assets/Obi/Editor/Obi.Editor.asmdef.meta deleted file mode 100644 index 770027d79..000000000 --- a/Assets/Obi/Editor/Obi.Editor.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 180639cf42b5c450c8fdad7e31d2ec13 -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/ObiParticleSelection.cs b/Assets/Obi/Editor/ObiParticleSelection.cs deleted file mode 100644 index 06f1bb9d6..000000000 --- a/Assets/Obi/Editor/ObiParticleSelection.cs +++ /dev/null @@ -1,186 +0,0 @@ -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/Assets/Obi/Editor/ObiParticleSelection.cs.meta b/Assets/Obi/Editor/ObiParticleSelection.cs.meta deleted file mode 100644 index c877a037d..000000000 --- a/Assets/Obi/Editor/ObiParticleSelection.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7020925dabebf42b7915da74e58c3b5e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/ObiStitcherEditor.cs b/Assets/Obi/Editor/ObiStitcherEditor.cs deleted file mode 100644 index 0c4b395ba..000000000 --- a/Assets/Obi/Editor/ObiStitcherEditor.cs +++ /dev/null @@ -1,287 +0,0 @@ -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/Assets/Obi/Editor/ObiStitcherEditor.cs.meta b/Assets/Obi/Editor/ObiStitcherEditor.cs.meta deleted file mode 100644 index b0c18e2e1..000000000 --- a/Assets/Obi/Editor/ObiStitcherEditor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 7d360f36068814e1a9e2835455e6be61 -timeCreated: 1489407253 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources.meta b/Assets/Obi/Editor/Resources.meta deleted file mode 100644 index 2f133580a..000000000 --- a/Assets/Obi/Editor/Resources.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: a89eef02b8abc42e2b56e6150832233d -folderAsset: yes -timeCreated: 1498032496 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/AddControlPoint.psd b/Assets/Obi/Editor/Resources/AddControlPoint.psd deleted file mode 100644 index d968222e8..000000000 Binary files a/Assets/Obi/Editor/Resources/AddControlPoint.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/AddControlPoint.psd.meta b/Assets/Obi/Editor/Resources/AddControlPoint.psd.meta deleted file mode 100644 index 5dbc55215..000000000 --- a/Assets/Obi/Editor/Resources/AddControlPoint.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/AddIcon.psd b/Assets/Obi/Editor/Resources/AddIcon.psd deleted file mode 100644 index b4142a483..000000000 Binary files a/Assets/Obi/Editor/Resources/AddIcon.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/AddIcon.psd.meta b/Assets/Obi/Editor/Resources/AddIcon.psd.meta deleted file mode 100644 index 4ac9b4eda..000000000 --- a/Assets/Obi/Editor/Resources/AddIcon.psd.meta +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Editor/Resources/AddTetherButton.psd b/Assets/Obi/Editor/Resources/AddTetherButton.psd deleted file mode 100644 index f0f2cd2aa..000000000 Binary files a/Assets/Obi/Editor/Resources/AddTetherButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/AddTetherButton.psd.meta b/Assets/Obi/Editor/Resources/AddTetherButton.psd.meta deleted file mode 100644 index 9cf24278a..000000000 --- a/Assets/Obi/Editor/Resources/AddTetherButton.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/BackfacesButton.psd b/Assets/Obi/Editor/Resources/BackfacesButton.psd deleted file mode 100644 index 325bbf2ec..000000000 Binary files a/Assets/Obi/Editor/Resources/BackfacesButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/BackfacesButton.psd.meta b/Assets/Obi/Editor/Resources/BackfacesButton.psd.meta deleted file mode 100644 index 9e88b6687..000000000 --- a/Assets/Obi/Editor/Resources/BackfacesButton.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/BranchButton.png b/Assets/Obi/Editor/Resources/BranchButton.png deleted file mode 100644 index c389a9735..000000000 Binary files a/Assets/Obi/Editor/Resources/BranchButton.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/BranchButton.png.meta b/Assets/Obi/Editor/Resources/BranchButton.png.meta deleted file mode 100644 index 6a4866bcd..000000000 --- a/Assets/Obi/Editor/Resources/BranchButton.png.meta +++ /dev/null @@ -1,117 +0,0 @@ -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/Assets/Obi/Editor/Resources/BrushHandle.psd b/Assets/Obi/Editor/Resources/BrushHandle.psd deleted file mode 100644 index 43cd79c00..000000000 Binary files a/Assets/Obi/Editor/Resources/BrushHandle.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/BrushHandle.psd.meta b/Assets/Obi/Editor/Resources/BrushHandle.psd.meta deleted file mode 100644 index 812e50ad4..000000000 --- a/Assets/Obi/Editor/Resources/BrushHandle.psd.meta +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Editor/Resources/BrushIcon.psd b/Assets/Obi/Editor/Resources/BrushIcon.psd deleted file mode 100644 index b3bbf8bd8..000000000 Binary files a/Assets/Obi/Editor/Resources/BrushIcon.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/BrushIcon.psd.meta b/Assets/Obi/Editor/Resources/BrushIcon.psd.meta deleted file mode 100644 index aa215c88b..000000000 --- a/Assets/Obi/Editor/Resources/BrushIcon.psd.meta +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Editor/Resources/ClearButton.psd b/Assets/Obi/Editor/Resources/ClearButton.psd deleted file mode 100644 index fca2599fc..000000000 Binary files a/Assets/Obi/Editor/Resources/ClearButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/ClearButton.psd.meta b/Assets/Obi/Editor/Resources/ClearButton.psd.meta deleted file mode 100644 index ec97fbfbc..000000000 --- a/Assets/Obi/Editor/Resources/ClearButton.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/ClearTethersButton.psd b/Assets/Obi/Editor/Resources/ClearTethersButton.psd deleted file mode 100644 index 12467dd84..000000000 Binary files a/Assets/Obi/Editor/Resources/ClearTethersButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/ClearTethersButton.psd.meta b/Assets/Obi/Editor/Resources/ClearTethersButton.psd.meta deleted file mode 100644 index b06e21fb1..000000000 --- a/Assets/Obi/Editor/Resources/ClearTethersButton.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/DistanceFieldPreview.mat b/Assets/Obi/Editor/Resources/DistanceFieldPreview.mat deleted file mode 100644 index 148e9ff27..000000000 Binary files a/Assets/Obi/Editor/Resources/DistanceFieldPreview.mat and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/DistanceFieldPreview.mat.meta b/Assets/Obi/Editor/Resources/DistanceFieldPreview.mat.meta deleted file mode 100644 index 0e5f4b005..000000000 --- a/Assets/Obi/Editor/Resources/DistanceFieldPreview.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5dde1f45f471c48a1a13fc4b8c0b5b43 -timeCreated: 1438180916 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/DistanceFieldPreview.shader b/Assets/Obi/Editor/Resources/DistanceFieldPreview.shader deleted file mode 100644 index 5b6de21f6..000000000 --- a/Assets/Obi/Editor/Resources/DistanceFieldPreview.shader +++ /dev/null @@ -1,121 +0,0 @@ -// 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/Assets/Obi/Editor/Resources/DistanceFieldPreview.shader.meta b/Assets/Obi/Editor/Resources/DistanceFieldPreview.shader.meta deleted file mode 100644 index 84621625c..000000000 --- a/Assets/Obi/Editor/Resources/DistanceFieldPreview.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: f667dd333ac88440587339a2a1ac0027 -timeCreated: 1438180827 -licenseType: Store -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/EditCurves.psd b/Assets/Obi/Editor/Resources/EditCurves.psd deleted file mode 100644 index 2a82cde45..000000000 Binary files a/Assets/Obi/Editor/Resources/EditCurves.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/EditCurves.psd.meta b/Assets/Obi/Editor/Resources/EditCurves.psd.meta deleted file mode 100644 index e2d484986..000000000 --- a/Assets/Obi/Editor/Resources/EditCurves.psd.meta +++ /dev/null @@ -1,116 +0,0 @@ -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/Assets/Obi/Editor/Resources/EditParticles.psd b/Assets/Obi/Editor/Resources/EditParticles.psd deleted file mode 100644 index 14a51cef1..000000000 Binary files a/Assets/Obi/Editor/Resources/EditParticles.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/EditParticles.psd.meta b/Assets/Obi/Editor/Resources/EditParticles.psd.meta deleted file mode 100644 index f5ed72827..000000000 --- a/Assets/Obi/Editor/Resources/EditParticles.psd.meta +++ /dev/null @@ -1,57 +0,0 @@ -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/Assets/Obi/Editor/Resources/EditorLineShader.shader b/Assets/Obi/Editor/Resources/EditorLineShader.shader deleted file mode 100644 index d44991f8b..000000000 --- a/Assets/Obi/Editor/Resources/EditorLineShader.shader +++ /dev/null @@ -1,17 +0,0 @@ -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/Assets/Obi/Editor/Resources/EditorLineShader.shader.meta b/Assets/Obi/Editor/Resources/EditorLineShader.shader.meta deleted file mode 100644 index f880ee9a0..000000000 --- a/Assets/Obi/Editor/Resources/EditorLineShader.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 80a01a94e9fdb445a9e6dff54db02fa9 -timeCreated: 1470908721 -licenseType: Store -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/EditorLines.mat b/Assets/Obi/Editor/Resources/EditorLines.mat deleted file mode 100644 index 1a638369f..000000000 Binary files a/Assets/Obi/Editor/Resources/EditorLines.mat and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/EditorLines.mat.meta b/Assets/Obi/Editor/Resources/EditorLines.mat.meta deleted file mode 100644 index a41900376..000000000 --- a/Assets/Obi/Editor/Resources/EditorLines.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f3999384313644fe3b9ba16589efe636 -timeCreated: 1470908872 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/EditorParticle.mat b/Assets/Obi/Editor/Resources/EditorParticle.mat deleted file mode 100644 index 48fb9aedf..000000000 Binary files a/Assets/Obi/Editor/Resources/EditorParticle.mat and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/EditorParticle.mat.meta b/Assets/Obi/Editor/Resources/EditorParticle.mat.meta deleted file mode 100644 index c04a62200..000000000 --- a/Assets/Obi/Editor/Resources/EditorParticle.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8c668cf76c548481c80404cce80ab834 -timeCreated: 1445287098 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/EditorParticle.shader b/Assets/Obi/Editor/Resources/EditorParticle.shader deleted file mode 100644 index 214d6e40b..000000000 --- a/Assets/Obi/Editor/Resources/EditorParticle.shader +++ /dev/null @@ -1,60 +0,0 @@ -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/Assets/Obi/Editor/Resources/EditorParticle.shader.meta b/Assets/Obi/Editor/Resources/EditorParticle.shader.meta deleted file mode 100644 index 3dd4ff7c4..000000000 --- a/Assets/Obi/Editor/Resources/EditorParticle.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: a16859f14873144e2b41f2bd03a84bbc -timeCreated: 1445287084 -licenseType: Store -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/EditorParticleShader.shader b/Assets/Obi/Editor/Resources/EditorParticleShader.shader deleted file mode 100644 index 5db70c755..000000000 --- a/Assets/Obi/Editor/Resources/EditorParticleShader.shader +++ /dev/null @@ -1,133 +0,0 @@ -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; - //float3x3 P : TEXCOORD5; - }; - - 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; - //o.P = float3x3(v.t0.xyz,v.t1.xyz,v.t2.xyz); - - 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)); - - // local space normal, use to calculate UVs - /*float3 ln = mul(mul((float3x3)i.P,UNITY_MATRIX_I_V) ,n); - - float2 uv = float2( - // atan returns a value between -pi and pi - // so we divide by pi * 2 to get -0.5 to 0.5 - atan2(ln.x, ln.y) / (3.1415 * 2.0), - // acos returns 0.0 at the top, pi at the bottom - // so we flip the y to align with Unity's OpenGL style - // texture UVs so 0.0 is at the bottom - acos(-ln.z) / 3.1415 - );*/ - - // simple lighting: ambient - float3 modelUp = mul (UNITY_MATRIX_IT_MV,float3(0,1,0)); - float vecHemi = dot(n, modelUp) * 0.5f + 0.5f; - 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/Assets/Obi/Editor/Resources/EditorParticleShader.shader.meta b/Assets/Obi/Editor/Resources/EditorParticleShader.shader.meta deleted file mode 100644 index 7e76c5afa..000000000 --- a/Assets/Obi/Editor/Resources/EditorParticleShader.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: f909e74f185674832ad45806b9c6e60f -timeCreated: 1438934781 -licenseType: Store -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/FillButton.psd b/Assets/Obi/Editor/Resources/FillButton.psd deleted file mode 100644 index ee57c7baf..000000000 Binary files a/Assets/Obi/Editor/Resources/FillButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/FillButton.psd.meta b/Assets/Obi/Editor/Resources/FillButton.psd.meta deleted file mode 100644 index 70102da78..000000000 --- a/Assets/Obi/Editor/Resources/FillButton.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/FrontfacesButton.psd b/Assets/Obi/Editor/Resources/FrontfacesButton.psd deleted file mode 100644 index 391194698..000000000 Binary files a/Assets/Obi/Editor/Resources/FrontfacesButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/FrontfacesButton.psd.meta b/Assets/Obi/Editor/Resources/FrontfacesButton.psd.meta deleted file mode 100644 index 188af017e..000000000 --- a/Assets/Obi/Editor/Resources/FrontfacesButton.psd.meta +++ /dev/null @@ -1,95 +0,0 @@ -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/Assets/Obi/Editor/Resources/GaussianButton.psd b/Assets/Obi/Editor/Resources/GaussianButton.psd deleted file mode 100644 index 42afd4259..000000000 Binary files a/Assets/Obi/Editor/Resources/GaussianButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/GaussianButton.psd.meta b/Assets/Obi/Editor/Resources/GaussianButton.psd.meta deleted file mode 100644 index 8d580bc48..000000000 --- a/Assets/Obi/Editor/Resources/GaussianButton.psd.meta +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Editor/Resources/HandleButton.psd b/Assets/Obi/Editor/Resources/HandleButton.psd deleted file mode 100644 index 3b65a0f9b..000000000 Binary files a/Assets/Obi/Editor/Resources/HandleButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/HandleButton.psd.meta b/Assets/Obi/Editor/Resources/HandleButton.psd.meta deleted file mode 100644 index a6a595845..000000000 --- a/Assets/Obi/Editor/Resources/HandleButton.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons.meta b/Assets/Obi/Editor/Resources/Icons.meta deleted file mode 100644 index 3382ebe47..000000000 --- a/Assets/Obi/Editor/Resources/Icons.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 292753011b5614e38934aacb2697fd86 -folderAsset: yes -timeCreated: 1482921919 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/Icons/ObiActorBlueprint Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiActorBlueprint Icon.png deleted file mode 100644 index 850ee5f48..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiActorBlueprint Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiActorBlueprint Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiActorBlueprint Icon.png.meta deleted file mode 100644 index 0e77ce1c7..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiActorBlueprint Icon.png.meta +++ /dev/null @@ -1,117 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiAerodynamicConstraints Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiAerodynamicConstraints Icon.png deleted file mode 100644 index ae0f69a06..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiAerodynamicConstraints Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiAerodynamicConstraints Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiAerodynamicConstraints Icon.png.meta deleted file mode 100644 index fa9e5e66f..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiAerodynamicConstraints Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiBendConstraints Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiBendConstraints Icon.png deleted file mode 100644 index a07cacc4a..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiBendConstraints Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiBendConstraints Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiBendConstraints Icon.png.meta deleted file mode 100644 index 0fd78b8cd..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiBendConstraints Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiBendTwistConstraints Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiBendTwistConstraints Icon.png deleted file mode 100644 index 63cbd0049..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiBendTwistConstraints Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiBendTwistConstraints Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiBendTwistConstraints Icon.png.meta deleted file mode 100644 index a3012cd3e..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiBendTwistConstraints Icon.png.meta +++ /dev/null @@ -1,95 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiBone Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiBone Icon.png deleted file mode 100644 index 6ddf89c7d..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiBone Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiBone Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiBone Icon.png.meta deleted file mode 100644 index 9ec7609e3..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiBone Icon.png.meta +++ /dev/null @@ -1,140 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiChainConstraints Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiChainConstraints Icon.png deleted file mode 100644 index a07d2cd33..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiChainConstraints Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiChainConstraints Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiChainConstraints Icon.png.meta deleted file mode 100644 index 1596bcb0a..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiChainConstraints Icon.png.meta +++ /dev/null @@ -1,95 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiCloth Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiCloth Icon.png deleted file mode 100644 index 5c4c59c8a..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiCloth Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiCloth Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiCloth Icon.png.meta deleted file mode 100644 index c6f8494ad..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiCloth Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiClothRenderer Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiClothRenderer Icon.png deleted file mode 100644 index ce6b6bd9a..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiClothRenderer Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiClothRenderer Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiClothRenderer Icon.png.meta deleted file mode 100644 index b6a8abd88..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiClothRenderer Icon.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiCollider Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiCollider Icon.png deleted file mode 100644 index d769edbd9..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiCollider Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiCollider Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiCollider Icon.png.meta deleted file mode 100644 index dbadf1f99..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiCollider Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiCollider2D Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiCollider2D Icon.png deleted file mode 100644 index e08dcb4f9..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiCollider2D Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiCollider2D Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiCollider2D Icon.png.meta deleted file mode 100644 index 8e7ac34da..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiCollider2D Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiCollisionMaterial Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiCollisionMaterial Icon.png deleted file mode 100644 index 87f714018..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiCollisionMaterial Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiCollisionMaterial Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiCollisionMaterial Icon.png.meta deleted file mode 100644 index 569974129..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiCollisionMaterial Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiCurve Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiCurve Icon.png deleted file mode 100644 index 00ebdb8a2..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiCurve Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiCurve Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiCurve Icon.png.meta deleted file mode 100644 index c0a6c7cbe..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiCurve Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiDistanceConstraints Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiDistanceConstraints Icon.png deleted file mode 100644 index 2ab4ac8bc..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiDistanceConstraints Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiDistanceConstraints Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiDistanceConstraints Icon.png.meta deleted file mode 100644 index 7194cc7c4..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiDistanceConstraints Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiDistanceField Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiDistanceField Icon.png deleted file mode 100644 index b3f52ee66..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiDistanceField Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiDistanceField Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiDistanceField Icon.png.meta deleted file mode 100644 index fb4c6b08d..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiDistanceField Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiDistanceFieldRenderer Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiDistanceFieldRenderer Icon.png deleted file mode 100644 index d5c420dbd..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiDistanceFieldRenderer Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiDistanceFieldRenderer Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiDistanceFieldRenderer Icon.png.meta deleted file mode 100644 index 137973681..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiDistanceFieldRenderer Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiEmitter Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiEmitter Icon.png deleted file mode 100644 index 51b410b3d..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiEmitter Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiEmitter Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiEmitter Icon.png.meta deleted file mode 100644 index 52988e56f..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiEmitter Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialFluid Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialFluid Icon.png deleted file mode 100644 index 6a8ebdffb..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialFluid Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialFluid Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialFluid Icon.png.meta deleted file mode 100644 index 81bcc5693..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialFluid Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialGranular Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialGranular Icon.png deleted file mode 100644 index 38f11f203..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialGranular Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialGranular Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialGranular Icon.png.meta deleted file mode 100644 index 6a243bbe6..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiEmitterMaterialGranular Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeCube Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeCube Icon.png deleted file mode 100644 index 0f82ff7b2..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeCube Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeCube Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeCube Icon.png.meta deleted file mode 100644 index 4b084eff5..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeCube Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeDisk Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeDisk Icon.png deleted file mode 100644 index 4ab4dbc10..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeDisk Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeDisk Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeDisk Icon.png.meta deleted file mode 100644 index e97895184..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeDisk Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeEdge Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeEdge Icon.png deleted file mode 100644 index 520c263c5..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeEdge Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeEdge Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeEdge Icon.png.meta deleted file mode 100644 index 382e0513d..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeEdge Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeMesh Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeMesh Icon.png deleted file mode 100644 index bb1366c01..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeMesh Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeMesh Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeMesh Icon.png.meta deleted file mode 100644 index 87b746397..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeMesh Icon.png.meta +++ /dev/null @@ -1,128 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSphere Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSphere Icon.png deleted file mode 100644 index 29aac3f70..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSphere Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSphere Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSphere Icon.png.meta deleted file mode 100644 index 28402b89f..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSphere Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSquare Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSquare Icon.png deleted file mode 100644 index 6f60ed85a..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSquare Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSquare Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSquare Icon.png.meta deleted file mode 100644 index 767c55041..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiEmitterShapeSquare Icon.png.meta +++ /dev/null @@ -1,100 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiFluidRenderer Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiFluidRenderer Icon.png deleted file mode 100644 index 8bbace701..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiFluidRenderer Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiFluidRenderer Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiFluidRenderer Icon.png.meta deleted file mode 100644 index 5699caa0e..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiFluidRenderer Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png deleted file mode 100644 index 4a6c6a697..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png.meta deleted file mode 100644 index 9e9122967..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiFoamGenerator Icon.png.meta +++ /dev/null @@ -1,122 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiForceZone Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiForceZone Icon.png deleted file mode 100644 index f8ffcb82f..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiForceZone Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiForceZone Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiForceZone Icon.png.meta deleted file mode 100644 index 0790eb996..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiForceZone Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiMeshTopology Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiMeshTopology Icon.png deleted file mode 100644 index 7926bff21..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiMeshTopology Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiMeshTopology Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiMeshTopology Icon.png.meta deleted file mode 100644 index 95d97f436..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiMeshTopology Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiParticleHandle Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiParticleHandle Icon.png deleted file mode 100644 index e50bb19e5..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiParticleHandle Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiParticleHandle Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiParticleHandle Icon.png.meta deleted file mode 100644 index f6ce7de1f..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiParticleHandle Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiParticlePicker Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiParticlePicker Icon.png deleted file mode 100644 index 75f706cfd..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiParticlePicker Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiParticlePicker Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiParticlePicker Icon.png.meta deleted file mode 100644 index 0c23c24ff..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiParticlePicker Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiParticleRenderer Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiParticleRenderer Icon.png deleted file mode 100644 index b234cb105..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiParticleRenderer Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiParticleRenderer Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiParticleRenderer Icon.png.meta deleted file mode 100644 index 743e09c4f..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiParticleRenderer Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png deleted file mode 100644 index 939d32095..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png.meta deleted file mode 100644 index 61b9afb8d..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiPathSmoother Icon.png.meta +++ /dev/null @@ -1,122 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiPinConstraints Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiPinConstraints Icon.png deleted file mode 100644 index 81eb89c68..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiPinConstraints Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiPinConstraints Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiPinConstraints Icon.png.meta deleted file mode 100644 index 2861a1fb7..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiPinConstraints Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiPinhole Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiPinhole Icon.png deleted file mode 100644 index da8dbd83b..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiPinhole Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiPinhole Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiPinhole Icon.png.meta deleted file mode 100644 index 25f78f309..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiPinhole Icon.png.meta +++ /dev/null @@ -1,122 +0,0 @@ -fileFormatVersion: 2 -guid: 214df93f7c2ed4c1094bb6105c050575 -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/Assets/Obi/Editor/Resources/Icons/ObiPlant Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiPlant Icon.png deleted file mode 100644 index bfa508a59..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiPlant Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiPlant Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiPlant Icon.png.meta deleted file mode 100644 index 3522620ff..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiPlant Icon.png.meta +++ /dev/null @@ -1,117 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiProfiler Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiProfiler Icon.png deleted file mode 100644 index 9bc5433f5..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiProfiler Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiProfiler Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiProfiler Icon.png.meta deleted file mode 100644 index f4157015a..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiProfiler Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiRigidbody Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiRigidbody Icon.png deleted file mode 100644 index 174c50672..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiRigidbody Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiRigidbody Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiRigidbody Icon.png.meta deleted file mode 100644 index 8d93fea4b..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiRigidbody Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiRigidbody2D Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiRigidbody2D Icon.png deleted file mode 100644 index 58f8861d4..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiRigidbody2D Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiRigidbody2D Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiRigidbody2D Icon.png.meta deleted file mode 100644 index 6f40dad35..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiRigidbody2D Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiRod Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiRod Icon.png deleted file mode 100644 index b16bd502b..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiRod Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiRod Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiRod Icon.png.meta deleted file mode 100644 index edf46095c..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiRod Icon.png.meta +++ /dev/null @@ -1,95 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiRope Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiRope Icon.png deleted file mode 100644 index d8490871c..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiRope Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiRope Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiRope Icon.png.meta deleted file mode 100644 index a4b2cf13e..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiRope Icon.png.meta +++ /dev/null @@ -1,123 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiRopeChainRenderer Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiRopeChainRenderer Icon.png deleted file mode 100644 index ddd935d58..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiRopeChainRenderer Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiRopeChainRenderer Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiRopeChainRenderer Icon.png.meta deleted file mode 100644 index 976d10a0f..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiRopeChainRenderer Icon.png.meta +++ /dev/null @@ -1,95 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiRopeCursor Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiRopeCursor Icon.png deleted file mode 100644 index 58f15b5ec..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiRopeCursor Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiRopeCursor Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiRopeCursor Icon.png.meta deleted file mode 100644 index 90a6dca20..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiRopeCursor Icon.png.meta +++ /dev/null @@ -1,100 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiRopeExtrudedRenderer Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiRopeExtrudedRenderer Icon.png deleted file mode 100644 index 2c5b674eb..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiRopeExtrudedRenderer Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiRopeExtrudedRenderer Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiRopeExtrudedRenderer Icon.png.meta deleted file mode 100644 index 99f29747a..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiRopeExtrudedRenderer Icon.png.meta +++ /dev/null @@ -1,95 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiRopeLineRenderer Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiRopeLineRenderer Icon.png deleted file mode 100644 index 91daeff17..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiRopeLineRenderer Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiRopeLineRenderer Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiRopeLineRenderer Icon.png.meta deleted file mode 100644 index 1345c291f..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiRopeLineRenderer Icon.png.meta +++ /dev/null @@ -1,95 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiRopeMeshRenderer Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiRopeMeshRenderer Icon.png deleted file mode 100644 index 1e644b1b8..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiRopeMeshRenderer Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiRopeMeshRenderer Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiRopeMeshRenderer Icon.png.meta deleted file mode 100644 index 1cae38b78..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiRopeMeshRenderer Icon.png.meta +++ /dev/null @@ -1,95 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiRopeSection Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiRopeSection Icon.png deleted file mode 100644 index 60ff7fb41..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiRopeSection Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiRopeSection Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiRopeSection Icon.png.meta deleted file mode 100644 index 4f157733c..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiRopeSection Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiShapeMatchingConstraints Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiShapeMatchingConstraints Icon.png deleted file mode 100644 index 8960a702f..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiShapeMatchingConstraints Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiShapeMatchingConstraints Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiShapeMatchingConstraints Icon.png.meta deleted file mode 100644 index 51d75f592..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiShapeMatchingConstraints Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiSkinConstraints Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiSkinConstraints Icon.png deleted file mode 100644 index 20c05c30f..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiSkinConstraints Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiSkinConstraints Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiSkinConstraints Icon.png.meta deleted file mode 100644 index 70912d2df..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiSkinConstraints Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiSkinnedCloth Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiSkinnedCloth Icon.png deleted file mode 100644 index b5f4303fb..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiSkinnedCloth Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiSkinnedCloth Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiSkinnedCloth Icon.png.meta deleted file mode 100644 index fc0c584fb..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiSkinnedCloth Icon.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiSkinnedClothRenderer Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiSkinnedClothRenderer Icon.png deleted file mode 100644 index 65edf3629..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiSkinnedClothRenderer Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiSkinnedClothRenderer Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiSkinnedClothRenderer Icon.png.meta deleted file mode 100644 index deba6ac2d..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiSkinnedClothRenderer Icon.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiSoftbody Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiSoftbody Icon.png deleted file mode 100644 index c7cf83310..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiSoftbody Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiSoftbody Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiSoftbody Icon.png.meta deleted file mode 100644 index 776e7944e..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiSoftbody Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiSoftbodySkinner Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiSoftbodySkinner Icon.png deleted file mode 100644 index 2ff31e964..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiSoftbodySkinner Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiSoftbodySkinner Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiSoftbodySkinner Icon.png.meta deleted file mode 100644 index dd71bd93d..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiSoftbodySkinner Icon.png.meta +++ /dev/null @@ -1,117 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiSolver Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiSolver Icon.png deleted file mode 100644 index 8c681727a..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiSolver Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiSolver Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiSolver Icon.png.meta deleted file mode 100644 index 1a22f8ae9..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiSolver Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiStitcher Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiStitcher Icon.png deleted file mode 100644 index 60e88bde1..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiStitcher Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiStitcher Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiStitcher Icon.png.meta deleted file mode 100644 index 68420da77..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiStitcher Icon.png.meta +++ /dev/null @@ -1,100 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiStretchShearConstraints Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiStretchShearConstraints Icon.png deleted file mode 100644 index 5ddb1731d..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiStretchShearConstraints Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiStretchShearConstraints Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiStretchShearConstraints Icon.png.meta deleted file mode 100644 index 6b1bb22fd..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiStretchShearConstraints Icon.png.meta +++ /dev/null @@ -1,95 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiTearableCloth Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiTearableCloth Icon.png deleted file mode 100644 index 6e4149573..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiTearableCloth Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiTearableCloth Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiTearableCloth Icon.png.meta deleted file mode 100644 index 26dc03617..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiTearableCloth Icon.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiTearableClothRenderer Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiTearableClothRenderer Icon.png deleted file mode 100644 index 1c8b05a62..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiTearableClothRenderer Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiTearableClothRenderer Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiTearableClothRenderer Icon.png.meta deleted file mode 100644 index 8f16f5bba..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiTearableClothRenderer Icon.png.meta +++ /dev/null @@ -1,103 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiTetherConstraints Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiTetherConstraints Icon.png deleted file mode 100644 index 85007acf5..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiTetherConstraints Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiTetherConstraints Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiTetherConstraints Icon.png.meta deleted file mode 100644 index 689fd5a3c..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiTetherConstraints Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png deleted file mode 100644 index 595b09c88..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png.meta deleted file mode 100644 index 083fee0f9..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiVoidZone Icon.png.meta +++ /dev/null @@ -1,122 +0,0 @@ -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/Assets/Obi/Editor/Resources/Icons/ObiVolumeConstraints Icon.png b/Assets/Obi/Editor/Resources/Icons/ObiVolumeConstraints Icon.png deleted file mode 100644 index eefc8ae99..000000000 Binary files a/Assets/Obi/Editor/Resources/Icons/ObiVolumeConstraints Icon.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/Icons/ObiVolumeConstraints Icon.png.meta b/Assets/Obi/Editor/Resources/Icons/ObiVolumeConstraints Icon.png.meta deleted file mode 100644 index 3fbf880e7..000000000 --- a/Assets/Obi/Editor/Resources/Icons/ObiVolumeConstraints Icon.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Editor/Resources/InvertButton.psd b/Assets/Obi/Editor/Resources/InvertButton.psd deleted file mode 100644 index 599534295..000000000 Binary files a/Assets/Obi/Editor/Resources/InvertButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/InvertButton.psd.meta b/Assets/Obi/Editor/Resources/InvertButton.psd.meta deleted file mode 100644 index 766dfafc8..000000000 --- a/Assets/Obi/Editor/Resources/InvertButton.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/LeafButton.png b/Assets/Obi/Editor/Resources/LeafButton.png deleted file mode 100644 index c097c800b..000000000 Binary files a/Assets/Obi/Editor/Resources/LeafButton.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/LeafButton.png.meta b/Assets/Obi/Editor/Resources/LeafButton.png.meta deleted file mode 100644 index dafc45a7d..000000000 --- a/Assets/Obi/Editor/Resources/LeafButton.png.meta +++ /dev/null @@ -1,117 +0,0 @@ -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/Assets/Obi/Editor/Resources/MaskButton.psd b/Assets/Obi/Editor/Resources/MaskButton.psd deleted file mode 100644 index 5e3c792e8..000000000 Binary files a/Assets/Obi/Editor/Resources/MaskButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/MaskButton.psd.meta b/Assets/Obi/Editor/Resources/MaskButton.psd.meta deleted file mode 100644 index b2c8c9f9c..000000000 --- a/Assets/Obi/Editor/Resources/MaskButton.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/OpenCloseCurve.psd b/Assets/Obi/Editor/Resources/OpenCloseCurve.psd deleted file mode 100644 index b315d257d..000000000 Binary files a/Assets/Obi/Editor/Resources/OpenCloseCurve.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/OpenCloseCurve.psd.meta b/Assets/Obi/Editor/Resources/OpenCloseCurve.psd.meta deleted file mode 100644 index 3ca687cf1..000000000 --- a/Assets/Obi/Editor/Resources/OpenCloseCurve.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/OptimizeButton.psd b/Assets/Obi/Editor/Resources/OptimizeButton.psd deleted file mode 100644 index 095ff613b..000000000 Binary files a/Assets/Obi/Editor/Resources/OptimizeButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/OptimizeButton.psd.meta b/Assets/Obi/Editor/Resources/OptimizeButton.psd.meta deleted file mode 100644 index ebfc164b1..000000000 --- a/Assets/Obi/Editor/Resources/OptimizeButton.psd.meta +++ /dev/null @@ -1,127 +0,0 @@ -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/Assets/Obi/Editor/Resources/OrientControlPoint.psd b/Assets/Obi/Editor/Resources/OrientControlPoint.psd deleted file mode 100644 index 22d8bf736..000000000 Binary files a/Assets/Obi/Editor/Resources/OrientControlPoint.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/OrientControlPoint.psd.meta b/Assets/Obi/Editor/Resources/OrientControlPoint.psd.meta deleted file mode 100644 index 4717e3529..000000000 --- a/Assets/Obi/Editor/Resources/OrientControlPoint.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/PaddingMaterial.mat b/Assets/Obi/Editor/Resources/PaddingMaterial.mat deleted file mode 100644 index e078314ec..000000000 Binary files a/Assets/Obi/Editor/Resources/PaddingMaterial.mat and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/PaddingMaterial.mat.meta b/Assets/Obi/Editor/Resources/PaddingMaterial.mat.meta deleted file mode 100644 index b85cec38d..000000000 --- a/Assets/Obi/Editor/Resources/PaddingMaterial.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8c11f7c3415044fd9b6bc7896f38f9d8 -timeCreated: 1445287098 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/PaddingShader.shader b/Assets/Obi/Editor/Resources/PaddingShader.shader deleted file mode 100644 index afab7e2fc..000000000 --- a/Assets/Obi/Editor/Resources/PaddingShader.shader +++ /dev/null @@ -1,81 +0,0 @@ -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/Assets/Obi/Editor/Resources/PaddingShader.shader.meta b/Assets/Obi/Editor/Resources/PaddingShader.shader.meta deleted file mode 100644 index 88728fdec..000000000 --- a/Assets/Obi/Editor/Resources/PaddingShader.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: a915cd5b44e5b45509750bc8e231c325 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/PauseButton.psd b/Assets/Obi/Editor/Resources/PauseButton.psd deleted file mode 100644 index c22cc9cd7..000000000 Binary files a/Assets/Obi/Editor/Resources/PauseButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/PauseButton.psd.meta b/Assets/Obi/Editor/Resources/PauseButton.psd.meta deleted file mode 100644 index 6e24ea628..000000000 --- a/Assets/Obi/Editor/Resources/PauseButton.psd.meta +++ /dev/null @@ -1,57 +0,0 @@ -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/Assets/Obi/Editor/Resources/PencilButton.psd b/Assets/Obi/Editor/Resources/PencilButton.psd deleted file mode 100644 index b6705e585..000000000 Binary files a/Assets/Obi/Editor/Resources/PencilButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/PencilButton.psd.meta b/Assets/Obi/Editor/Resources/PencilButton.psd.meta deleted file mode 100644 index 8e30edb8d..000000000 --- a/Assets/Obi/Editor/Resources/PencilButton.psd.meta +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Editor/Resources/PinButton.psd b/Assets/Obi/Editor/Resources/PinButton.psd deleted file mode 100644 index 619b34e70..000000000 Binary files a/Assets/Obi/Editor/Resources/PinButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/PinButton.psd.meta b/Assets/Obi/Editor/Resources/PinButton.psd.meta deleted file mode 100644 index 0c59cff6a..000000000 --- a/Assets/Obi/Editor/Resources/PinButton.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/PinTranslation.psd b/Assets/Obi/Editor/Resources/PinTranslation.psd deleted file mode 100644 index 44495627a..000000000 Binary files a/Assets/Obi/Editor/Resources/PinTranslation.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/PinTranslation.psd.meta b/Assets/Obi/Editor/Resources/PinTranslation.psd.meta deleted file mode 100644 index db5c7f960..000000000 --- a/Assets/Obi/Editor/Resources/PinTranslation.psd.meta +++ /dev/null @@ -1,95 +0,0 @@ -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/Assets/Obi/Editor/Resources/PlayButton.psd b/Assets/Obi/Editor/Resources/PlayButton.psd deleted file mode 100644 index 296a318fa..000000000 Binary files a/Assets/Obi/Editor/Resources/PlayButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/PlayButton.psd.meta b/Assets/Obi/Editor/Resources/PlayButton.psd.meta deleted file mode 100644 index ca8974d23..000000000 --- a/Assets/Obi/Editor/Resources/PlayButton.psd.meta +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Editor/Resources/PropertyGradientMaterial.mat b/Assets/Obi/Editor/Resources/PropertyGradientMaterial.mat deleted file mode 100644 index 66a93a1cd..000000000 Binary files a/Assets/Obi/Editor/Resources/PropertyGradientMaterial.mat and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/PropertyGradientMaterial.mat.meta b/Assets/Obi/Editor/Resources/PropertyGradientMaterial.mat.meta deleted file mode 100644 index ee658f291..000000000 --- a/Assets/Obi/Editor/Resources/PropertyGradientMaterial.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: cd3a36913cf194d75a271606ea32cde5 -timeCreated: 1445287098 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/PropertyGradientMaterial.shader b/Assets/Obi/Editor/Resources/PropertyGradientMaterial.shader deleted file mode 100644 index 73c3cebd5..000000000 --- a/Assets/Obi/Editor/Resources/PropertyGradientMaterial.shader +++ /dev/null @@ -1,95 +0,0 @@ -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/Assets/Obi/Editor/Resources/PropertyGradientMaterial.shader.meta b/Assets/Obi/Editor/Resources/PropertyGradientMaterial.shader.meta deleted file mode 100644 index 2a3123aa1..000000000 --- a/Assets/Obi/Editor/Resources/PropertyGradientMaterial.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 41dfefbc390fc41cc8e1b421c43e52f5 -timeCreated: 1445287084 -licenseType: Store -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/RadiusIndicator.psd b/Assets/Obi/Editor/Resources/RadiusIndicator.psd deleted file mode 100644 index b51421581..000000000 Binary files a/Assets/Obi/Editor/Resources/RadiusIndicator.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/RadiusIndicator.psd.meta b/Assets/Obi/Editor/Resources/RadiusIndicator.psd.meta deleted file mode 100644 index 7f9e818b3..000000000 --- a/Assets/Obi/Editor/Resources/RadiusIndicator.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/RecButton.psd b/Assets/Obi/Editor/Resources/RecButton.psd deleted file mode 100644 index d9cefe3da..000000000 Binary files a/Assets/Obi/Editor/Resources/RecButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/RecButton.psd.meta b/Assets/Obi/Editor/Resources/RecButton.psd.meta deleted file mode 100644 index bbb80a953..000000000 --- a/Assets/Obi/Editor/Resources/RecButton.psd.meta +++ /dev/null @@ -1,57 +0,0 @@ -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/Assets/Obi/Editor/Resources/RemoveButton.psd b/Assets/Obi/Editor/Resources/RemoveButton.psd deleted file mode 100644 index d422e962a..000000000 Binary files a/Assets/Obi/Editor/Resources/RemoveButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/RemoveButton.psd.meta b/Assets/Obi/Editor/Resources/RemoveButton.psd.meta deleted file mode 100644 index d561f91f4..000000000 --- a/Assets/Obi/Editor/Resources/RemoveButton.psd.meta +++ /dev/null @@ -1,127 +0,0 @@ -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/Assets/Obi/Editor/Resources/RemoveControlPoint.psd b/Assets/Obi/Editor/Resources/RemoveControlPoint.psd deleted file mode 100644 index acf904406..000000000 Binary files a/Assets/Obi/Editor/Resources/RemoveControlPoint.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/RemoveControlPoint.psd.meta b/Assets/Obi/Editor/Resources/RemoveControlPoint.psd.meta deleted file mode 100644 index da5349a3c..000000000 --- a/Assets/Obi/Editor/Resources/RemoveControlPoint.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/RemoveIcon.psd b/Assets/Obi/Editor/Resources/RemoveIcon.psd deleted file mode 100644 index 48f6bb12c..000000000 Binary files a/Assets/Obi/Editor/Resources/RemoveIcon.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/RemoveIcon.psd.meta b/Assets/Obi/Editor/Resources/RemoveIcon.psd.meta deleted file mode 100644 index 069fee787..000000000 --- a/Assets/Obi/Editor/Resources/RemoveIcon.psd.meta +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Editor/Resources/RestoreButton.psd b/Assets/Obi/Editor/Resources/RestoreButton.psd deleted file mode 100644 index 32674d37b..000000000 Binary files a/Assets/Obi/Editor/Resources/RestoreButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/RestoreButton.psd.meta b/Assets/Obi/Editor/Resources/RestoreButton.psd.meta deleted file mode 100644 index 6086b8367..000000000 --- a/Assets/Obi/Editor/Resources/RestoreButton.psd.meta +++ /dev/null @@ -1,127 +0,0 @@ -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/Assets/Obi/Editor/Resources/RewindButton.psd b/Assets/Obi/Editor/Resources/RewindButton.psd deleted file mode 100644 index 73b9694e2..000000000 Binary files a/Assets/Obi/Editor/Resources/RewindButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/RewindButton.psd.meta b/Assets/Obi/Editor/Resources/RewindButton.psd.meta deleted file mode 100644 index 5664ebb14..000000000 --- a/Assets/Obi/Editor/Resources/RewindButton.psd.meta +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Editor/Resources/RotateControlPoint.psd b/Assets/Obi/Editor/Resources/RotateControlPoint.psd deleted file mode 100644 index d21b4f3f6..000000000 Binary files a/Assets/Obi/Editor/Resources/RotateControlPoint.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/RotateControlPoint.psd.meta b/Assets/Obi/Editor/Resources/RotateControlPoint.psd.meta deleted file mode 100644 index dc569cf07..000000000 --- a/Assets/Obi/Editor/Resources/RotateControlPoint.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/ScaleControlPoint.psd b/Assets/Obi/Editor/Resources/ScaleControlPoint.psd deleted file mode 100644 index cb52d7268..000000000 Binary files a/Assets/Obi/Editor/Resources/ScaleControlPoint.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/ScaleControlPoint.psd.meta b/Assets/Obi/Editor/Resources/ScaleControlPoint.psd.meta deleted file mode 100644 index 2f4c39cc3..000000000 --- a/Assets/Obi/Editor/Resources/ScaleControlPoint.psd.meta +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Editor/Resources/SelectIcon.psd b/Assets/Obi/Editor/Resources/SelectIcon.psd deleted file mode 100644 index 719afb5ce..000000000 Binary files a/Assets/Obi/Editor/Resources/SelectIcon.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/SelectIcon.psd.meta b/Assets/Obi/Editor/Resources/SelectIcon.psd.meta deleted file mode 100644 index 82a5cbeba..000000000 --- a/Assets/Obi/Editor/Resources/SelectIcon.psd.meta +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Editor/Resources/SelectedWorld_bck.psd b/Assets/Obi/Editor/Resources/SelectedWorld_bck.psd deleted file mode 100644 index 4d590d62b..000000000 Binary files a/Assets/Obi/Editor/Resources/SelectedWorld_bck.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/SelectedWorld_bck.psd.meta b/Assets/Obi/Editor/Resources/SelectedWorld_bck.psd.meta deleted file mode 100644 index 716381932..000000000 --- a/Assets/Obi/Editor/Resources/SelectedWorld_bck.psd.meta +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Editor/Resources/SeparatorLine.psd b/Assets/Obi/Editor/Resources/SeparatorLine.psd deleted file mode 100644 index b3234dc52..000000000 Binary files a/Assets/Obi/Editor/Resources/SeparatorLine.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/SeparatorLine.psd.meta b/Assets/Obi/Editor/Resources/SeparatorLine.psd.meta deleted file mode 100644 index e939ca9ff..000000000 --- a/Assets/Obi/Editor/Resources/SeparatorLine.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/ShowTangentHandles.psd b/Assets/Obi/Editor/Resources/ShowTangentHandles.psd deleted file mode 100644 index 80bc18574..000000000 Binary files a/Assets/Obi/Editor/Resources/ShowTangentHandles.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/ShowTangentHandles.psd.meta b/Assets/Obi/Editor/Resources/ShowTangentHandles.psd.meta deleted file mode 100644 index 91403965a..000000000 --- a/Assets/Obi/Editor/Resources/ShowTangentHandles.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/ShowThicknessHandles.psd b/Assets/Obi/Editor/Resources/ShowThicknessHandles.psd deleted file mode 100644 index 717c329e3..000000000 Binary files a/Assets/Obi/Editor/Resources/ShowThicknessHandles.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/ShowThicknessHandles.psd.meta b/Assets/Obi/Editor/Resources/ShowThicknessHandles.psd.meta deleted file mode 100644 index bb3842d3c..000000000 --- a/Assets/Obi/Editor/Resources/ShowThicknessHandles.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/SmoothButton.psd b/Assets/Obi/Editor/Resources/SmoothButton.psd deleted file mode 100644 index bce383f62..000000000 Binary files a/Assets/Obi/Editor/Resources/SmoothButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/SmoothButton.psd.meta b/Assets/Obi/Editor/Resources/SmoothButton.psd.meta deleted file mode 100644 index 66ef2bacd..000000000 --- a/Assets/Obi/Editor/Resources/SmoothButton.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/StepButton.psd b/Assets/Obi/Editor/Resources/StepButton.psd deleted file mode 100644 index 049bfe911..000000000 Binary files a/Assets/Obi/Editor/Resources/StepButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/StepButton.psd.meta b/Assets/Obi/Editor/Resources/StepButton.psd.meta deleted file mode 100644 index b6b08a1a4..000000000 --- a/Assets/Obi/Editor/Resources/StepButton.psd.meta +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Editor/Resources/StopButton.psd b/Assets/Obi/Editor/Resources/StopButton.psd deleted file mode 100644 index d601f8691..000000000 Binary files a/Assets/Obi/Editor/Resources/StopButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/StopButton.psd.meta b/Assets/Obi/Editor/Resources/StopButton.psd.meta deleted file mode 100644 index e07230971..000000000 --- a/Assets/Obi/Editor/Resources/StopButton.psd.meta +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Editor/Resources/StopRecButton.psd b/Assets/Obi/Editor/Resources/StopRecButton.psd deleted file mode 100644 index 2c3b63162..000000000 Binary files a/Assets/Obi/Editor/Resources/StopRecButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/StopRecButton.psd.meta b/Assets/Obi/Editor/Resources/StopRecButton.psd.meta deleted file mode 100644 index defe78474..000000000 --- a/Assets/Obi/Editor/Resources/StopRecButton.psd.meta +++ /dev/null @@ -1,57 +0,0 @@ -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/Assets/Obi/Editor/Resources/TextureIcon.psd b/Assets/Obi/Editor/Resources/TextureIcon.psd deleted file mode 100644 index e72917621..000000000 Binary files a/Assets/Obi/Editor/Resources/TextureIcon.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/TextureIcon.psd.meta b/Assets/Obi/Editor/Resources/TextureIcon.psd.meta deleted file mode 100644 index 0821ef678..000000000 --- a/Assets/Obi/Editor/Resources/TextureIcon.psd.meta +++ /dev/null @@ -1,98 +0,0 @@ -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/Assets/Obi/Editor/Resources/ToggleableGroupBg.psd b/Assets/Obi/Editor/Resources/ToggleableGroupBg.psd deleted file mode 100644 index 5a186ceba..000000000 Binary files a/Assets/Obi/Editor/Resources/ToggleableGroupBg.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/ToggleableGroupBg.psd.meta b/Assets/Obi/Editor/Resources/ToggleableGroupBg.psd.meta deleted file mode 100644 index caa2025b8..000000000 --- a/Assets/Obi/Editor/Resources/ToggleableGroupBg.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/TopologyBorders.shader b/Assets/Obi/Editor/Resources/TopologyBorders.shader deleted file mode 100644 index 923f6aa42..000000000 --- a/Assets/Obi/Editor/Resources/TopologyBorders.shader +++ /dev/null @@ -1,54 +0,0 @@ -// 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/Assets/Obi/Editor/Resources/TopologyBorders.shader.meta b/Assets/Obi/Editor/Resources/TopologyBorders.shader.meta deleted file mode 100644 index 584e28856..000000000 --- a/Assets/Obi/Editor/Resources/TopologyBorders.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 973221b91492243759c6f0871607f830 -timeCreated: 1459228603 -licenseType: Store -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/TopologyPreview.mat b/Assets/Obi/Editor/Resources/TopologyPreview.mat deleted file mode 100644 index f5e9d23fe..000000000 Binary files a/Assets/Obi/Editor/Resources/TopologyPreview.mat and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/TopologyPreview.mat.meta b/Assets/Obi/Editor/Resources/TopologyPreview.mat.meta deleted file mode 100644 index dfc815966..000000000 --- a/Assets/Obi/Editor/Resources/TopologyPreview.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 62dd1825e029c4d6291eb024124c520a -timeCreated: 1446008685 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/TopologyPreviewBorder.mat b/Assets/Obi/Editor/Resources/TopologyPreviewBorder.mat deleted file mode 100644 index bad83ce5b..000000000 Binary files a/Assets/Obi/Editor/Resources/TopologyPreviewBorder.mat and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/TopologyPreviewBorder.mat.meta b/Assets/Obi/Editor/Resources/TopologyPreviewBorder.mat.meta deleted file mode 100644 index 32b303a9f..000000000 --- a/Assets/Obi/Editor/Resources/TopologyPreviewBorder.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 83b0018e22cec4650b2f51e7b1cae99f -timeCreated: 1446016691 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/TranslateControlPoint.psd b/Assets/Obi/Editor/Resources/TranslateControlPoint.psd deleted file mode 100644 index 2c3ee0c71..000000000 Binary files a/Assets/Obi/Editor/Resources/TranslateControlPoint.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/TranslateControlPoint.psd.meta b/Assets/Obi/Editor/Resources/TranslateControlPoint.psd.meta deleted file mode 100644 index d0e97e746..000000000 --- a/Assets/Obi/Editor/Resources/TranslateControlPoint.psd.meta +++ /dev/null @@ -1,116 +0,0 @@ -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/Assets/Obi/Editor/Resources/TrunkButton.png b/Assets/Obi/Editor/Resources/TrunkButton.png deleted file mode 100644 index 6ed2d0f3e..000000000 Binary files a/Assets/Obi/Editor/Resources/TrunkButton.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/TrunkButton.png.meta b/Assets/Obi/Editor/Resources/TrunkButton.png.meta deleted file mode 100644 index abc62b327..000000000 --- a/Assets/Obi/Editor/Resources/TrunkButton.png.meta +++ /dev/null @@ -1,117 +0,0 @@ -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/Assets/Obi/Editor/Resources/UVSpaceColor.shader b/Assets/Obi/Editor/Resources/UVSpaceColor.shader deleted file mode 100644 index c8b2ac3eb..000000000 --- a/Assets/Obi/Editor/Resources/UVSpaceColor.shader +++ /dev/null @@ -1,47 +0,0 @@ -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/Assets/Obi/Editor/Resources/UVSpaceColor.shader.meta b/Assets/Obi/Editor/Resources/UVSpaceColor.shader.meta deleted file mode 100644 index 367df23aa..000000000 --- a/Assets/Obi/Editor/Resources/UVSpaceColor.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 459ae7c4c81724f20b6810647d2dbd3d -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/UVSpaceColorMaterial.mat b/Assets/Obi/Editor/Resources/UVSpaceColorMaterial.mat deleted file mode 100644 index eec815bb0..000000000 Binary files a/Assets/Obi/Editor/Resources/UVSpaceColorMaterial.mat and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/UVSpaceColorMaterial.mat.meta b/Assets/Obi/Editor/Resources/UVSpaceColorMaterial.mat.meta deleted file mode 100644 index 66a8487b8..000000000 --- a/Assets/Obi/Editor/Resources/UVSpaceColorMaterial.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8d64d32033a9145218d8c42c02e53b63 -timeCreated: 1445287098 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/UnpinButton.psd b/Assets/Obi/Editor/Resources/UnpinButton.psd deleted file mode 100644 index 46e280c5a..000000000 Binary files a/Assets/Obi/Editor/Resources/UnpinButton.psd and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/UnpinButton.psd.meta b/Assets/Obi/Editor/Resources/UnpinButton.psd.meta deleted file mode 100644 index a96c6e380..000000000 --- a/Assets/Obi/Editor/Resources/UnpinButton.psd.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/Resources/VoxelMaterial.mat b/Assets/Obi/Editor/Resources/VoxelMaterial.mat deleted file mode 100644 index ffcd4d30b..000000000 Binary files a/Assets/Obi/Editor/Resources/VoxelMaterial.mat and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/VoxelMaterial.mat.meta b/Assets/Obi/Editor/Resources/VoxelMaterial.mat.meta deleted file mode 100644 index 344e7c4d4..000000000 --- a/Assets/Obi/Editor/Resources/VoxelMaterial.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 130b71128e55b4a3f9a4dceca6667bf9 -timeCreated: 1445287098 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/VoxelMaterial.shader b/Assets/Obi/Editor/Resources/VoxelMaterial.shader deleted file mode 100644 index 55d1a82b4..000000000 --- a/Assets/Obi/Editor/Resources/VoxelMaterial.shader +++ /dev/null @@ -1,63 +0,0 @@ -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/Assets/Obi/Editor/Resources/VoxelMaterial.shader.meta b/Assets/Obi/Editor/Resources/VoxelMaterial.shader.meta deleted file mode 100644 index d5800a63c..000000000 --- a/Assets/Obi/Editor/Resources/VoxelMaterial.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: a5455d2f5ab50497d8642726d64b9cd5 -timeCreated: 1445287084 -licenseType: Store -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/Resources/obi_editor_logo.png b/Assets/Obi/Editor/Resources/obi_editor_logo.png deleted file mode 100644 index 51c3c88b6..000000000 Binary files a/Assets/Obi/Editor/Resources/obi_editor_logo.png and /dev/null differ diff --git a/Assets/Obi/Editor/Resources/obi_editor_logo.png.meta b/Assets/Obi/Editor/Resources/obi_editor_logo.png.meta deleted file mode 100644 index 464725b23..000000000 --- a/Assets/Obi/Editor/Resources/obi_editor_logo.png.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Editor/RopeAndRod.meta b/Assets/Obi/Editor/RopeAndRod.meta deleted file mode 100644 index 2f90f428d..000000000 --- a/Assets/Obi/Editor/RopeAndRod.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 00c9b99ffa90a4646b360dcad1ea0b84 -labels: -- ObiRope -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/Blueprints.meta b/Assets/Obi/Editor/RopeAndRod/Blueprints.meta deleted file mode 100644 index 2d99c2303..000000000 --- a/Assets/Obi/Editor/RopeAndRod/Blueprints.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 16f13a837c41b437a87aa83162abd677 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/Blueprints/ObiRopeBaseBlueprintEditor.cs b/Assets/Obi/Editor/RopeAndRod/Blueprints/ObiRopeBaseBlueprintEditor.cs deleted file mode 100644 index ff5c98e18..000000000 --- a/Assets/Obi/Editor/RopeAndRod/Blueprints/ObiRopeBaseBlueprintEditor.cs +++ /dev/null @@ -1,58 +0,0 @@ -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/Assets/Obi/Editor/RopeAndRod/Blueprints/ObiRopeBaseBlueprintEditor.cs.meta b/Assets/Obi/Editor/RopeAndRod/Blueprints/ObiRopeBaseBlueprintEditor.cs.meta deleted file mode 100644 index c5925c274..000000000 --- a/Assets/Obi/Editor/RopeAndRod/Blueprints/ObiRopeBaseBlueprintEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 87efff4816bdd4fa4bda69ca33516658 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/BonePropertyCurveDrawer.cs b/Assets/Obi/Editor/RopeAndRod/BonePropertyCurveDrawer.cs deleted file mode 100644 index 8d240cdec..000000000 --- a/Assets/Obi/Editor/RopeAndRod/BonePropertyCurveDrawer.cs +++ /dev/null @@ -1,29 +0,0 @@ -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/Assets/Obi/Editor/RopeAndRod/BonePropertyCurveDrawer.cs.meta b/Assets/Obi/Editor/RopeAndRod/BonePropertyCurveDrawer.cs.meta deleted file mode 100644 index 3fb84d07b..000000000 --- a/Assets/Obi/Editor/RopeAndRod/BonePropertyCurveDrawer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b78a1342294ee4644a9a0d6a247d3604 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/IgnoredBoneDrawer.cs b/Assets/Obi/Editor/RopeAndRod/IgnoredBoneDrawer.cs deleted file mode 100644 index 2ba8fccf2..000000000 --- a/Assets/Obi/Editor/RopeAndRod/IgnoredBoneDrawer.cs +++ /dev/null @@ -1,30 +0,0 @@ -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/Assets/Obi/Editor/RopeAndRod/IgnoredBoneDrawer.cs.meta b/Assets/Obi/Editor/RopeAndRod/IgnoredBoneDrawer.cs.meta deleted file mode 100644 index f1da00749..000000000 --- a/Assets/Obi/Editor/RopeAndRod/IgnoredBoneDrawer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f9e4bd0b2f9544e039fef4cd5d95232f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/ObiBoneEditor.cs b/Assets/Obi/Editor/RopeAndRod/ObiBoneEditor.cs deleted file mode 100644 index 0aedd61e2..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiBoneEditor.cs +++ /dev/null @@ -1,225 +0,0 @@ -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/Assets/Obi/Editor/RopeAndRod/ObiBoneEditor.cs.meta b/Assets/Obi/Editor/RopeAndRod/ObiBoneEditor.cs.meta deleted file mode 100644 index 2f33c8d3c..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiBoneEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1f25827f322514e1bb93fd309cd801bf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/ObiDraggableIcon.cs b/Assets/Obi/Editor/RopeAndRod/ObiDraggableIcon.cs deleted file mode 100644 index 1d41c3b92..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiDraggableIcon.cs +++ /dev/null @@ -1,73 +0,0 @@ -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/Assets/Obi/Editor/RopeAndRod/ObiDraggableIcon.cs.meta b/Assets/Obi/Editor/RopeAndRod/ObiDraggableIcon.cs.meta deleted file mode 100644 index d2449d026..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiDraggableIcon.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c736a38cd50af4bccbd08b83993abbdb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/ObiPathEditor.cs b/Assets/Obi/Editor/RopeAndRod/ObiPathEditor.cs deleted file mode 100644 index 7056a44e6..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiPathEditor.cs +++ /dev/null @@ -1,1241 +0,0 @@ -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/Assets/Obi/Editor/RopeAndRod/ObiPathEditor.cs.meta b/Assets/Obi/Editor/RopeAndRod/ObiPathEditor.cs.meta deleted file mode 100644 index 32c490bc1..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiPathEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0cb694bcadb6a4909b593111507e1eb3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/ObiPathHandles.cs b/Assets/Obi/Editor/RopeAndRod/ObiPathHandles.cs deleted file mode 100644 index 2a0bc1b67..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiPathHandles.cs +++ /dev/null @@ -1,271 +0,0 @@ -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/Assets/Obi/Editor/RopeAndRod/ObiPathHandles.cs.meta b/Assets/Obi/Editor/RopeAndRod/ObiPathHandles.cs.meta deleted file mode 100644 index 8df16e491..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiPathHandles.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f3c12ceb831344c47af02f0d6bf73de7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/ObiPathSmootherEditor.cs b/Assets/Obi/Editor/RopeAndRod/ObiPathSmootherEditor.cs deleted file mode 100644 index 068bc64ab..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiPathSmootherEditor.cs +++ /dev/null @@ -1,37 +0,0 @@ -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/Assets/Obi/Editor/RopeAndRod/ObiPathSmootherEditor.cs.meta b/Assets/Obi/Editor/RopeAndRod/ObiPathSmootherEditor.cs.meta deleted file mode 100644 index 4b3fca50d..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiPathSmootherEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a01b6dc95e7284e2583513863858d670 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/ObiRodEditor.cs b/Assets/Obi/Editor/RopeAndRod/ObiRodEditor.cs deleted file mode 100644 index cb807468f..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiRodEditor.cs +++ /dev/null @@ -1,220 +0,0 @@ -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 massScale; - - 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"); - massScale = serializedObject.FindProperty("m_MassScale"); - - 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(); - } - - EditorGUILayout.PropertyField(massScale, new GUIContent("m_MassScale")); - - 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/Assets/Obi/Editor/RopeAndRod/ObiRodEditor.cs.meta b/Assets/Obi/Editor/RopeAndRod/ObiRodEditor.cs.meta deleted file mode 100644 index 43404e2f0..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiRodEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d55c0f03ad50c414cacd39520aef2087 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/ObiRopeChainRendererEditor.cs b/Assets/Obi/Editor/RopeAndRod/ObiRopeChainRendererEditor.cs deleted file mode 100644 index 76570ef57..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiRopeChainRendererEditor.cs +++ /dev/null @@ -1,54 +0,0 @@ -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/Assets/Obi/Editor/RopeAndRod/ObiRopeChainRendererEditor.cs.meta b/Assets/Obi/Editor/RopeAndRod/ObiRopeChainRendererEditor.cs.meta deleted file mode 100644 index f99530421..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiRopeChainRendererEditor.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 0efaf4d397fcc4b87842866f9a69f07b -labels: -- ObiRope -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/ObiRopeCursorEditor.cs b/Assets/Obi/Editor/RopeAndRod/ObiRopeCursorEditor.cs deleted file mode 100644 index f902539de..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiRopeCursorEditor.cs +++ /dev/null @@ -1,99 +0,0 @@ -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.isLoaded) - { - Handles.matrix = rope.solver.transform.localToWorldMatrix; - Handles.color = new Color(1, 0.5f, 0.2f, 1); - - // draw source particle: - int sourceIndex = cursor.sourceParticleIndex; - - if (sourceIndex >= 0 && rope.IsParticleActive(rope.solver.particleToActor[sourceIndex].indexInActor)) - { - Vector3 pos = rope.solver.positions[sourceIndex]; - float size = HandleUtility.GetHandleSize(pos) * 0.15f; - Handles.SphereHandleCap(0, pos, Quaternion.identity, size, EventType.Repaint); - } - - // draw cursor: - var element = cursor.cursorElement; - - if (element != null && element.particle1 != element.particle2) - { - Vector3 pos = rope.solver.positions[cursor.direction ? element.particle1 : element.particle2]; - Vector3 pos2 = rope.solver.positions[cursor.direction ? element.particle2 : element.particle1]; - Vector3 direction = pos2 - pos; - - float size = HandleUtility.GetHandleSize(pos) * 0.25f; - Handles.ConeHandleCap(0, pos + Vector3.Normalize(direction)*size*0.5f, Quaternion.LookRotation(direction), size, EventType.Repaint); - } - } - } - } -} - diff --git a/Assets/Obi/Editor/RopeAndRod/ObiRopeCursorEditor.cs.meta b/Assets/Obi/Editor/RopeAndRod/ObiRopeCursorEditor.cs.meta deleted file mode 100644 index f740a0b2a..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiRopeCursorEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e3ec1bf77ba7a47b596abdc62069c72b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/ObiRopeEditor.cs b/Assets/Obi/Editor/RopeAndRod/ObiRopeEditor.cs deleted file mode 100644 index 9d18998bb..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiRopeEditor.cs +++ /dev/null @@ -1,219 +0,0 @@ -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 massScale; - - 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"); - massScale = serializedObject.FindProperty("m_MassScale"); - - 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(); - } - - GUI.enabled = !Application.isPlaying; - EditorGUILayout.PropertyField(massScale, new GUIContent("Mass scale")); - GUI.enabled = true; - - 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/Assets/Obi/Editor/RopeAndRod/ObiRopeEditor.cs.meta b/Assets/Obi/Editor/RopeAndRod/ObiRopeEditor.cs.meta deleted file mode 100644 index 78df88c8d..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiRopeEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b7e5f7e0daf504c86885734478e9c965 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/ObiRopeExtrudedRendererEditor.cs b/Assets/Obi/Editor/RopeAndRod/ObiRopeExtrudedRendererEditor.cs deleted file mode 100644 index 02a4983f0..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiRopeExtrudedRendererEditor.cs +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Editor/RopeAndRod/ObiRopeExtrudedRendererEditor.cs.meta b/Assets/Obi/Editor/RopeAndRod/ObiRopeExtrudedRendererEditor.cs.meta deleted file mode 100644 index 50deeab9a..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiRopeExtrudedRendererEditor.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 0d0e145ce66cd47e798bf4b926eddfc2 -labels: -- ObiRope -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/ObiRopeLineRendererEditor.cs b/Assets/Obi/Editor/RopeAndRod/ObiRopeLineRendererEditor.cs deleted file mode 100644 index 586d69b18..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiRopeLineRendererEditor.cs +++ /dev/null @@ -1,38 +0,0 @@ -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/Assets/Obi/Editor/RopeAndRod/ObiRopeLineRendererEditor.cs.meta b/Assets/Obi/Editor/RopeAndRod/ObiRopeLineRendererEditor.cs.meta deleted file mode 100644 index 5accc43c8..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiRopeLineRendererEditor.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: c0a72c38772bb454dabc7efc5b8f03be -labels: -- ObiRope -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/ObiRopeMeshRendererEditor.cs b/Assets/Obi/Editor/RopeAndRod/ObiRopeMeshRendererEditor.cs deleted file mode 100644 index 2d110592d..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiRopeMeshRendererEditor.cs +++ /dev/null @@ -1,52 +0,0 @@ -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/Assets/Obi/Editor/RopeAndRod/ObiRopeMeshRendererEditor.cs.meta b/Assets/Obi/Editor/RopeAndRod/ObiRopeMeshRendererEditor.cs.meta deleted file mode 100644 index 6a6c6a27a..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiRopeMeshRendererEditor.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 297abfc8979aa46329f3a7e914866adc -labels: -- ObiRope -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/ObiRopeSectionEditor.cs b/Assets/Obi/Editor/RopeAndRod/ObiRopeSectionEditor.cs deleted file mode 100644 index b5c6fe481..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiRopeSectionEditor.cs +++ /dev/null @@ -1,213 +0,0 @@ -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/Assets/Obi/Editor/RopeAndRod/ObiRopeSectionEditor.cs.meta b/Assets/Obi/Editor/RopeAndRod/ObiRopeSectionEditor.cs.meta deleted file mode 100644 index c12c5c628..000000000 --- a/Assets/Obi/Editor/RopeAndRod/ObiRopeSectionEditor.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 1539d8c58261942e28859228dfa310fb -labels: -- ObiRope -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/Utils.meta b/Assets/Obi/Editor/RopeAndRod/Utils.meta deleted file mode 100644 index 9115ebae6..000000000 --- a/Assets/Obi/Editor/RopeAndRod/Utils.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 72e3dd3ad91bf485099095b5e59ff81b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Editor/RopeAndRod/Utils/ObiPinholeEditor.cs b/Assets/Obi/Editor/RopeAndRod/Utils/ObiPinholeEditor.cs deleted file mode 100644 index f2380581a..000000000 --- a/Assets/Obi/Editor/RopeAndRod/Utils/ObiPinholeEditor.cs +++ /dev/null @@ -1,169 +0,0 @@ -using UnityEditor; -using UnityEditorInternal; -using UnityEngine; -using System.Collections.Generic; -using System.Linq; - - -namespace Obi -{ - - [CustomEditor(typeof(ObiPinhole))] - public class ObiPinholeEditor : Editor - { - - SerializedProperty targetTransform; - SerializedProperty position; - SerializedProperty limitRange; - SerializedProperty range; - SerializedProperty compliance; - SerializedProperty friction; - SerializedProperty motorSpeed; - SerializedProperty motorForce; - SerializedProperty clamp; - SerializedProperty breakThreshold; - - ObiPinhole pinhole; - - public void OnEnable() - { - - pinhole = target as ObiPinhole; - targetTransform = serializedObject.FindProperty("m_Target"); - position = serializedObject.FindProperty("m_Position"); - limitRange = serializedObject.FindProperty("m_LimitRange"); - range = serializedObject.FindProperty("m_Range"); - friction = serializedObject.FindProperty("m_Friction"); - motorSpeed = serializedObject.FindProperty("m_MotorSpeed"); - motorForce = serializedObject.FindProperty("m_MotorForce"); - compliance = serializedObject.FindProperty("m_Compliance"); - clamp = serializedObject.FindProperty("m_ClampAtEnds"); - breakThreshold = serializedObject.FindProperty("breakThreshold"); - } - - public override void OnInspectorGUI() - { - - serializedObject.UpdateIfRequiredOrScript(); - - // warn about incorrect setups: - if (!targetTransform.hasMultipleDifferentValues) - { - var targetValue = targetTransform.objectReferenceValue as UnityEngine.Component; - if (targetValue != null) - { - var collider = targetValue.GetComponent(); - if (collider == null) - { - EditorGUILayout.HelpBox("Pinholes require the target object to have a ObiCollider component. Please add one.", MessageType.Warning); - } - } - } - - EditorGUI.BeginChangeCheck(); - Transform trget = EditorGUILayout.ObjectField("Target", pinhole.target, typeof(Transform), true) as Transform; - if (EditorGUI.EndChangeCheck()) - { - Undo.RecordObject(pinhole, "Set target"); - pinhole.target = trget; - PrefabUtility.RecordPrefabInstancePropertyModifications(pinhole); - } - - EditorGUI.BeginChangeCheck(); - EditorGUILayout.PropertyField(position, new GUIContent("Position")); - if (EditorGUI.EndChangeCheck()) - { - serializedObject.ApplyModifiedProperties(); - pinhole.CalculateMu(); - } - - EditorGUI.BeginChangeCheck(); - EditorGUILayout.PropertyField(limitRange, new GUIContent("Limit Range")); - if (EditorGUI.EndChangeCheck()) - { - serializedObject.ApplyModifiedProperties(); - pinhole.CalculateRange(); - } - - if (limitRange.boolValue) - { - EditorGUI.indentLevel++; - EditorGUI.BeginChangeCheck(); - EditorGUILayout.PropertyField(range, new GUIContent("Range")); - if (EditorGUI.EndChangeCheck()) - { - serializedObject.ApplyModifiedProperties(); - pinhole.CalculateRange(); - } - EditorGUI.indentLevel--; - } - EditorGUILayout.PropertyField(clamp, new GUIContent("Clamp at ends")); - EditorGUILayout.PropertyField(friction, new GUIContent("Friction")); - EditorGUILayout.PropertyField(motorSpeed, new GUIContent("Motor Target Speed")); - EditorGUILayout.PropertyField(motorForce, new GUIContent("Motor Max Force")); - EditorGUILayout.PropertyField(compliance, new GUIContent("Compliance")); - EditorGUILayout.PropertyField(breakThreshold, new GUIContent("Break threshold")); - - if (GUI.changed) - serializedObject.ApplyModifiedProperties(); - - } - - [DrawGizmo(GizmoType.Selected)] - private static void DrawGizmos(ObiPinhole pinhole, GizmoType gizmoType) - { - var rope = pinhole.GetComponent(); - - var ropeBlueprint = rope.sharedBlueprint as ObiRopeBlueprintBase; - if (rope.isLoaded && ropeBlueprint != null && ropeBlueprint.deformableEdges != null) - { - Handles.color = new Color(1, 0.5f, 0.2f, 1); - Handles.matrix = rope.solver.transform.localToWorldMatrix; - - // draw limits: - if (pinhole.limitRange) - { - for (int i = pinhole.firstEdge.edgeIndex; i <= pinhole.lastEdge.edgeIndex; ++i) - { - if (i >= 0 && i < ropeBlueprint.deformableEdges.Length) - { - int p1 = ropeBlueprint.deformableEdges[i * 2]; - int p2 = ropeBlueprint.deformableEdges[i * 2 + 1]; - var pos1 = rope.solver.positions[rope.solverIndices[p1]]; - var pos2 = rope.solver.positions[rope.solverIndices[p2]]; - - if (i == pinhole.firstEdge.edgeIndex) - { - pos1 = Vector4.Lerp(pos1, pos2, pinhole.firstEdge.coordinate); - Handles.DrawSolidDisc(pos1, pos2 - pos1, HandleUtility.GetHandleSize(pos1) * 0.05f); - } - if (i == pinhole.lastEdge.edgeIndex) - { - pos2 = Vector4.Lerp(pos1, pos2, pinhole.lastEdge.coordinate); - Handles.DrawSolidDisc(pos2, pos1 - pos2, HandleUtility.GetHandleSize(pos2) * 0.05f); - } - - Handles.DrawLine(pos1, pos2, 2); - } - } - } - - // draw source particle: - int edgeIndex = pinhole.edgeIndex; - - if (edgeIndex >= 0 && edgeIndex < ropeBlueprint.deformableEdges.Length) - { - int p1 = ropeBlueprint.deformableEdges[edgeIndex * 2]; - int p2 = ropeBlueprint.deformableEdges[edgeIndex * 2 + 1]; - var pos1 = rope.solver.positions[rope.solverIndices[p1]]; - var pos2 = rope.solver.positions[rope.solverIndices[p2]]; - Vector4 pos = Vector4.Lerp(pos1, pos2, pinhole.edgeCoordinate); - Handles.DrawWireDisc(pos, pos1 - pos2, HandleUtility.GetHandleSize(pos) * 0.1f, 2); - } - } - } - } - -} - - diff --git a/Assets/Obi/Editor/RopeAndRod/Utils/ObiPinholeEditor.cs.meta b/Assets/Obi/Editor/RopeAndRod/Utils/ObiPinholeEditor.cs.meta deleted file mode 100644 index 97fc35243..000000000 --- a/Assets/Obi/Editor/RopeAndRod/Utils/ObiPinholeEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f58defb5faddb428ea91cd06eecd8729 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/QuickstartGuide_rope.pdf b/Assets/Obi/QuickstartGuide_rope.pdf deleted file mode 100644 index d2071e966..000000000 Binary files a/Assets/Obi/QuickstartGuide_rope.pdf and /dev/null differ diff --git a/Assets/Obi/QuickstartGuide_rope.pdf.meta b/Assets/Obi/QuickstartGuide_rope.pdf.meta deleted file mode 100644 index 0218f7a96..000000000 --- a/Assets/Obi/QuickstartGuide_rope.pdf.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: dd3977598aee74c5eaa2111f3d999165 -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/README.rtf b/Assets/Obi/README.rtf deleted file mode 100644 index d6d71741c..000000000 --- a/Assets/Obi/README.rtf +++ /dev/null @@ -1,38 +0,0 @@ -{\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/Assets/Obi/README.rtf.meta b/Assets/Obi/README.rtf.meta deleted file mode 100644 index de9ed91b3..000000000 --- a/Assets/Obi/README.rtf.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 133c58a050c6b404cb14cc72f0a1676c -timeCreated: 1443155832 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources.meta b/Assets/Obi/Resources.meta deleted file mode 100644 index 0cc732a65..000000000 --- a/Assets/Obi/Resources.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 6217e7f6fe8104bbca06fe7ac150a57d -folderAsset: yes -timeCreated: 1435572248 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute.meta b/Assets/Obi/Resources/Compute.meta deleted file mode 100644 index 054ac1346..000000000 --- a/Assets/Obi/Resources/Compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 55c2294f77a2c4783b788be18cc01798 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/AerodynamicConstraints.compute b/Assets/Obi/Resources/Compute/AerodynamicConstraints.compute deleted file mode 100644 index d51c3c4b9..000000000 --- a/Assets/Obi/Resources/Compute/AerodynamicConstraints.compute +++ /dev/null @@ -1,61 +0,0 @@ -#pragma kernel Project - -#include "MathUtils.cginc" -#include "AtomicDeltas.cginc" - -StructuredBuffer particleIndices; -StructuredBuffer aerodynamicCoeffs; - -StructuredBuffer positions; -StructuredBuffer normals; -StructuredBuffer wind; -StructuredBuffer invMasses; - -RWStructuredBuffer velocities; - -// Variables set from the CPU -uint activeConstraintCount; -float deltaTime; - -[numthreads(128, 1, 1)] -void Project (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int p = particleIndices[i]; - - float area = aerodynamicCoeffs[i * 3]; - float dragCoeff = aerodynamicCoeffs[i * 3 + 1]; - float liftCoeff = aerodynamicCoeffs[i * 3 + 2]; - - if (invMasses[p] > 0) - { - float4 relVelocity = velocities[p] - wind[p]; - float rvSqrMag = dot(relVelocity, relVelocity); - - if (rvSqrMag < EPSILON) - return; - - float4 rvNorm = relVelocity / sqrt(rvSqrMag); - - // calculate surface normal (always facing wind) - float4 surfNormal = asfloat(normals[p]) * sign(dot(asfloat(normals[p]), rvNorm)); - - // aerodynamic_factor was originally multiplied by air_density. The density is now premultiplied in lift and drag. - float aerodynamicFactor = 0.5f * rvSqrMag * area; - float attackAngle = dot(surfNormal,rvNorm); - - float3 liftDirection = normalizesafe(cross(cross(surfNormal.xyz, rvNorm.xyz), rvNorm.xyz)); - - //drag: - velocities[p] += (-dragCoeff * rvNorm + - - // lift: - liftCoeff * float4(liftDirection.xyz,0)) * - - // scale - attackAngle * min(aerodynamicFactor * invMasses[p] * deltaTime, 1000); - } -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/AerodynamicConstraints.compute.meta b/Assets/Obi/Resources/Compute/AerodynamicConstraints.compute.meta deleted file mode 100644 index 229e5ddcf..000000000 --- a/Assets/Obi/Resources/Compute/AerodynamicConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a819ec002d4434b5da29879a26e3211a -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/AtomicDeltas.cginc b/Assets/Obi/Resources/Compute/AtomicDeltas.cginc deleted file mode 100644 index 8f8eaa66d..000000000 --- a/Assets/Obi/Resources/Compute/AtomicDeltas.cginc +++ /dev/null @@ -1,90 +0,0 @@ -#ifndef ATOMICDELTAS_INCLUDE -#define ATOMICDELTAS_INCLUDE - -#include "InterlockedUtils.cginc" - -RWStructuredBuffer deltasAsInt; -RWStructuredBuffer positionConstraintCounts; - -RWStructuredBuffer orientationDeltasAsInt; -RWStructuredBuffer orientationConstraintCounts; - -// atomic delta add: -void AtomicAddPositionDelta(in int index, in float4 delta) -{ - InterlockedAddFloat(deltasAsInt, index, 0, delta.x); - InterlockedAddFloat(deltasAsInt, index, 1, delta.y); - InterlockedAddFloat(deltasAsInt, index, 2, delta.z); - InterlockedAdd(positionConstraintCounts[index], 1); -} - -void AtomicAddOrientationDelta(in int index, in quaternion delta) -{ - InterlockedAddFloat(orientationDeltasAsInt, index, 0, delta.x); - InterlockedAddFloat(orientationDeltasAsInt, index, 1, delta.y); - InterlockedAddFloat(orientationDeltasAsInt, index, 2, delta.z); - InterlockedAddFloat(orientationDeltasAsInt, index, 3, delta.w); - InterlockedAdd(orientationConstraintCounts[index], 1); -} - -// non-atomic versions: -void AddPositionDelta(in int index, in float4 delta) -{ - deltasAsInt[index] = asuint(delta + asfloat(deltasAsInt[index])); - positionConstraintCounts[index]++; -} - -void AddOrientationDelta(in int index, in quaternion delta) -{ - orientationDeltasAsInt[index] = asuint(delta + asfloat(orientationDeltasAsInt[index])); - orientationConstraintCounts[index]++; -} - -// applying deltas: -void ApplyPositionDelta(RWStructuredBuffer positions, in int index, in float SOR) -{ - int count = positionConstraintCounts[index]; - if (count > 0) - { - positions[index].xyz += float3(asfloat(deltasAsInt[index].x), - asfloat(deltasAsInt[index].y), - asfloat(deltasAsInt[index].z)) * SOR / count; - - deltasAsInt[index] = uint4(0, 0, 0, 0); - positionConstraintCounts[index] = 0; - } -} - -void ApplyOrientationDelta(RWStructuredBuffer orientations, in int index, in float SOR) -{ - int count = orientationConstraintCounts[index]; - if (count > 0) - { - orientations[index] += quaternion(asfloat(orientationDeltasAsInt[index].x), - asfloat(orientationDeltasAsInt[index].y), - asfloat(orientationDeltasAsInt[index].z), - asfloat(orientationDeltasAsInt[index].w)) * SOR / count; - - orientations[index] = normalize(orientations[index]); - - orientationDeltasAsInt[index] = uint4(0, 0, 0, 0); - orientationConstraintCounts[index] = 0; - } -} - -void ApplyUserDataDelta(RWStructuredBuffer userData, in int index) -{ - int count = orientationConstraintCounts[index]; - if (count > 0) - { - userData[index] += float4(asfloat(orientationDeltasAsInt[index].x), - asfloat(orientationDeltasAsInt[index].y), - asfloat(orientationDeltasAsInt[index].z), - asfloat(orientationDeltasAsInt[index].w)); - - orientationDeltasAsInt[index] = uint4(0, 0, 0, 0); - orientationConstraintCounts[index] = 0; - } -} - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/AtomicDeltas.cginc.meta b/Assets/Obi/Resources/Compute/AtomicDeltas.cginc.meta deleted file mode 100644 index 8f9c197c2..000000000 --- a/Assets/Obi/Resources/Compute/AtomicDeltas.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 1a767b30eef4240859cf6158473bd06a -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/BendConstraints.compute b/Assets/Obi/Resources/Compute/BendConstraints.compute deleted file mode 100644 index 5652e39c2..000000000 --- a/Assets/Obi/Resources/Compute/BendConstraints.compute +++ /dev/null @@ -1,83 +0,0 @@ -#pragma kernel Project -#pragma kernel Apply - -#include "MathUtils.cginc" -#include "AtomicDeltas.cginc" - -StructuredBuffer particleIndices; -StructuredBuffer restBends; -StructuredBuffer stiffnesses; -RWStructuredBuffer lambdas; - -RWStructuredBuffer positions; -StructuredBuffer invMasses; - -// Variables set from the CPU -uint activeConstraintCount; -float deltaTime; -float sorFactor; - -[numthreads(128, 1, 1)] -void Project (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int p1 = particleIndices[i * 3]; - int p2 = particleIndices[i * 3 + 1]; - int p3 = particleIndices[i * 3 + 2]; - - float w1 = invMasses[p1]; - float w2 = invMasses[p2]; - float w3 = invMasses[p3]; - - float wsum = w1 + w2 + 2 * w3; - if (wsum > 0) - { - float4 bendVector = positions[p3] - (positions[p1] + positions[p2] + positions[p3]) / 3.0f; - float bend = length(bendVector); - - if (bend > 0) - { - float constraint = 1.0f - (stiffnesses[i].x + restBends[i]) / bend; - - // remove this to force a certain curvature. - if (constraint >= 0) - { - // calculate time adjusted compliance - float compliance = stiffnesses[i].y / (deltaTime * deltaTime); - - // since the third particle moves twice the amount of the other 2, the modulus of its gradient is 2: - float dlambda = (-constraint - compliance * lambdas[i]) / (wsum + compliance + EPSILON); - float4 correction = dlambda * bendVector; - - lambdas[i] += dlambda; - - float4 delta1 = -correction * 2 * w1; - float4 delta2 = -correction * 2 * w2; - float4 delta3 = correction * 4 * w3; - - AddPositionDelta(p1, delta1); - AddPositionDelta(p2, delta2); - AddPositionDelta(p3, delta3); - } - } - } -} - -[numthreads(128, 1, 1)] -void Apply (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int p1 = particleIndices[i * 3]; - int p2 = particleIndices[i * 3 + 1]; - int p3 = particleIndices[i * 3 + 2]; - - ApplyPositionDelta(positions, p1, sorFactor); - ApplyPositionDelta(positions, p2, sorFactor); - ApplyPositionDelta(positions, p3, sorFactor); -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/BendConstraints.compute.meta b/Assets/Obi/Resources/Compute/BendConstraints.compute.meta deleted file mode 100644 index c253612ba..000000000 --- a/Assets/Obi/Resources/Compute/BendConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 92b982b3ba8824f1cb17f9313e0b11ac -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/BendTwistConstraints.compute b/Assets/Obi/Resources/Compute/BendTwistConstraints.compute deleted file mode 100644 index a35375778..000000000 --- a/Assets/Obi/Resources/Compute/BendTwistConstraints.compute +++ /dev/null @@ -1,78 +0,0 @@ -#pragma kernel Project -#pragma kernel Apply - -#include "MathUtils.cginc" -#include "AtomicDeltas.cginc" - -StructuredBuffer orientationIndices; -StructuredBuffer stiffnesses; -StructuredBuffer plasticity; -RWStructuredBuffer restDarboux; -RWStructuredBuffer lambdas; - -RWStructuredBuffer orientations; -StructuredBuffer invRotationalMasses; - -// Variables set from the CPU -uint activeConstraintCount; -float deltaTime; -float sorFactor; - -[numthreads(128, 1, 1)] -void Project (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int q1 = orientationIndices[i * 2]; - int q2 = orientationIndices[i * 2 + 1]; - - float w1 = invRotationalMasses[q1]; - float w2 = invRotationalMasses[q2]; - - // calculate time adjusted compliance - float3 compliances = stiffnesses[i] / (deltaTime * deltaTime); - - // rest and current darboux vectors - quaternion rest = restDarboux[i]; - quaternion omega = qmul(q_conj(orientations[q1]), orientations[q2]); - - quaternion omega_plus; - omega_plus = omega + rest; //delta Omega with - omega_0 - omega -= rest; //delta Omega with + omega_0 - - if (dot(omega,omega) > dot(omega_plus,omega_plus)) - omega = omega_plus; - - // plasticity - if (dot(omega.xyz, omega.xyz) > plasticity[i].x * plasticity[i].x) - { - rest += omega * plasticity[i].y * deltaTime; - restDarboux[i] = rest; - } - - float3 dlambda = (omega.xyz - compliances * lambdas[i]) / (compliances + w1 + w2 + EPSILON); - - //discrete Darboux vector does not have vanishing scalar part - quaternion dlambdaQ = quaternion(dlambda[0], dlambda[1], dlambda[2],0); - - AddOrientationDelta(q1, qmul(orientations[q2], dlambdaQ) * w1); - AddOrientationDelta(q2,-qmul(orientations[q1], dlambdaQ) * w2); - - lambdas[i] += dlambda; -} - -[numthreads(128, 1, 1)] -void Apply (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int q1 = orientationIndices[i * 2]; - int q2 = orientationIndices[i * 2 + 1]; - - ApplyOrientationDelta(orientations, q1, sorFactor); - ApplyOrientationDelta(orientations, q2, sorFactor); -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/BendTwistConstraints.compute.meta b/Assets/Obi/Resources/Compute/BendTwistConstraints.compute.meta deleted file mode 100644 index ab675e5e9..000000000 --- a/Assets/Obi/Resources/Compute/BendTwistConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e5ad8a2b8563941539b7551b0a93b911 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/BitonicSort.compute b/Assets/Obi/Resources/Compute/BitonicSort.compute deleted file mode 100644 index 1929395f7..000000000 --- a/Assets/Obi/Resources/Compute/BitonicSort.compute +++ /dev/null @@ -1,39 +0,0 @@ -#pragma kernel BitonicSort - -const uint numEntries; -const uint groupWidth; -const uint groupHeight; -const uint stepIndex; - -RWStructuredBuffer Keys; -RWStructuredBuffer Values; - -[numthreads(128,1,1)] -void BitonicSort(uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - - uint hIndex = i & (groupWidth - 1); - uint indexLeft = hIndex + (groupHeight + 1) * (i / groupWidth); - uint rightStepSize = stepIndex == 0 ? groupHeight - 2 * hIndex : (groupHeight + 1) / 2; - uint indexRight = indexLeft + rightStepSize; - - // Exit if out of bounds (for non-power of 2 input sizes) - if (indexRight >= numEntries) return; - - float keyLeft = Keys[indexLeft]; - float keyRight = Keys[indexRight]; - - float valueLeft = Values[indexLeft]; - float valueRight = Values[indexRight]; - - // Swap entries if value is descending - if (valueLeft > valueRight) - { - Keys[indexLeft] = keyRight; - Keys[indexRight] = keyLeft; - - Values[indexLeft] = valueRight; - Values[indexRight] = valueLeft; - } -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/BitonicSort.compute.meta b/Assets/Obi/Resources/Compute/BitonicSort.compute.meta deleted file mode 100644 index 16cb0e090..000000000 --- a/Assets/Obi/Resources/Compute/BitonicSort.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ceefe1197724d4a408783ad72b2c56ab -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/Bounds.cginc b/Assets/Obi/Resources/Compute/Bounds.cginc deleted file mode 100644 index 2549b5187..000000000 --- a/Assets/Obi/Resources/Compute/Bounds.cginc +++ /dev/null @@ -1,127 +0,0 @@ -#ifndef BOUNDS_INCLUDE -#define BOUNDS_INCLUDE - -#include "Transform.cginc" -#include "Matrix.cginc" - -struct aabb -{ - float4 min_; - float4 max_; - - void FromTriangle(float4 v1, float4 v2, float4 v3, float4 margin) - { - min_ = min(min(v1, v2), v3) - margin; - max_ = max(max(v1, v2), v3) + margin; - } - - void FromEdge(float4 v1, float4 v2, float4 radius) - { - min_ = min(v2 - radius, v1 - radius); - max_ = max(v2 + radius, v1 + radius); - } - - void FromParticle(float4 v1, float radius) - { - min_ = v1 - radius; - max_ = v1 + radius; - } - - bool IntersectsAabb(in aabb b, bool in2D = false) - { - if (in2D) - { - return (min_[0] <= b.max_[0] && max_[0] >= b.min_[0]) && - (min_[1] <= b.max_[1] && max_[1] >= b.min_[1]); - } - else - { - return (min_[0] <= b.max_[0] && max_[0] >= b.min_[0]) && - (min_[1] <= b.max_[1] && max_[1] >= b.min_[1]) && - (min_[2] <= b.max_[2] && max_[2] >= b.min_[2]); - } - } - - float AverageAxisLength() - { - float4 d = max_ - min_; - return (d.x + d.y + d.z) * 0.33f; - } - - float MaxAxisLength() - { - float4 d = max_ - min_; - return max(max(d.x,d.y),d.z); - } - - void EncapsulateParticle(in float4 position, float radius) - { - min_ = min(min(min_, position - radius), position - radius); - max_ = max(max(max_, position + radius), position + radius); - } - - void EncapsulateParticle(in float4 previousPosition, in float4 position, float radius) - { - min_ = min(min(min_, position - radius), previousPosition - radius); - max_ = max(max(max_, position + radius), previousPosition + radius); - } - - void EncapsulateBounds(in aabb bounds) - { - min_ = min(min_,bounds.min_); - max_ = max(max_,bounds.max_); - } - - void Expand(float4 amount) - { - min_ -= amount; - max_ += amount; - } - - void Sweep(float4 velocity) - { - min_ = min(min_, min_ + velocity); - max_ = max(max_, max_ + velocity); - } - - float4 Center() - { - return (min_ + (max_ - min_) * 0.5f); - } - - void Transform(in float4x4 transform) - { - float3 xa = transform._m00_m10_m20 * min_.x; - float3 xb = transform._m00_m10_m20 * max_.x; - - float3 ya = transform._m01_m11_m21 * min_.y; - float3 yb = transform._m01_m11_m21 * max_.y; - - float3 za = transform._m02_m12_m22 * min_.z; - float3 zb = transform._m02_m12_m22 * max_.z; - - min_ = float4(min(xa, xb) + min(ya, yb) + min(za, zb) + transform._m03_m13_m23, 0); - max_ = float4(max(xa, xb) + max(ya, yb) + max(za, zb) + transform._m03_m13_m23, 0); - } - - void Transform(in transform transform) - { - Transform(TRS(transform.translation.xyz, transform.rotation, transform.scale.xyz)); - } - - aabb Transformed(in float4x4 trfm) - { - aabb cpy = this; - cpy.Transform(trfm); - return cpy; - } - - aabb Transformed(in transform trfm) - { - aabb cpy = this; - cpy.Transform(trfm); - return cpy; - } -}; - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/Bounds.cginc.meta b/Assets/Obi/Resources/Compute/Bounds.cginc.meta deleted file mode 100644 index f3c0a8e7c..000000000 --- a/Assets/Obi/Resources/Compute/Bounds.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 52c09ed0a553243328693072f77d1465 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/BoundsReduction.compute b/Assets/Obi/Resources/Compute/BoundsReduction.compute deleted file mode 100644 index 7e11f4537..000000000 --- a/Assets/Obi/Resources/Compute/BoundsReduction.compute +++ /dev/null @@ -1,94 +0,0 @@ -#pragma kernel RuntimeSimplexBounds SIMPLEX_BOUNDS=RuntimeSimplexBounds USE_COLLISION_MAT -#pragma kernel EditSimplexBounds SIMPLEX_BOUNDS=EditSimplexBounds -#pragma kernel Reduce - -#include "Simplex.cginc" -#include "Bounds.cginc" -#include "CollisionMaterial.cginc" -#include "MathUtils.cginc" -#include "Integration.cginc" -#include "SolverParameters.cginc" - -StructuredBuffer simplices; -StructuredBuffer positions; -StructuredBuffer velocities; -StructuredBuffer principalRadii; -StructuredBuffer fluidMaterials; - -RWStructuredBuffer simplexBounds; -RWStructuredBuffer reducedBounds; - -float deltaTime; - -groupshared aabb sdata[128]; - -[numthreads(256, 1, 1)] -void SIMPLEX_BOUNDS (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= pointCount + edgeCount + triangleCount) - { - reducedBounds[i].min_ = float4(FLT_MAX,FLT_MAX,FLT_MAX,0); - reducedBounds[i].max_ = -float4(FLT_MAX,FLT_MAX,FLT_MAX,0); - return; - } - - int simplexSize; - int simplexStart = GetSimplexStartAndSize(i, simplexSize); - - aabb sxBounds, soBounds; - sxBounds.min_ = soBounds.min_ = float4(FLT_MAX,FLT_MAX,FLT_MAX,0); - sxBounds.max_ = soBounds.max_ = float4(-FLT_MAX,-FLT_MAX,-FLT_MAX,0); - - for (int j = 0; j < simplexSize; ++j) - { - int p = simplices[simplexStart + j]; - - #if USE_COLLISION_MAT - int m = collisionMaterialIndices[p]; - float solidRadius = principalRadii[p].x + (m >= 0 ? collisionMaterials[m].stickDistance : 0); - #else - float solidRadius = principalRadii[p].x; - #endif - - // Expand simplex bounds, using both the particle's original position and its velocity. - // Add collision margin for both fluid neighborhood too (prevents explosions at high pressures due to neighborhood deficiency) - sxBounds.EncapsulateParticle(positions[p], - IntegrateLinear(positions[p], velocities[p], deltaTime * particleCCD), - max(solidRadius, fluidMaterials[p].x * 0.5f) + collisionMargin); - - soBounds.EncapsulateParticle(positions[p], - IntegrateLinear(positions[p], velocities[p], deltaTime), - solidRadius); - - } - - simplexBounds[i] = sxBounds; - reducedBounds[i] = soBounds; -} - -[numthreads( 256, 1, 1)] -void Reduce( uint3 threadIdx : SV_GroupThreadID, uint3 groupIdx : SV_GroupID) -{ - // each thread loads two elements from global to shared mem and combines them: - unsigned int tid = threadIdx.x; - unsigned int i = groupIdx.x * 256 + tid; - sdata[tid] = reducedBounds[i]; - sdata[tid].EncapsulateBounds(reducedBounds[i + 128]); - - GroupMemoryBarrierWithGroupSync(); - - // do reduction in shared mem - for (unsigned int s = 64; s > 0; s >>= 1) - { - if (tid < s) - { - sdata[tid].EncapsulateBounds(sdata[tid + s]); - } - GroupMemoryBarrierWithGroupSync(); - } - - // write result for this group to global mem - if (tid == 0) - reducedBounds[groupIdx.x] = sdata[0]; -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/BoundsReduction.compute.meta b/Assets/Obi/Resources/Compute/BoundsReduction.compute.meta deleted file mode 100644 index 5959ca43b..000000000 --- a/Assets/Obi/Resources/Compute/BoundsReduction.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4eaa80a9c435f42fa9837a3594766a1f -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/BoxShape.compute b/Assets/Obi/Resources/Compute/BoxShape.compute deleted file mode 100644 index 58f34504c..000000000 --- a/Assets/Obi/Resources/Compute/BoxShape.compute +++ /dev/null @@ -1,73 +0,0 @@ -#include "ColliderDefinitions.cginc" -#include "ContactHandling.cginc" -#include "DistanceFunctions.cginc" -#include "Simplex.cginc" -#include "Bounds.cginc" -#include "SolverParameters.cginc" -#include "Optimization.cginc" - -#pragma kernel GenerateContacts - -StructuredBuffer positions; -StructuredBuffer orientations; -StructuredBuffer principalRadii; -StructuredBuffer velocities; - -StructuredBuffer simplices; - -StructuredBuffer transforms; -StructuredBuffer shapes; - -StructuredBuffer contactPairs; -StructuredBuffer contactOffsetsPerType; - -RWStructuredBuffer contacts; -RWStructuredBuffer dispatchBuffer; - -StructuredBuffer worldToSolver; - -uint maxContacts; - - -[numthreads(128, 1, 1)] -void GenerateContacts (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - - // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. - if (i >= dispatchBuffer[11 + 4*BOX_SHAPE]) return; - - uint count = contacts.IncrementCounter(); - if (count < maxContacts) - { - int firstPair = contactOffsetsPerType[BOX_SHAPE]; - int simplexIndex = contactPairs[firstPair + i].x; - int colliderIndex = contactPairs[firstPair + i].y; - - contact c = (contact)0; - - Box boxShape; - boxShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); - boxShape.s = shapes[colliderIndex]; - - int simplexSize; - int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); - - float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); - float4 simplexPoint; - - SurfacePoint surfacePoint = Optimize(boxShape, positions, orientations, principalRadii, - simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); - - c.pointB = surfacePoint.pos; - c.normal = surfacePoint.normal * boxShape.s.isInverted(); - c.pointA = simplexBary; - c.bodyA = simplexIndex; - c.bodyB = colliderIndex; - - contacts[count] = c; - - InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); - InterlockedMax(dispatchBuffer[3], count + 1); - } -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/BoxShape.compute.meta b/Assets/Obi/Resources/Compute/BoxShape.compute.meta deleted file mode 100644 index 6928e9b19..000000000 --- a/Assets/Obi/Resources/Compute/BoxShape.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9df6755bffe0b4dc5a30f4715e8a503c -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/BoxShapeQuery.compute b/Assets/Obi/Resources/Compute/BoxShapeQuery.compute deleted file mode 100644 index 034373c31..000000000 --- a/Assets/Obi/Resources/Compute/BoxShapeQuery.compute +++ /dev/null @@ -1,136 +0,0 @@ -#include "ColliderDefinitions.cginc" -#include "QueryDefinitions.cginc" -#include "ContactHandling.cginc" -#include "Transform.cginc" -#include "Simplex.cginc" -#include "Bounds.cginc" -#include "SolverParameters.cginc" -#include "Optimization.cginc" - -#pragma kernel GenerateResults - -StructuredBuffer positions; -StructuredBuffer orientations; -StructuredBuffer principalRadii; -StructuredBuffer simplices; - -StructuredBuffer transforms; -StructuredBuffer shapes; - -StructuredBuffer contactPairs; -StructuredBuffer contactOffsetsPerType; - -RWStructuredBuffer results; -RWStructuredBuffer dispatchBuffer; - -StructuredBuffer worldToSolver; - -uint maxContacts; - -struct Box : IDistanceFunction -{ - queryShape s; - transform colliderToSolver; - - void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) - { - float4 center = s.center * colliderToSolver.scale; - float4 size = s.size * colliderToSolver.scale * 0.5f; - - // clamp the point to the surface of the box: - float4 pnt = colliderToSolver.InverseTransformPointUnscaled(pos) - center; - - // get minimum distance for each axis: - float4 distances = size - abs(pnt); - - if (distances.x >= 0 && distances.y >= 0 && distances.z >= 0) - { - projectedPoint.normal = float4(0,0,0,0); - projectedPoint.pos = pnt; - - // find minimum distance in all three axes and the axis index: - if (distances.y < distances.x && distances.y < distances.z) - { - projectedPoint.normal[1] = sign(pnt[1]); - projectedPoint.pos[1] = size[1] * projectedPoint.normal[1]; - } - else if (distances.z < distances.x && distances.z < distances.y) - { - projectedPoint.normal[2] = sign(pnt[2]); - projectedPoint.pos[2] = size[2] * projectedPoint.normal[2]; - } - else - { - projectedPoint.normal[0] = sign(pnt[0]); - projectedPoint.pos[0] = size[0] * projectedPoint.normal[0]; - } - } - else - { - projectedPoint.pos = clamp(pnt, -size, size); - projectedPoint.normal = normalizesafe(pnt - projectedPoint.pos); - } - - projectedPoint.pos = colliderToSolver.TransformPointUnscaled(projectedPoint.pos + center + projectedPoint.normal * s.contactOffset); - projectedPoint.normal = colliderToSolver.TransformDirection(projectedPoint.normal); - projectedPoint.bary = float4(1,0,0,0); - } -}; - -[numthreads(128, 1, 1)] -void GenerateResults (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - - // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. - if (i >= dispatchBuffer[11 + 4*BOX_QUERY]) return; - - int firstPair = contactOffsetsPerType[BOX_QUERY]; - int simplexIndex = contactPairs[firstPair + i].x; - int queryIndex = contactPairs[firstPair + i].y; - - queryResult c = (queryResult)0; - - Box boxShape; - boxShape.colliderToSolver = worldToSolver[0].Multiply(transforms[queryIndex]); - boxShape.s = shapes[queryIndex]; - - int simplexSize; - int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); - - float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); - float4 simplexPoint; - - SurfacePoint surfacePoint = Optimize(boxShape, positions, orientations, principalRadii, - simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); - - - float4 simplexPrevPosition = FLOAT4_ZERO; - float simplexRadius = 0; - for (int j = 0; j < simplexSize; ++j) - { - int particleIndex = simplices[simplexStart + j]; - simplexPrevPosition += positions[particleIndex] * simplexBary[j]; - simplexRadius += EllipsoidRadius(surfacePoint.normal, orientations[particleIndex], principalRadii[particleIndex].xyz) * simplexBary[j]; - } - - c.queryPoint = surfacePoint.pos; - c.normal = surfacePoint.normal; - c.simplexBary = simplexBary; - c.simplexIndex = simplexIndex; - c.queryIndex = queryIndex; - c.dist = dot(simplexPrevPosition - surfacePoint.pos,surfacePoint.normal) - simplexRadius; - - if (c.dist <= boxShape.s.maxDistance) - { - uint count = results.IncrementCounter(); - if (count < maxContacts) - { - results[count] = c; - - InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); - InterlockedMax(dispatchBuffer[3], count + 1); - } - } - -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/BoxShapeQuery.compute.meta b/Assets/Obi/Resources/Compute/BoxShapeQuery.compute.meta deleted file mode 100644 index 4b6e8ed46..000000000 --- a/Assets/Obi/Resources/Compute/BoxShapeQuery.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 409c5f7d65dd84df9853de82bd3fbf46 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/CapsuleShape.compute b/Assets/Obi/Resources/Compute/CapsuleShape.compute deleted file mode 100644 index 0afb94a41..000000000 --- a/Assets/Obi/Resources/Compute/CapsuleShape.compute +++ /dev/null @@ -1,72 +0,0 @@ -#include "ColliderDefinitions.cginc" -#include "ContactHandling.cginc" -#include "DistanceFunctions.cginc" -#include "Simplex.cginc" -#include "Bounds.cginc" -#include "SolverParameters.cginc" -#include "Optimization.cginc" - -#pragma kernel GenerateContacts - -StructuredBuffer positions; -StructuredBuffer orientations; -StructuredBuffer principalRadii; -StructuredBuffer velocities; - -StructuredBuffer simplices; - -StructuredBuffer transforms; -StructuredBuffer shapes; - -StructuredBuffer contactPairs; -StructuredBuffer contactOffsetsPerType; - -RWStructuredBuffer contacts; -RWStructuredBuffer dispatchBuffer; - -StructuredBuffer worldToSolver; - -uint maxContacts; - -[numthreads(128, 1, 1)] -void GenerateContacts (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - - // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. - if (i >= dispatchBuffer[11 + 4*CAPSULE_SHAPE]) return; - - uint count = contacts.IncrementCounter(); - if (count < maxContacts) - { - int firstPair = contactOffsetsPerType[CAPSULE_SHAPE]; - int simplexIndex = contactPairs[firstPair + i].x; - int colliderIndex = contactPairs[firstPair + i].y; - - contact c = (contact)0; - - Capsule capsuleShape; - capsuleShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); - capsuleShape.s = shapes[colliderIndex]; - - int simplexSize; - int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); - - float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); - float4 simplexPoint; - - SurfacePoint surfacePoint = Optimize(capsuleShape, positions, orientations, principalRadii, - simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); - - c.pointB = surfacePoint.pos; - c.normal = surfacePoint.normal * capsuleShape.s.isInverted(); - c.pointA = simplexBary; - c.bodyA = simplexIndex; - c.bodyB = colliderIndex; - - contacts[count] = c; - - InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); - InterlockedMax(dispatchBuffer[3], count + 1); - } -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/CapsuleShape.compute.meta b/Assets/Obi/Resources/Compute/CapsuleShape.compute.meta deleted file mode 100644 index 0295bcb28..000000000 --- a/Assets/Obi/Resources/Compute/CapsuleShape.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: bd92ed8a5b1bc404c9b114747495f080 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/ChainConstraints.compute b/Assets/Obi/Resources/Compute/ChainConstraints.compute deleted file mode 100644 index 62c8c1a44..000000000 --- a/Assets/Obi/Resources/Compute/ChainConstraints.compute +++ /dev/null @@ -1,159 +0,0 @@ -#pragma kernel Project -#pragma kernel Apply - -#include "MathUtils.cginc" -#include "AtomicDeltas.cginc" - -StructuredBuffer particleIndices; -StructuredBuffer firstIndex; -StructuredBuffer numIndices; -StructuredBuffer restLengths; - -RWStructuredBuffer ni; // (ni:constraint gradient, di:desired lenght) -RWStructuredBuffer diagonals; // (subdiagonals), bi (diagonals) and ci (superdiagonals): - -RWStructuredBuffer positions; -StructuredBuffer invMasses; - -// Variables set from the CPU -uint activeConstraintCount; -float deltaTime; -float sorFactor; - -[numthreads(128, 1, 1)] -void Project (uint3 id : SV_DispatchThreadID) -{ - unsigned int c = id.x; - - if (c >= activeConstraintCount) return; - - int numEdges = numIndices[c] - 1; - int first = firstIndex[c]; - float minLength = restLengths[c].x; - float maxLength = restLengths[c].y; - - int i; - for (i = 0; i < numEdges; ++i) - { - int edge = first + i; - - float4 p1 = positions[particleIndices[edge]]; - float4 p2 = positions[particleIndices[edge+1]]; - float4 diff = p1 - p2; - - float dist = length(diff); - ni[edge] = float4(diff/(dist + EPSILON)); - } - - // calculate ai, bi and ci - for (i = 0; i < numEdges; ++i) - { - int edge = first + i; - - float w_i_ = invMasses[particleIndices[edge]]; - float w__i = invMasses[particleIndices[edge+1]]; - - float4 ni__ = FLOAT4_ZERO; - if (i > 0) ni__ = ni[edge - 1]; - - float4 n__i = FLOAT4_ZERO; - if (i < numEdges - 1) n__i = ni[edge + 1]; - - diagonals[edge] = float3(-w_i_ * dot(ni[edge], ni__), // ai - w_i_ + w__i, // bi - -w__i * dot(ni[edge], n__i));// ci - } - - // solve step #1, forward sweep: - // reuse diagonals.xy to store sweep results ci_ and di_: - for (i = 0; i < numEdges; ++i) - { - int edge = first + i; - float4 p1 = positions[particleIndices[edge]]; - float4 p2 = positions[particleIndices[edge + 1]]; - - float cip_ = 0; - float dip_ = 0; - - if (i > 0) - { - cip_ = diagonals[edge - 1].x; - dip_ = diagonals[edge - 1].y; - } - - float3 d = diagonals[edge]; - float den = d.y - cip_ * d.x; - - if (abs(den) > EPSILON) - { - float dist = distance(p1, p2); - float correction = 0; - - if (dist >= maxLength) - correction = dist - maxLength; - else if (dist <= minLength) - correction = dist - minLength; - - d.xy = float2(d.z / den, (correction - dip_ * d.x) / den); - - } - else - d.xy = float2(0,0); - - diagonals[edge] = d; - } - - // solve step #2, backward sweep. reuse diagonals.z to store solution xi: - for (i = numEdges - 1; i >= 0; --i) - { - int edge = first + i; - - float xi_ = (i < numEdges - 1) ? diagonals[edge + 1].z : 0; - - float3 d = diagonals[edge]; - d.z = d.y - d.x * xi_; - diagonals[edge] = d; - } - - // calculate deltas: - for (i = 0; i < numIndices[c]; ++i) - { - int index = first + i; - - float4 ni__ = FLOAT4_ZERO; - float xi_ = 0; - - if (i > 0) - { - ni__ = ni[index - 1]; - xi_ = diagonals[index - 1].z; - } - - float4 n_i_ = FLOAT4_ZERO; - float nxi = 0; - - if (i < numIndices[c] - 1) - { - n_i_ = ni[index]; - nxi = diagonals[index].z; - } - - int p = particleIndices[index]; - - AddPositionDelta(p, invMasses[p] * (ni__ * xi_ - n_i_ * nxi)); - } -} - -[numthreads(128, 1, 1)] -void Apply (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int first = firstIndex[i]; - int last = first + numIndices[i]; - - for (int k = first; k < last; ++k) - ApplyPositionDelta(positions, particleIndices[k], sorFactor); -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/ChainConstraints.compute.meta b/Assets/Obi/Resources/Compute/ChainConstraints.compute.meta deleted file mode 100644 index 561afa199..000000000 --- a/Assets/Obi/Resources/Compute/ChainConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2a5f3e8f1330846819f1abe7a6181c51 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/ClothRendering.compute b/Assets/Obi/Resources/Compute/ClothRendering.compute deleted file mode 100644 index 069c59904..000000000 --- a/Assets/Obi/Resources/Compute/ClothRendering.compute +++ /dev/null @@ -1,180 +0,0 @@ -#pragma kernel UpdateSkinConstraints -#pragma kernel UpdateClothMesh - -#include "MathUtils.cginc" - -struct Influence -{ - int index; - float weight; -}; - -struct SkinmapData -{ - int firstInfluence; - int firstInfNumber; - int firstParticleBindPose; - - int firstSkinWeight; - int firstSkinWeightNumber; - int firstBoneBindPose; - - int bindPoseCount; -}; - -struct SkeletonData -{ - int firstBone; - int boneCount; -}; - -struct MeshData -{ - int firstVertex; - int vertexCount; - - int firstTriangle; - int triangleCount; -}; - -StructuredBuffer particleIndices; -StructuredBuffer rendererIndices; // for each vertex/particle, index of its renderer. - -StructuredBuffer renderablePositions; -StructuredBuffer renderableOrientations; -StructuredBuffer colors; - -StructuredBuffer restPositions; -StructuredBuffer restOrientations; - -StructuredBuffer skinConstraintOffsets; - -StructuredBuffer skinmapIndices; // for each renderer, index of its skinmap. -StructuredBuffer meshIndices; // for each renderer, index of its mesh. -StructuredBuffer skeletonIndices; // for each renderer, index of its skeleton. - -StructuredBuffer particleOffsets; // for each renderer, index of its first particle in the batch. -StructuredBuffer vertexOffsets; // for each renderer, index of its first vertex in the batch. - -StructuredBuffer skinData; -StructuredBuffer influences; -StructuredBuffer influenceOffsets; -StructuredBuffer particleBindMatrices; -StructuredBuffer boneBindMatrices; - -StructuredBuffer skeletonData; -StructuredBuffer bonePos; -StructuredBuffer boneRot; -StructuredBuffer boneScl; - -StructuredBuffer meshData; -StructuredBuffer positions; -StructuredBuffer normals; -StructuredBuffer tangents; - -RWStructuredBuffer skinConstraintPoints; -RWStructuredBuffer skinConstraintNormals; -RWByteAddressBuffer vertices; - -// Variables set from the CPU -uint vertexCount; -uint constraintCount; -float4x4 world2Solver; - -[numthreads(128, 1, 1)] -void UpdateSkinConstraints (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= constraintCount) return; - - int rendererIndex = rendererIndices[i]; - - // get skin map and mesh data: - SkinmapData skin = skinData[skinmapIndices[rendererIndex]]; - SkeletonData skel = skeletonData[skeletonIndices[rendererIndex]]; - - // invalid skeleton: - if (skel.boneCount <= 0) - return; - - // get index of this particle in its original actor: - int originalParticleIndex = i - particleOffsets[rendererIndex]; - - // get first influence and amount of influences for this particle: - int influenceStart = influenceOffsets[skin.firstSkinWeightNumber + originalParticleIndex]; - int influenceCount = influenceOffsets[skin.firstSkinWeightNumber + originalParticleIndex + 1] - influenceStart; - - float4 pos = FLOAT4_ZERO; - float4 norm = FLOAT4_ZERO; - - for (int k = influenceStart; k < influenceStart + influenceCount; ++k) - { - Influence inf = influences[skin.firstSkinWeight + k]; - - float4x4 bind = boneBindMatrices[skin.firstBoneBindPose + inf.index]; - - int boneIndex = skel.firstBone + inf.index; - float4x4 deform = TRS(bonePos[boneIndex], boneRot[boneIndex], boneScl[boneIndex]); - float4x4 trfm = mul(world2Solver, mul(deform, bind)); - - pos.xyz += mul(trfm, float4(restPositions[particleIndices[i]].xyz, 1)).xyz * inf.weight; - norm.xyz += mul(trfm, float4(rotate_vector(restOrientations[particleIndices[i]], float3(0, 0, 1)), 0)).xyz * inf.weight; - } - - int constraintIndex = skinConstraintOffsets[rendererIndex] + originalParticleIndex; - skinConstraintPoints[constraintIndex] = pos; - skinConstraintNormals[constraintIndex] = norm; - -} - -[numthreads(128, 1, 1)] -void UpdateClothMesh (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= vertexCount) return; - - int rendererIndex = rendererIndices[i]; - - // get skin map and mesh data: - SkinmapData skin = skinData[skinmapIndices[rendererIndex]]; - MeshData mesh = meshData[meshIndices[rendererIndex]]; - - // get index of this vertex in its original mesh: - int originalVertexIndex = i - vertexOffsets[rendererIndex]; - - // get index of the vertex in the mesh batch: - int batchedVertexIndex = mesh.firstVertex + originalVertexIndex; - - // get first influence and amount of influences for this vertex: - int influenceStart = influenceOffsets[skin.firstInfNumber + originalVertexIndex]; - int influenceCount = influenceOffsets[skin.firstInfNumber + originalVertexIndex + 1] - influenceStart; - - float3 position = float3(0,0,0); - float3 normal = float3(0,0,0); - float4 tangent = FLOAT4_ZERO; - float4 color = FLOAT4_ZERO; - - for (int k = influenceStart; k < influenceStart + influenceCount; ++k) - { - Influence inf = influences[skin.firstInfluence + k]; - - int p = particleIndices[particleOffsets[rendererIndex] + inf.index]; - - float4x4 deform = mul(m_translate(FLOAT4X4_IDENTITY,renderablePositions[p].xyz), q_toMatrix(renderableOrientations[p])); - float4x4 trfm = mul(deform, particleBindMatrices[skin.firstParticleBindPose + inf.index]); - - // update vertex/normal/tangent: - position += mul(trfm, float4(positions[batchedVertexIndex], 1)).xyz * inf.weight; - normal += mul(trfm, float4(normals[batchedVertexIndex], 0)).xyz * inf.weight; - tangent += float4(mul(trfm, float4(tangents[batchedVertexIndex].xyz, 0)).xyz, tangents[batchedVertexIndex].w) * inf.weight; - color += colors[p] * inf.weight; - } - - int base = i * 14; - vertices.Store3( base<<2, asuint(position)); - vertices.Store3((base + 3)<<2, asuint(normal)); - vertices.Store4((base + 6)<<2, asuint(tangent)); - vertices.Store4((base + 10)<<2, asuint(color)); -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/ClothRendering.compute.meta b/Assets/Obi/Resources/Compute/ClothRendering.compute.meta deleted file mode 100644 index 5b2b24c93..000000000 --- a/Assets/Obi/Resources/Compute/ClothRendering.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7620e03e082f448828570f6659b73301 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/ColliderCollisionConstraints.compute b/Assets/Obi/Resources/Compute/ColliderCollisionConstraints.compute deleted file mode 100644 index 9fd3f0c58..000000000 --- a/Assets/Obi/Resources/Compute/ColliderCollisionConstraints.compute +++ /dev/null @@ -1,219 +0,0 @@ -#include "ContactHandling.cginc" -#include "ColliderDefinitions.cginc" -#include "Rigidbody.cginc" -#include "Simplex.cginc" -#include "CollisionMaterial.cginc" -#include "AtomicDeltas.cginc" - -#pragma kernel Clear -#pragma kernel Initialize -#pragma kernel Project -#pragma kernel Apply - -StructuredBuffer particleIndices; - -StructuredBuffer simplices; -StructuredBuffer invMasses; -StructuredBuffer invRotationalMasses; -StructuredBuffer prevPositions; -StructuredBuffer prevOrientations; -StructuredBuffer principalRadii; -StructuredBuffer velocities; - -StructuredBuffer transforms; -StructuredBuffer shapes; -RWStructuredBuffer RW_rigidbodies; - -RWStructuredBuffer positions; -RWStructuredBuffer orientations; -RWStructuredBuffer deltas; - -RWStructuredBuffer contacts; -RWStructuredBuffer effectiveMasses; -StructuredBuffer dispatchBuffer; - -StructuredBuffer inertialSolverFrame; - -// Variables set from the CPU -uint particleCount; -float maxDepenetration; -float substepTime; -float stepTime; -int steps; -float timeLeft; -float sorFactor; - -[numthreads(128, 1, 1)] -void Clear (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= dispatchBuffer[3]) return; - - int rigidbodyIndex = shapes[contacts[i].bodyB].rigidbodyIndex; - if (rigidbodyIndex >= 0) - { - int orig; - InterlockedExchange(RW_rigidbodies[rigidbodyIndex].constraintCount, 0, orig); - } -} - -[numthreads(128, 1, 1)] -void Initialize (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= dispatchBuffer[3]) return; - - int simplexSizeA; - int simplexStartA = GetSimplexStartAndSize(contacts[i].bodyA, simplexSizeA); - - // get the material from the first particle in the simplex: - int aMaterialIndex = collisionMaterialIndices[simplices[simplexStartA]]; - bool rollingContacts = aMaterialIndex >= 0 ? collisionMaterials[aMaterialIndex].rollingContacts > 0 : false; - - float4 relativeVelocity = FLOAT4_ZERO; - float4 simplexPrevPosition = FLOAT4_ZERO; - quaternion simplexPrevOrientation = quaternion(0, 0, 0, 0); - float simplexRadius = 0; - float simplexInvMass = 0; - float simplexInvRotationalMass = 0; - - for (int j = 0; j < simplexSizeA; ++j) - { - int particleIndex = simplices[simplexStartA + j]; - relativeVelocity += velocities[particleIndex] * contacts[i].pointA[j]; - simplexPrevPosition += prevPositions[particleIndex] * contacts[i].pointA[j]; - simplexPrevOrientation += prevOrientations[particleIndex] * contacts[i].pointA[j]; - simplexInvMass += invMasses[particleIndex] * contacts[i].pointA[j]; - simplexInvRotationalMass += invRotationalMasses[particleIndex] * contacts[i].pointA[j]; - simplexRadius += EllipsoidRadius(contacts[i].normal, prevOrientations[particleIndex], principalRadii[particleIndex].xyz) * contacts[i].pointA[j]; - } - - // if there's a rigidbody present, subtract its velocity from the relative velocity: - int rigidbodyIndex = shapes[contacts[i].bodyB].rigidbodyIndex; - if (rigidbodyIndex >= 0) - { - // Note: unlike rA, that is expressed in solver space, rB is expressed in world space. - relativeVelocity -= GetRigidbodyVelocityAtPoint(RW_rigidbodies[rigidbodyIndex], contacts[i].pointB, - asfloat(linearDeltasAsInt[rigidbodyIndex]), - asfloat(angularDeltasAsInt[rigidbodyIndex]), inertialSolverFrame[0]); - - int bMaterialIndex = shapes[contacts[i].bodyB].materialIndex; - rollingContacts = rollingContacts | (bMaterialIndex >= 0 ? collisionMaterials[bMaterialIndex].rollingContacts > 0 : false); - } - - // update contact distance - contacts[i].dist = dot(simplexPrevPosition - contacts[i].pointB, contacts[i].normal) - simplexRadius; - - // calculate contact point in A's surface: - float4 contactPoint = contacts[i].pointB + contacts[i].normal * contacts[i].dist; - - // update contact basis: - CalculateBasis(relativeVelocity, contacts[i].normal, contacts[i].tangent); - - // calculate A's contact mass. - float4 invInertiaTensor = 1.0/(GetParticleInertiaTensor(simplexRadius, simplexInvRotationalMass) + FLOAT4_EPSILON); - CalculateContactMassesA(simplexInvMass, invInertiaTensor, simplexPrevPosition, simplexPrevOrientation, contactPoint, rollingContacts, contacts[i].normal, contacts[i].tangent, GetBitangent(contacts[i]), effectiveMasses[i].normalInvMassA, effectiveMasses[i].tangentInvMassA, effectiveMasses[i].bitangentInvMassA); - - // clear B's contact mass. - if (rigidbodyIndex >= 0) - { - CalculateContactMassesB(RW_rigidbodies[rigidbodyIndex], inertialSolverFrame[0].frame, contacts[i].pointB, contacts[i].normal, contacts[i].tangent, GetBitangent(contacts[i]), effectiveMasses[i].normalInvMassB, effectiveMasses[i].tangentInvMassB, effectiveMasses[i].bitangentInvMassB); - InterlockedAdd(RW_rigidbodies[rigidbodyIndex].constraintCount, 1); - } - else - { - ClearContactMasses(effectiveMasses[i].normalInvMassB, effectiveMasses[i].tangentInvMassB, effectiveMasses[i].bitangentInvMassB); - } -} - -[numthreads(128, 1, 1)] -void Project (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= dispatchBuffer[3]) return; - - // Skip contacts involving triggers: - if (shapes[contacts[i].bodyB].isTrigger()) - return; - - int simplexSize; - int simplexStart = GetSimplexStartAndSize(contacts[i].bodyA, simplexSize); - int colliderIndex = contacts[i].bodyB; - - // Get the rigidbody index (might be < 0, in that case there's no rigidbody present) - int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; - - float frameEnd = stepTime * steps; - float substepsToEnd = timeLeft / substepTime; - - // Combine collision materials (use material from first particle in simplex) - collisionMaterial material = CombineCollisionMaterials(collisionMaterialIndices[simplices[simplexStart]], shapes[colliderIndex].materialIndex); - - // Get relative velocity at contact point. - // As we do not consider true ellipses for collision detection, particle contact points are never off-axis. - // So particle angular velocity does not contribute to normal impulses, and we can skip it. - float4 simplexPosition = FLOAT4_ZERO; - float4 simplexPrevPosition = FLOAT4_ZERO; - float simplexRadius = 0; - - for (int j = 0; j < simplexSize; ++j) - { - int particleIndex = simplices[simplexStart + j]; - simplexPosition += positions[particleIndex] * contacts[i].pointA[j]; - simplexPrevPosition += prevPositions[particleIndex] * contacts[i].pointA[j]; - simplexRadius += EllipsoidRadius(contacts[i].normal, orientations[particleIndex], principalRadii[particleIndex].xyz) * contacts[i].pointA[j]; - } - - // project position to the end of the full step: - float4 posA = lerp(simplexPrevPosition, simplexPosition, substepsToEnd); - posA += -contacts[i].normal * simplexRadius; - - float4 posB = contacts[i].pointB; - int rbContacts = 1; - if (rigidbodyIndex >= 0) - { - posB += GetRigidbodyVelocityAtPoint(rigidbodies[rigidbodyIndex], contacts[i].pointB, - asfloat(linearDeltasAsInt[rigidbodyIndex]), - asfloat(angularDeltasAsInt[rigidbodyIndex]), inertialSolverFrame[0]) * frameEnd; - rbContacts = rigidbodies[rigidbodyIndex].constraintCount; - } - - float normalInvMass = effectiveMasses[i].normalInvMassA + effectiveMasses[i].normalInvMassB * rbContacts; - float lambda = SolveAdhesion(contacts[i], normalInvMass, posA, posB, material.stickDistance, material.stickiness, stepTime); - - lambda += SolvePenetration(contacts[i], normalInvMass, posA, posB, maxDepenetration * stepTime); - - if (abs(lambda) > EPSILON) - { - float4 delta = lambda * contacts[i].normal * BaryScale(contacts[i].pointA) / substepsToEnd; - for (int j = 0; j < simplexSize; ++j) - { - int particleIndex = simplices[simplexStart + j]; - float4 delta1 = delta * invMasses[particleIndex] * contacts[i].pointA[j]; - - AtomicAddPositionDelta(particleIndex, delta1); - } - - if (rigidbodyIndex >= 0) - { - ApplyImpulse(rigidbodyIndex, -lambda / frameEnd * contacts[i].normal, contacts[i].pointB, inertialSolverFrame[0].frame); - } - } -} - -[numthreads(128, 1, 1)] -void Apply (uint3 id : SV_DispatchThreadID) -{ - unsigned int threadIndex = id.x; - - if (threadIndex >= particleCount) return; - - int p = particleIndices[threadIndex]; - - ApplyPositionDelta(positions, p, sorFactor); -} - - diff --git a/Assets/Obi/Resources/Compute/ColliderCollisionConstraints.compute.meta b/Assets/Obi/Resources/Compute/ColliderCollisionConstraints.compute.meta deleted file mode 100644 index c8cd80576..000000000 --- a/Assets/Obi/Resources/Compute/ColliderCollisionConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ff4c3e041ffef4a5c91cf275735a7ecc -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/ColliderDefinitions.cginc b/Assets/Obi/Resources/Compute/ColliderDefinitions.cginc deleted file mode 100644 index 3fb6ef96c..000000000 --- a/Assets/Obi/Resources/Compute/ColliderDefinitions.cginc +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef COLLIDERDEFS_INCLUDE -#define COLLIDERDEFS_INCLUDE - -#define SPHERE_SHAPE 0 -#define BOX_SHAPE 1 -#define CAPSULE_SHAPE 2 -#define HEIGHTMAP_SHAPE 3 -#define TRIANGLE_MESH_SHAPE 4 -#define EDGE_MESH_SHAPE 5 -#define SDF_SHAPE 6 - -#define FORCEMODE_FORCE 0 -#define FORCEMODE_ACCEL 1 -#define FORCEMODE_WIND 2 - -#define DAMPDIR_ALL 0 -#define DAMPDIR_FORCE 1 -#define DAMPDIR_SURFACE 2 - -#define ZONETYPE_DIRECTIONAL 0 -#define ZONETYPE_RADIAL 1 -#define ZONETYPE_VORTEX 2 -#define ZONETYPE_VOID 3 - -struct shape -{ - float4 center; - float4 size; /**< box: size of the box in each axis. - sphere: radius of sphere (x,y,z), - capsule: radius (x), height(y), direction (z, can be 0, 1 or 2). - heightmap: width (x axis), height (y axis) and depth (z axis) in world units.*/ - uint type; /**< Sphere = 0, - Box = 1, - Capsule = 2, - Heightmap = 3, - TriangleMesh = 4, - EdgeMesh = 5, - SignedDistanceField = 6*/ - - float contactOffset; - int dataIndex; - int rigidbodyIndex; // index of the associated rigidbody in the collision world. - int materialIndex; // index of the associated material in the collision world. - int forceZoneIndex; // index of the associated force zone in the collision world. - int phase; - int flags; // first bit whether the collider is 2D (1) or 3D (0), second bit whether it's a trigger (1) or regular collider (0). - // third bit determines whether shape is inverted or not. - - bool is2D() - { - return (flags & 1) != 0; - } - - bool isTrigger() - { - // TODO: using bools doesn't work... why? - int a = (flags & 1 << 1) != 0; - int b = forceZoneIndex >= 0; - return a || b; - } - - float isInverted() - { - return (flags & 1 << 2) != 0 ? -1 : 1; - } -}; - -struct forceZone -{ - float4 color; - uint type; - uint mode; - uint dampingDir; - float intensity; - float minDistance; - float maxDistance; - float falloffPower; - float damping; -}; - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/ColliderDefinitions.cginc.meta b/Assets/Obi/Resources/Compute/ColliderDefinitions.cginc.meta deleted file mode 100644 index 469484159..000000000 --- a/Assets/Obi/Resources/Compute/ColliderDefinitions.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: fe486a46344cd4c299b4475a4e046796 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/ColliderFrictionConstraints.compute b/Assets/Obi/Resources/Compute/ColliderFrictionConstraints.compute deleted file mode 100644 index 980908925..000000000 --- a/Assets/Obi/Resources/Compute/ColliderFrictionConstraints.compute +++ /dev/null @@ -1,193 +0,0 @@ -#include "ContactHandling.cginc" -#include "ColliderDefinitions.cginc" -#include "Rigidbody.cginc" -#include "Simplex.cginc" -#include "CollisionMaterial.cginc" -#include "Integration.cginc" -#include "AtomicDeltas.cginc" -#include "FluidKernels.cginc" - -#pragma kernel Project -#pragma kernel Apply - -StructuredBuffer particleIndices; -StructuredBuffer simplices; -StructuredBuffer invMasses; -StructuredBuffer invRotationalMasses; -StructuredBuffer positions; -StructuredBuffer orientations; -StructuredBuffer prevPositions; -StructuredBuffer prevOrientations; -StructuredBuffer principalRadii; - -StructuredBuffer transforms; -StructuredBuffer shapes; - -RWStructuredBuffer RW_positions; -RWStructuredBuffer RW_orientations; - -RWStructuredBuffer contacts; -RWStructuredBuffer effectiveMasses; -StructuredBuffer dispatchBuffer; - -StructuredBuffer solverToWorld; -StructuredBuffer inertialSolverFrame; - -// Variables set from the CPU -uint particleCount; -float substepTime; -float stepTime; -float sorFactor; - -[numthreads(128, 1, 1)] -void Project (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= dispatchBuffer[3]) return; - - // Skip contacts involving triggers: - if (shapes[contacts[i].bodyB].isTrigger()) - return; - - int simplexSize; - int simplexStart = GetSimplexStartAndSize(contacts[i].bodyA, simplexSize); - int colliderIndex = contacts[i].bodyB; - - int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; - - // Combine collision materials (use material from first particle in simplex) - collisionMaterial material = CombineCollisionMaterials(collisionMaterialIndices[simplices[simplexStart]], shapes[colliderIndex].materialIndex); - - // Calculate relative velocity: - float4 rA = float4(0,0,0,0), rB = float4(0,0,0,0); - - float4 prevPositionA = float4(0,0,0,0); - float4 linearVelocityA = float4(0,0,0,0); - float4 angularVelocityA = float4(0,0,0,0); - float invRotationalMassA = 0; - quaternion orientationA = quaternion(0, 0, 0, 0); - float simplexRadiusA = 0; - - int j = 0; - for (j = 0; j < simplexSize; ++j) - { - int particleIndex = simplices[simplexStart + j]; - prevPositionA += prevPositions[particleIndex] * contacts[i].pointA[j]; - linearVelocityA += DifferentiateLinear(positions[particleIndex], prevPositions[particleIndex], substepTime) * contacts[i].pointA[j]; - angularVelocityA += DifferentiateAngular(orientations[particleIndex], prevOrientations[particleIndex], substepTime) * contacts[i].pointA[j]; - invRotationalMassA += invRotationalMasses[particleIndex] * contacts[i].pointA[j]; - orientationA += orientations[particleIndex] * contacts[i].pointA[j]; - simplexRadiusA += EllipsoidRadius(contacts[i].normal, prevOrientations[particleIndex], principalRadii[particleIndex].xyz) * contacts[i].pointA[j]; - } - - float4 relativeVelocity = linearVelocityA; - - // Add particle angular velocity if rolling contacts are enabled: - if (material.rollingContacts > 0) - { - rA = -contacts[i].normal * simplexRadiusA; // for fluid particles: - relativeVelocity += float4(cross(angularVelocityA.xyz, rA.xyz), 0); //* (Poly6(contacts[i].dist,simplexRadiusA*6) / Poly6(0,simplexRadiusA*6)); - } - - // Subtract rigidbody velocity: - int rbContacts = 1; - if (rigidbodyIndex >= 0) - { - // Note: unlike rA, that is expressed in solver space, rB is expressed in world space. - rB = solverToWorld[0].TransformPoint(contacts[i].pointB) - rigidbodies[rigidbodyIndex].com; - - relativeVelocity -= GetRigidbodyVelocityAtPoint(rigidbodies[rigidbodyIndex], contacts[i].pointB, - asfloat(linearDeltasAsInt[rigidbodyIndex]), - asfloat(angularDeltasAsInt[rigidbodyIndex]), inertialSolverFrame[0]); - - rbContacts = rigidbodies[rigidbodyIndex].constraintCount; - } - - // Determine impulse magnitude: - float tangentMass = effectiveMasses[i].tangentInvMassA + effectiveMasses[i].tangentInvMassB * rbContacts; - float bitangentMass = effectiveMasses[i].bitangentInvMassA + effectiveMasses[i].bitangentInvMassB * rbContacts; - float2 impulses = SolveFriction(contacts[i], tangentMass, bitangentMass, relativeVelocity, material.staticFriction, material.dynamicFriction, stepTime); - - if (abs(impulses.x) > EPSILON || abs(impulses.y) > EPSILON) - { - float4 tangentImpulse = impulses.x * contacts[i].tangent; - float4 bitangentImpulse = impulses.y * GetBitangent(contacts[i]); - float4 totalImpulse = tangentImpulse + bitangentImpulse; - - float baryScale = BaryScale(contacts[i].pointA); - for (j = 0; j < simplexSize; ++j) - { - int particleIndex = simplices[simplexStart + j]; - float4 delta1 = (tangentImpulse * effectiveMasses[i].tangentInvMassA + bitangentImpulse * effectiveMasses[i].bitangentInvMassA) * substepTime * contacts[i].pointA[j] * baryScale; - AtomicAddPositionDelta(particleIndex, delta1); - } - - if (rigidbodyIndex >= 0) - { - ApplyImpulse(rigidbodyIndex, -totalImpulse, contacts[i].pointB, inertialSolverFrame[0].frame); - } - - // Rolling contacts: - if (material.rollingContacts > 0) - { - // Calculate angular velocity deltas due to friction impulse: - float4 invInertiaTensor = 1.0/(GetParticleInertiaTensor(simplexRadiusA, invRotationalMassA) + FLOAT4_EPSILON); - float4x4 solverInertiaA = TransformInertiaTensor(invInertiaTensor, orientationA); - - float4 angVelDeltaA = mul(solverInertiaA, float4(cross(rA.xyz, totalImpulse.xyz), 0)); - float4 angVelDeltaB = FLOAT4_ZERO; - - // Final angular velocities, after adding the deltas: - angularVelocityA += angVelDeltaA; - float4 angularVelocityB = FLOAT4_ZERO; - - // Calculate weights (inverse masses): - float invMassA = length(mul(solverInertiaA, normalizesafe(angularVelocityA))); - float invMassB = 0; - - if (rigidbodyIndex >= 0) - { - angVelDeltaB = mul(-rigidbodies[rigidbodyIndex].inverseInertiaTensor, float4(cross(rB.xyz, totalImpulse.xyz), 0)); - angularVelocityB = rigidbodies[rigidbodyIndex].angularVelocity + angVelDeltaB; - invMassB = length(mul(rigidbodies[rigidbodyIndex].inverseInertiaTensor, normalizesafe(angularVelocityB))) * rbContacts; - } - - // Calculate rolling axis and angular velocity deltas: - float4 rollAxis = FLOAT4_ZERO; - float rollingImpulse = SolveRollingFriction(contacts[i], angularVelocityA, angularVelocityB, material.rollingFriction, invMassA, invMassB, rollAxis); - angVelDeltaA += rollAxis * rollingImpulse * invMassA; - angVelDeltaB -= rollAxis * rollingImpulse * invMassB; - - // Apply orientation delta to particles: - quaternion orientationDelta = AngularVelocityToSpinQuaternion(orientationA, angVelDeltaA, substepTime); - - for (j = 0; j < simplexSize; ++j) - { - int particleIndex = simplices[simplexStart + j]; - AtomicAddOrientationDelta(particleIndex, orientationDelta); - } - - // Apply angular velocity delta to rigidbody: - if (rigidbodyIndex >= 0) - { - AtomicAddAngularDelta(rigidbodyIndex, angVelDeltaB); - } - } - } -} - -[numthreads(128, 1, 1)] -void Apply (uint3 id : SV_DispatchThreadID) -{ - unsigned int threadIndex = id.x; - - if (threadIndex >= particleCount) return; - - int p = particleIndices[threadIndex]; - - ApplyPositionDelta(RW_positions, p, sorFactor); - ApplyOrientationDelta(RW_orientations, p, sorFactor); -} - - diff --git a/Assets/Obi/Resources/Compute/ColliderFrictionConstraints.compute.meta b/Assets/Obi/Resources/Compute/ColliderFrictionConstraints.compute.meta deleted file mode 100644 index e3e3d701b..000000000 --- a/Assets/Obi/Resources/Compute/ColliderFrictionConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ec52fd9d30c594294a7c2f0f50cc6096 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/ColliderGrid.compute b/Assets/Obi/Resources/Compute/ColliderGrid.compute deleted file mode 100644 index 1369769ac..000000000 --- a/Assets/Obi/Resources/Compute/ColliderGrid.compute +++ /dev/null @@ -1,478 +0,0 @@ -#include "GridUtils.cginc" -#include "CollisionMaterial.cginc" -#include "ContactHandling.cginc" -#include "ColliderDefinitions.cginc" -#include "Rigidbody.cginc" -#include "Simplex.cginc" -#include "Bounds.cginc" -#include "SolverParameters.cginc" -#include "AtomicDeltas.cginc" -#include "Phases.cginc" - -#define MAX_CONTACTS_PER_SIMPLEX 64 - -#pragma kernel Clear -#pragma kernel BuildUnsortedList -#pragma kernel FindPopulatedLevels -#pragma kernel SortList -#pragma kernel BuildContactList -#pragma kernel PrefixSumColliderCounts -#pragma kernel SortContactPairs -#pragma kernel ApplyForceZones -#pragma kernel WriteForceZoneResults - -StructuredBuffer positions; -StructuredBuffer orientations; -StructuredBuffer principalRadii; -StructuredBuffer invMasses; -StructuredBuffer velocities; -RWStructuredBuffer externalForces; -RWStructuredBuffer wind; -RWStructuredBuffer colors; -RWStructuredBuffer life; - -StructuredBuffer activeParticles; -StructuredBuffer simplices; -StructuredBuffer filters; -RWStructuredBuffer simplexBounds; // bounding box of each simplex. - -StructuredBuffer aabbs; -StructuredBuffer transforms; -StructuredBuffer shapes; -StructuredBuffer forceZones; -RWStructuredBuffer sortedColliderIndices; - -RWStructuredBuffer colliderTypeCounts; -RWStructuredBuffer contactOffsetsPerType; -RWStructuredBuffer unsortedContactPairs; - -RWStructuredBuffer cellIndices; -RWStructuredBuffer cellOffsets; - -RWStructuredBuffer cellCounts; -RWStructuredBuffer offsetInCells; - -RWStructuredBuffer contacts; -RWStructuredBuffer contactPairs; -RWStructuredBuffer dispatchBuffer; - -StructuredBuffer solverToWorld; -StructuredBuffer worldToSolver; - -uint maxContacts; -uint colliderCount; // amount of colliders in the grid. -uint cellsPerCollider; // max amount of cells a collider can be inserted into. Typically this is 8. -int shapeTypeCount; // number of different collider shapes, ie: box, sphere, sdf, etc. -uint particleCount; -float deltaTime; - -[numthreads(128, 1, 1)] -void Clear (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i == 0) - { - for (int l = 0; l <= GRID_LEVELS; ++l) - levelPopulation[l] = 0; - } - - // clear all cell offsets to invalid, so that we can later use atomic minimum to calculate the offset. - if (i < maxCells) - { - cellOffsets[i] = INVALID; - cellCounts[i] = 0; - } - - // clear all cell indices to invalid. - if (i < colliderCount) - { - for (uint j = 0; j < cellsPerCollider; ++j) - cellIndices[i*cellsPerCollider+j] = INVALID; - } -} - -[numthreads(128, 1, 1)] -void BuildUnsortedList (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= colliderCount) return; - - aabb bounds = aabbs[i]; - int rb = shapes[i].rigidbodyIndex; - - // Expand bounds by rigidbody's linear velocity - // (check against out of bounds rigidbody access, can happen when a destroyed collider references a rigidbody that has just been destroyed too) - if (rb >= 0)// && rb < rigidbodies.Length) - bounds.Sweep(rigidbodies[rb].velocity * deltaTime); - - // Expand bounds by collision material's stick distance: - if (shapes[i].materialIndex >= 0) - bounds.Expand(collisionMaterials[shapes[i].materialIndex].stickDistance); - - // calculate bounds size, grid level and cell size: - float4 size = bounds.max_ - bounds.min_; - float maxSize = max(max (size.x, size.y), size.z); - int level = GridLevelForSize(maxSize); - float cellSize = CellSizeOfLevel(level); - - // calculate max and min cell coordinates (force 4th component to zero, might not be after expanding) - int4 minCell = floor(bounds.min_ / cellSize); - int4 maxCell = floor(bounds.max_ / cellSize); - minCell[3] = 0; - maxCell[3] = 0; - - // if the collider is 2D, project it to the z = 0 cells. - if (shapes[i].is2D()) - { - minCell[2] = 0; - maxCell[2] = 0; - } - - int4 cellSpan = maxCell - minCell; - - // insert collider in cells: - for (int x = 0; x <= cellSpan[0]; ++x) - { - for (int y = 0; y <= cellSpan[1]; ++y) - { - for (int z = 0; z <= cellSpan[2]; ++z) - { - int cellIndex = GridHash(minCell + int4(x, y, z, level)); - - // calculate flat index of this cell into arrays: - int k = x + y*2 + z*4 + i*cellsPerCollider; - - cellIndices[k] = cellIndex; - InterlockedAdd(cellCounts[cellIndex],1,offsetInCells[k]); - } - } - } - - // atomically increase this level's population by one: - InterlockedAdd(levelPopulation[1 + level],1); -} - -[numthreads(128, 1, 1)] -void SortList (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - if (i >= colliderCount * cellsPerCollider) return; - - uint cellIndex = cellIndices[i]; - - if (cellIndex != INVALID) - { - // write collider to its sorted index: - uint sortedIndex = cellOffsets[cellIndex] + offsetInCells[i]; - sortedColliderIndices[sortedIndex] = i; - } -} - -[numthreads(128, 1, 1)] -void BuildContactList (uint3 id : SV_DispatchThreadID) -{ - unsigned int threadIndex = id.x; - - if (threadIndex >= pointCount + edgeCount + triangleCount) return; - - uint cellCount = colliderCount * cellsPerCollider; - int candidateCount = 0; - uint candidates[MAX_CONTACTS_PER_SIMPLEX]; - - int simplexSize; - int simplexStart = GetSimplexStartAndSize(threadIndex, simplexSize); - - aabb b = simplexBounds[threadIndex].Transformed(solverToWorld[0]); - - // max size of the particle bounds in cells: - int4 maxSize = int4(10,10,10,10); - - // build a list of candidate colliders: - for (uint m = 1; m <= levelPopulation[0]; ++m) - { - uint l = levelPopulation[m]; - float cellSize = CellSizeOfLevel(l); - - int4 minCell = floor(b.min_ / cellSize); - int4 maxCell = floor(b.max_ / cellSize); - maxCell = minCell + min(maxCell - minCell, maxSize); - - for (int x = minCell[0]; x <= maxCell[0]; ++x) - { - for (int y = minCell[1]; y <= maxCell[1]; ++y) - { - // for 2D mode, project each cell at z == 0 and check them too. This way we ensure 2D colliders - // (which are inserted in cells with z == 0) are accounted for in the broadphase. - if (mode == 1) - { - uint flatCellIndex = GridHash(int4(x,y,0,l)); - uint cellStart = cellOffsets[flatCellIndex]; - uint cellCount = cellCounts[flatCellIndex]; - - // iterate through colliders in the neighbour cell - for (uint n = cellStart; n < cellStart + cellCount; ++n) - { - // sorted insert into the candidates list: - if (candidateCount < MAX_CONTACTS_PER_SIMPLEX) - candidates[candidateCount++] = sortedColliderIndices[n] / cellsPerCollider; - } - } - - for (int z = minCell[2]; z <= maxCell[2]; ++z) - { - uint flatCellIndex = GridHash(int4(x,y,z,l)); - uint cellStart = cellOffsets[flatCellIndex]; - uint cellCount = cellCounts[flatCellIndex]; - - // iterate through colliders in the neighbour cell - for (uint n = cellStart; n < cellStart + cellCount; ++n) - { - if (candidateCount < MAX_CONTACTS_PER_SIMPLEX) - candidates[candidateCount++] = sortedColliderIndices[n] / cellsPerCollider; - } - - } - } - } - } - - //evaluate candidates and create contacts: - if (candidateCount > 0) - { - // insert sort: - for (int k = 1; k < candidateCount; ++k) - { - uint key = candidates[k]; - int j = k - 1; - - while (j >= 0 && candidates[j] > key) - candidates[j + 1] = candidates[j--]; - - candidates[j + 1] = key; - } - - // make sure each candidate only shows up once in the list: - int first = 0, contactCount = 0; - while(++first != candidateCount) - { - if (candidates[contactCount] != candidates[first]) - candidates[++contactCount] = candidates[first]; - } - contactCount++; - - // append contacts: - for (int i = 0; i < contactCount; i++) - { - int c = candidates[i]; - - aabb colliderBoundsWS = aabbs[c]; - int rb = shapes[c].rigidbodyIndex; - - // Expand bounds by rigidbody's linear velocity: - if (rb >= 0) - colliderBoundsWS.Sweep(rigidbodies[rb].velocity * deltaTime); - - // Expand bounds by collision material's stick distance: - if (shapes[c].materialIndex >= 0) - colliderBoundsWS.Expand(collisionMaterials[shapes[c].materialIndex].stickDistance); - - // check if any simplex particle and the collider should collide: - bool shouldCollide = false; - int colliderCategory = shapes[c].phase & CategoryMask; - int colliderMask = (shapes[c].phase & MaskMask) >> 16; - for (int j = 0; j < simplexSize; ++j) - { - int simplexCategory = filters[simplices[simplexStart + j]] & CategoryMask; - int simplexMask = (filters[simplices[simplexStart + j]] & MaskMask) >> 16; - shouldCollide = shouldCollide || ((simplexCategory & colliderMask) != 0 && (simplexMask & colliderCategory) != 0); - } - - if (shouldCollide && b.IntersectsAabb(colliderBoundsWS, mode == 1)) - { - uint count; - InterlockedAdd(dispatchBuffer[7], 1, count); - - // technically incorrect, as number of pairs != number of contacts but - // we will ignore either excess pairs or contacts. - if (count < maxContacts) - { - // increment the amount of contacts for this shape type: - InterlockedAdd(colliderTypeCounts[shapes[c].type],1); - - // enqueue a new contact pair: - unsortedContactPairs[count] = uint2(threadIndex,c); - - InterlockedMax(dispatchBuffer[4],(count + 1) / 128 + 1); - } - } - } - } -} - -[numthreads(1, 1, 1)] -void PrefixSumColliderCounts (uint3 id : SV_DispatchThreadID) -{ - contactOffsetsPerType[0] = 0; - int i; - - for (i = 0; i < shapeTypeCount; ++i) - { - contactOffsetsPerType[i+1] = contactOffsetsPerType[i] + colliderTypeCounts[i]; - - // write amount of pairs per collider type in the dispatch buffer: - dispatchBuffer[8 + i*4] = colliderTypeCounts[i] / 128 + 1; - dispatchBuffer[8 + i*4 + 3] = colliderTypeCounts[i]; - } -} - -[numthreads(128, 1, 1)] -void SortContactPairs (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - if (i >= dispatchBuffer[7] || i >= maxContacts) return; - - uint2 pair = unsortedContactPairs[i]; - int shapeType = (int)shapes[pair.y].type; - - // decrement amount of pairs for the given collider type: - uint count; - InterlockedAdd(colliderTypeCounts[shapeType],-1, count); - - // write the pair directly at its position in the sorted array: - contactPairs[contactOffsetsPerType[shapeType] + count - 1] = pair; -} - -void AtomicAddExternalForceDelta(in int index, in float4 delta) -{ - InterlockedAddFloat(deltasAsInt, index, 0, delta.x); - InterlockedAddFloat(deltasAsInt, index, 1, delta.y); - InterlockedAddFloat(deltasAsInt, index, 2, delta.z); -} - -void AtomicAddWindDelta(in int index, in float4 delta) -{ - InterlockedAddFloat(orientationDeltasAsInt, index, 0, delta.x); - InterlockedAddFloat(orientationDeltasAsInt, index, 1, delta.y); - InterlockedAddFloat(orientationDeltasAsInt, index, 2, delta.z); -} - -void AtomicAddLifeDelta(in int index, in float delta) -{ - InterlockedAddFloat(deltasAsInt, index, 3, delta); -} - -[numthreads(128, 1, 1)] -void ApplyForceZones (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatchBuffer[3]) return; - - int forceZoneIndex = shapes[contacts[i].bodyB].forceZoneIndex; - - if (forceZoneIndex >= 0) - { - int simplexSize; - int simplexStart = GetSimplexStartAndSize(contacts[i].bodyA, simplexSize); - - for (int j = 0; j < simplexSize; ++j) - { - int particleIndex = simplices[simplexStart + j]; - - float dist = -dot(positions[particleIndex] - contacts[i].pointB, contacts[i].normal); - if (dist < 0) continue; - - float4 axis = worldToSolver[0].Multiply(transforms[contacts[i].bodyB]).TransformDirection(float4(0, 0, 1, 0)); - - // calculate falloff region based on min/max distances: - float falloff = 1; - float range = forceZones[forceZoneIndex].maxDistance - forceZones[forceZoneIndex].minDistance; - if (abs(range) > EPSILON) - falloff = pow(saturate((dist - forceZones[forceZoneIndex].minDistance) / range), forceZones[forceZoneIndex].falloffPower); - - float forceIntensity = forceZones[forceZoneIndex].intensity * falloff; - float dampIntensity = forceZones[forceZoneIndex].damping * falloff; - - // tint particles: - float mix = pow(1 - saturate(forceZones[forceZoneIndex].color.a * falloff),deltaTime); - colors[particleIndex] = lerp(forceZones[forceZoneIndex].color, colors[particleIndex], mix); - - // calculate force direction, depending on the type of the force field: - float4 result = FLOAT4_ZERO; - switch (forceZones[forceZoneIndex].type) - { - case ZONETYPE_RADIAL: - result = contacts[i].normal * forceIntensity; - break; - case ZONETYPE_VORTEX: - result = float4(cross(axis.xyz * forceIntensity, contacts[i].normal.xyz),0); - break; - case ZONETYPE_DIRECTIONAL: - result = axis * forceIntensity; - break; - default: - AtomicAddLifeDelta(particleIndex, -forceIntensity * deltaTime); - return; - } - - // calculate damping along force direction: - float4 dampingDir; - switch (forceZones[forceZoneIndex].dampingDir) - { - case DAMPDIR_FORCE: - { - float4 forceDir = normalizesafe(result); - result -= forceDir * dot(velocities[particleIndex], forceDir) * dampIntensity; - } - break; - case DAMPDIR_SURFACE: - result -= contacts[i].normal * dot(velocities[particleIndex], contacts[i].normal) * dampIntensity; - break; - default: - result -= velocities[particleIndex] * dampIntensity; - break; - } - - if (invMasses[particleIndex] > 0) - { - // here we reuse position and orientation delta buffers as velocity and wind buffers for atomic writes: - switch (forceZones[forceZoneIndex].mode) - { - case FORCEMODE_ACCEL: - AtomicAddExternalForceDelta(particleIndex, result / simplexSize / invMasses[particleIndex]); - break; - case FORCEMODE_FORCE: - AtomicAddExternalForceDelta(particleIndex, result / simplexSize); - break; - case FORCEMODE_WIND: - AtomicAddWindDelta(particleIndex, result / simplexSize); - break; - } - } - } - } -} - -[numthreads(128, 1, 1)] -void WriteForceZoneResults (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= particleCount) return; - - int p = activeParticles[i]; - - externalForces[p].xyz += float3(asfloat(deltasAsInt[p].x), - asfloat(deltasAsInt[p].y), - asfloat(deltasAsInt[p].z)); - - wind[p].xyz += float3(asfloat(orientationDeltasAsInt[p].x), - asfloat(orientationDeltasAsInt[p].y), - asfloat(orientationDeltasAsInt[p].z)); - - life[p] += asfloat(deltasAsInt[p].w); - - deltasAsInt[p] = uint4(0, 0, 0, 0); - orientationDeltasAsInt[p] = uint4(0, 0, 0, 0); -} - - diff --git a/Assets/Obi/Resources/Compute/ColliderGrid.compute.meta b/Assets/Obi/Resources/Compute/ColliderGrid.compute.meta deleted file mode 100644 index 6dbc21852..000000000 --- a/Assets/Obi/Resources/Compute/ColliderGrid.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: df152b65921c34856a1ea566d782acc1 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/CollisionMaterial.cginc b/Assets/Obi/Resources/Compute/CollisionMaterial.cginc deleted file mode 100644 index 5bfaa8564..000000000 --- a/Assets/Obi/Resources/Compute/CollisionMaterial.cginc +++ /dev/null @@ -1,109 +0,0 @@ -#ifndef COLLISIONMATERIAL_INCLUDE -#define COLLISIONMATERIAL_INCLUDE - -struct collisionMaterial -{ - float dynamicFriction; - float staticFriction; - float rollingFriction; - float stickiness; - float stickDistance; - int frictionCombine; - int stickinessCombine; - int rollingContacts; -}; - -StructuredBuffer collisionMaterialIndices; -StructuredBuffer collisionMaterials; - -collisionMaterial EmptyCollisionMaterial() -{ - collisionMaterial m; - m.dynamicFriction = 0; - m.staticFriction = 0; - m.rollingFriction = 0; - m.stickiness = 0; - m.stickDistance = 0; - m.frictionCombine = 0; - m.stickinessCombine = 0; - m.rollingContacts = 0; - return m; -} - -collisionMaterial CombineWith(collisionMaterial a, collisionMaterial b) -{ - collisionMaterial result; - int frictionCombineMode = max(a.frictionCombine, b.frictionCombine); - int stickCombineMode = max(a.stickinessCombine, b.stickinessCombine); - - switch (frictionCombineMode) - { - case 0: - default: - result.dynamicFriction = (a.dynamicFriction + b.dynamicFriction) * 0.5f; - result.staticFriction = (a.staticFriction + b.staticFriction) * 0.5f; - result.rollingFriction = (a.rollingFriction + b.rollingFriction) * 0.5f; - break; - - case 1: - result.dynamicFriction = min(a.dynamicFriction, b.dynamicFriction); - result.staticFriction = min(a.staticFriction, b.staticFriction); - result.rollingFriction = min(a.rollingFriction, b.rollingFriction); - break; - - case 2: - result.dynamicFriction = a.dynamicFriction * b.dynamicFriction; - result.staticFriction = a.staticFriction * b.staticFriction; - result.rollingFriction = a.rollingFriction * b.rollingFriction; - break; - - case 3: - result.dynamicFriction = max(a.dynamicFriction, b.dynamicFriction); - result.staticFriction = max(a.staticFriction, b.staticFriction); - result.rollingFriction = max(a.rollingFriction, b.rollingFriction); - break; - } - - switch (stickCombineMode) - { - case 0: - default: - result.stickiness = (a.stickiness + b.stickiness) * 0.5f; - break; - - case 1: - result.stickiness = min(a.stickiness, b.stickiness); - break; - - case 2: - result.stickiness = a.stickiness * b.stickiness; - break; - - case 3: - result.stickiness = max(a.stickiness, b.stickiness); - break; - } - - result.stickDistance = max(a.stickDistance, b.stickDistance); - result.rollingContacts = a.rollingContacts | b.rollingContacts; - return result; -} - -collisionMaterial CombineCollisionMaterials(int materialA, int materialB) -{ - // Combine collision materials: - collisionMaterial combined; - - if (materialA >= 0 && materialB >= 0) - combined = CombineWith(collisionMaterials[materialA], collisionMaterials[materialB]); - else if (materialA >= 0) - combined = collisionMaterials[materialA]; - else if (materialB >= 0) - combined = collisionMaterials[materialB]; - else - combined = EmptyCollisionMaterial(); - - return combined; -} - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/CollisionMaterial.cginc.meta b/Assets/Obi/Resources/Compute/CollisionMaterial.cginc.meta deleted file mode 100644 index adab542ae..000000000 --- a/Assets/Obi/Resources/Compute/CollisionMaterial.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 034a508161c9948969266fd0cbf21988 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/ContactHandling.cginc b/Assets/Obi/Resources/Compute/ContactHandling.cginc deleted file mode 100644 index 1ffbd7fbc..000000000 --- a/Assets/Obi/Resources/Compute/ContactHandling.cginc +++ /dev/null @@ -1,228 +0,0 @@ -#ifndef CONTACTHANDLING_INCLUDE -#define CONTACTHANDLING_INCLUDE - -#include "MathUtils.cginc" -#include "Transform.cginc" - -struct contact // 96 bytes -{ - float4 pointA; // point A, expressed as simplex barycentric coords for simplices, as a solver-space position for colliders. - float4 pointB; // point B, expressed as simplex barycentric coords for simplices, as a solver-space position for colliders. - float4 normal; /**< Normal direction. */ - float4 tangent; /**< Tangent direction. */ - - float dist; /** distance between both colliding entities at the beginning of the timestep.*/ - - float normalLambda; - float tangentLambda; - float bitangentLambda; - float stickLambda; - float rollingFrictionImpulse; - - int bodyA; - int bodyB; -}; - -// 24 bytes -struct contactMasses -{ - float normalInvMassA; - float tangentInvMassA; - float bitangentInvMassA; - - float normalInvMassB; - float tangentInvMassB; - float bitangentInvMassB; -}; - -float4 GetBitangent(in contact c) -{ - return normalizesafe(float4(cross(c.normal.xyz,c.tangent.xyz),0)); -} - -void CalculateBasis(in float4 relativeVelocity, in float4 normal, out float4 tangent) -{ - tangent = normalizesafe(relativeVelocity - dot(relativeVelocity, normal) * normal); -} - -void CalculateContactMassesA(float invMass, - float4 inverseInertiaTensor, - float4 position, - quaternion orientation, - float4 contactPoint, - bool rollingContacts, - float4 normal, - float4 bitangent, - float4 tangent, - out float normalInvMassA, - out float tangentInvMassA, - out float bitangentInvMassA) -{ - // initialize inverse linear masses: - normalInvMassA = tangentInvMassA = bitangentInvMassA = invMass; - - if (rollingContacts) - { - float4 rA = contactPoint - position; - float4x4 solverInertiaA = TransformInertiaTensor(inverseInertiaTensor, orientation); - - normalInvMassA += RotationalInvMass(solverInertiaA, rA, normal); - tangentInvMassA += RotationalInvMass(solverInertiaA, rA, tangent); - bitangentInvMassA += RotationalInvMass(solverInertiaA, rA, bitangent); - } -} - -void CalculateContactMassesB(float invMass, - float4 inverseInertiaTensor, - float4 position, - quaternion orientation, - float4 contactPoint, - bool rollingContacts, - float4 normal, - float4 bitangent, - float4 tangent, - out float normalInvMassB, - out float tangentInvMassB, - out float bitangentInvMassB) -{ - // initialize inverse linear masses: - normalInvMassB = tangentInvMassB = bitangentInvMassB = invMass; - - if (rollingContacts) - { - float4 rB = contactPoint - position; - float4x4 solverInertiaB = TransformInertiaTensor(inverseInertiaTensor, orientation); - - normalInvMassB += RotationalInvMass(solverInertiaB, rB, normal); - tangentInvMassB += RotationalInvMass(solverInertiaB, rB, tangent); - bitangentInvMassB += RotationalInvMass(solverInertiaB, rB, bitangent); - } -} - -void ClearContactMasses(out float normalInvMass, - out float tangentInvMass, - out float bitangentInvMass) -{ - normalInvMass = tangentInvMass = bitangentInvMass = 0; -} - -float SolveAdhesion(inout contact c, float normalMass, float4 posA, float4 posB, float stickDistance, float stickiness, float dt) -{ - float lambdaChange = 0; - - if (normalMass > 0 && stickDistance > 0 && stickiness > 0 && dt > 0) - { - c.dist = dot(posA - posB, c.normal); - - // calculate stickiness position correction: - float constraint = stickiness * (1 - max(c.dist / stickDistance, 0)) * dt; - - // calculate lambda multiplier: - float dlambda = -constraint / normalMass; - - // accumulate lambda: - float newStickinessLambda = min(c.stickLambda + dlambda, 0); - - // calculate lambda change and update accumulated lambda: - lambdaChange = newStickinessLambda - c.stickLambda; - c.stickLambda = newStickinessLambda; - } - - return lambdaChange; -} - -float SolvePenetration(inout contact c, float normalMass, float4 posA, float4 posB, float maxDepenetrationDelta) -{ - float lambdaChange = 0; - - if (normalMass > 0) - { - //project position delta to normal vector: - c.dist = dot(posA - posB, c.normal); - - // calculate max projection distance based on depenetration velocity: - float maxProjection = max(-c.dist - maxDepenetrationDelta, 0); - - // calculate lambda multiplier: - float dlambda = -(c.dist + maxProjection) / normalMass; - - // accumulate lambda: - float newLambda = max(c.normalLambda + dlambda, 0); - - // calculate lambda change and update accumulated lambda: - lambdaChange = newLambda - c.normalLambda; - c.normalLambda = newLambda; - } - - return lambdaChange; -} - -float2 SolveFriction(inout contact c, float tangentMass, float bitangentMass, float4 relativeVelocity, float staticFriction, float dynamicFriction, float dt) -{ - float2 lambdaChange = float2(0,0); - - if (tangentMass > 0 && bitangentMass > 0 && - (dynamicFriction > 0 || staticFriction > 0) && (c.normalLambda > 0 /*|| stickLambda > 0*/)) - { - // calculate delta projection on both friction axis: - float tangentPosDelta = dot(relativeVelocity, c.tangent); - float bitangentPosDelta = dot(relativeVelocity, GetBitangent(c)); - - // calculate friction pyramid limit: - float dynamicFrictionCone = c.normalLambda / dt * dynamicFriction; - float staticFrictionCone = c.normalLambda / dt * staticFriction; - - // tangent impulse: - float tangentLambdaDelta = -tangentPosDelta / tangentMass; - float newTangentLambda = c.tangentLambda + tangentLambdaDelta; - - if (abs(newTangentLambda) > staticFrictionCone) - newTangentLambda = clamp(newTangentLambda, -dynamicFrictionCone, dynamicFrictionCone); - - lambdaChange[0] = newTangentLambda - c.tangentLambda; - c.tangentLambda = newTangentLambda; - - // bitangent impulse: - float bitangentLambdaDelta = -bitangentPosDelta / bitangentMass; - float newBitangentLambda = c.bitangentLambda + bitangentLambdaDelta; - - if (abs(newBitangentLambda) > staticFrictionCone) - newBitangentLambda = clamp(newBitangentLambda, -dynamicFrictionCone, dynamicFrictionCone); - - lambdaChange[1] = newBitangentLambda - c.bitangentLambda; - c.bitangentLambda = newBitangentLambda; - } - - return lambdaChange; -} - -float SolveRollingFriction(inout contact c, - float4 angularVelocityA, - float4 angularVelocityB, - float rollingFriction, - float invMassA, - float invMassB, - inout float4 rolling_axis) -{ - float rolling_impulse_change = 0; - float totalInvMass = invMassA + invMassB; - - if (totalInvMass > 0) - { - rolling_axis = normalizesafe(angularVelocityA - angularVelocityB); - - float vel1 = dot(angularVelocityA,rolling_axis); - float vel2 = dot(angularVelocityB,rolling_axis); - - float relativeVelocity = vel1 - vel2; - - float maxImpulse = c.normalLambda * rollingFriction; - float newRollingImpulse = clamp(c.rollingFrictionImpulse - relativeVelocity / totalInvMass, -maxImpulse, maxImpulse); - rolling_impulse_change = newRollingImpulse - c.rollingFrictionImpulse; - c.rollingFrictionImpulse = newRollingImpulse; - } - - return rolling_impulse_change; -} - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/ContactHandling.cginc.meta b/Assets/Obi/Resources/Compute/ContactHandling.cginc.meta deleted file mode 100644 index 0cf2726cf..000000000 --- a/Assets/Obi/Resources/Compute/ContactHandling.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 28492658e279e4adaab298f430af09a2 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/DeformableTriangles.compute b/Assets/Obi/Resources/Compute/DeformableTriangles.compute deleted file mode 100644 index d26219066..000000000 --- a/Assets/Obi/Resources/Compute/DeformableTriangles.compute +++ /dev/null @@ -1,143 +0,0 @@ -#pragma kernel ResetNormals -#pragma kernel UpdateNormals -#pragma kernel UpdateEdgeNormals -#pragma kernel OrientationFromNormals - -#include "InterlockedUtils.cginc" -#include "MathUtils.cginc" - -StructuredBuffer deformableTriangles; -StructuredBuffer deformableTriangleUVs; - -StructuredBuffer deformableEdges; - -StructuredBuffer renderablePositions; -StructuredBuffer velocities; -StructuredBuffer wind; -StructuredBuffer phases; - -RWStructuredBuffer normals; - -RWStructuredBuffer normalsInt; -RWStructuredBuffer tangentsInt; -RWStructuredBuffer renderableOrientations; - -// Variables set from the CPU -uint normalsCount; -uint triangleCount; -uint edgeCount; - -void AccumulateNormal(in int index, in float4 delta) -{ - InterlockedAddFloat(normalsInt, index, 0, delta.x); - InterlockedAddFloat(normalsInt, index, 1, delta.y); - InterlockedAddFloat(normalsInt, index, 2, delta.z); -} - -void AccumulateTangent(in int index, in float4 delta) -{ - InterlockedAddFloat(tangentsInt, index, 0, delta.x); - InterlockedAddFloat(tangentsInt, index, 1, delta.y); - InterlockedAddFloat(tangentsInt, index, 2, delta.z); - InterlockedAddFloat(tangentsInt, index, 3, delta.w); -} - -[numthreads(128, 1, 1)] -void ResetNormals (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - if (i >= normalsCount) return; - - // leave fluid and softbody normalsInt intact. - if ((phases[i] & (int)PHASE_FLUID) == 0 && normals[i].w >= 0) - { - normals[i] = FLOAT4_ZERO; - tangentsInt[i] = asuint(FLOAT4_ZERO); - } -} - -[numthreads(128, 1, 1)] -void UpdateNormals (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - if (i >= triangleCount) return; - - int p1 = deformableTriangles[i*3]; - int p2 = deformableTriangles[i*3 + 1]; - int p3 = deformableTriangles[i*3 + 2]; - - float2 w1 = deformableTriangleUVs[i*3]; - float2 w2 = deformableTriangleUVs[i*3 + 1]; - float2 w3 = deformableTriangleUVs[i*3 + 2]; - - float4 v1 = renderablePositions[p1]; - float4 v2 = renderablePositions[p2]; - float4 v3 = renderablePositions[p3]; - - float3 m1 = (v2 - v1).xyz; - float3 m2 = (v3 - v1).xyz; - - float2 s = w2 - w1; - float2 t = w3 - w1; - - float4 normal = float4(cross(m1, m2), 0); - float4 tangent = FLOAT4_ZERO; - - float area = s.x * t.y - t.x * s.y; - - if (abs(area) > EPSILON) - { - tangent = float4(t.y * m1.x - s.y * m2.x, - t.y * m1.y - s.y * m2.y, - t.y * m1.z - s.y * m2.z, 0) / area; - } - - AccumulateNormal(p1,normal); - AccumulateNormal(p2,normal); - AccumulateNormal(p3,normal); - - AccumulateTangent(p1,tangent); - AccumulateTangent(p2,tangent); - AccumulateTangent(p3,tangent); -} - -[numthreads(128, 1, 1)] -void UpdateEdgeNormals (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - if (i >= edgeCount) return; - - int p1 = deformableEdges[i * 2]; - int p2 = deformableEdges[i * 2 + 1]; - - float4 edge = renderablePositions[p2] - renderablePositions[p1]; - float4 avgWind = (velocities[p1] + velocities[p2]) * 0.5f - (wind[p1] + wind[p2]) * 0.5f; - float denom = dot(edge, edge); - float4 normal = avgWind - (denom < EPSILON ? FLOAT4_ZERO : edge * dot(avgWind, edge) / denom); - - AccumulateNormal(p1,normal); - AccumulateNormal(p2,normal); -} - -[numthreads(128, 1, 1)] -void OrientationFromNormals (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - if (i >= normalsCount) return; - - if ((phases[i] & (int)PHASE_FLUID) == 0 && normals[i].w >= 0) // not fluid or softbody (no SDF stored)) - { - float4 normal = normals[i]; - float4 tangent = asfloat(tangentsInt[i]); - - if (dot(normal, normal) > EPSILON && - dot(tangent, tangent) > EPSILON) - { - normals[i] = normalizesafe(normal); - tangentsInt[i] = asuint(normalizesafe(tangent)); - - // particle orientation from normal/tangent: - renderableOrientations[i] = q_look_at(normals[i].xyz, asfloat(tangentsInt[i]).xyz); - } - } -} diff --git a/Assets/Obi/Resources/Compute/DeformableTriangles.compute.meta b/Assets/Obi/Resources/Compute/DeformableTriangles.compute.meta deleted file mode 100644 index 6175b9dae..000000000 --- a/Assets/Obi/Resources/Compute/DeformableTriangles.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2444094f2fb2c43cfb9c90b5949f39ec -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/DensityConstraints.compute b/Assets/Obi/Resources/Compute/DensityConstraints.compute deleted file mode 100644 index cf39aa6a4..000000000 --- a/Assets/Obi/Resources/Compute/DensityConstraints.compute +++ /dev/null @@ -1,430 +0,0 @@ -#pragma kernel UpdateDensities -#pragma kernel Apply -#pragma kernel ApplyPositionDeltas - -#pragma kernel CalculateAtmosphere -#pragma kernel ApplyAtmosphere - -#pragma kernel AccumulateSmoothPositions -#pragma kernel AccumulateAnisotropy -#pragma kernel AverageAnisotropy - -#include "MathUtils.cginc" -#include "Quaternion.cginc" -#include "AtomicDeltas.cginc" -#include "FluidKernels.cginc" - -StructuredBuffer neighbors; -StructuredBuffer neighborCounts; - -StructuredBuffer sortedToOriginal; - -StructuredBuffer sortedPositions; -StructuredBuffer sortedPrevPositions; -StructuredBuffer sortedFluidMaterials; -StructuredBuffer sortedFluidInterface; -StructuredBuffer sortedPrincipalRadii; -StructuredBuffer sortedUserData; -StructuredBuffer sortedFluidData_RO; -RWStructuredBuffer sortedFluidData; - -StructuredBuffer prevOrientations; - -StructuredBuffer wind; - -StructuredBuffer fluidMaterials2; -RWStructuredBuffer fluidData; -RWStructuredBuffer positions; -RWStructuredBuffer prevPositions; -RWStructuredBuffer orientations; -RWStructuredBuffer velocities; -RWStructuredBuffer angularVelocities; -RWStructuredBuffer userData; -RWStructuredBuffer normals; - -RWStructuredBuffer massCenters; -RWStructuredBuffer prevMassCenters; - -RWStructuredBuffer vorticity; -RWStructuredBuffer vorticityAccelerations; -RWStructuredBuffer linearAccelerations; -RWStructuredBuffer linearFromAngular; -RWStructuredBuffer angularDiffusion; - -StructuredBuffer normals_RO; -StructuredBuffer fluidData_RO; -StructuredBuffer vorticity_RO; -StructuredBuffer velocities_RO; -StructuredBuffer angularVelocities_RO; -StructuredBuffer linearFromAngular_RO; - -RWStructuredBuffer renderablePositions; -RWStructuredBuffer renderableOrientations; -RWStructuredBuffer renderableRadii; -StructuredBuffer life; - -RWStructuredBuffer anisotropies; -StructuredBuffer dispatchBuffer; - -// Variables set from the CPU -uint maxNeighbors; -float deltaTime; - -[numthreads(128, 1, 1)] -void UpdateDensities (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatchBuffer[3]) return; - - float4 positionA = sortedPositions[i]; - float4 fluidMaterialA = sortedFluidMaterials[i]; - - // self-contribution: - float avgKernel = Poly6(0,fluidMaterialA.x); - float restVolumeA = pow(abs(sortedPrincipalRadii[i].x * 2),3-mode); // in 2D, mode == 1 so amount of dimensions is 2. - float grad = restVolumeA * Spiky(0,fluidMaterialA.x); - - float4 fluidDataA = float4(avgKernel,0,grad,grad*grad); - float4 massCenterA = float4(positionA.xyz, 1) / positionA.w; - float4 prevMassCenterA = float4(sortedPrevPositions[i].xyz, 1) / positionA.w; - float4x4 anisotropyA = (multrnsp4(positionA, sortedPrevPositions[i]) + FLOAT4X4_IDENTITY * 0.001 * sortedPrincipalRadii[i].x * sortedPrincipalRadii[i].x) / positionA.w; - - float4 fluidMaterialB; - float4 positionB; - - // iterate over neighborhood, calculate density and gradient. - uint count = min(maxNeighbors, neighborCounts[i]); - for (uint j = 0; j < count; ++j) - { - int n = neighbors[maxNeighbors * i + j]; - - fluidMaterialB = sortedFluidMaterials[n]; - positionB = sortedPositions[n]; - float dist = length((positionA - positionB).xyz); - - float avgKernel = (Poly6(dist,fluidMaterialA.x) + Poly6(dist,fluidMaterialB.x)) * 0.5f; - - float restVolumeB = pow(abs(sortedPrincipalRadii[n].x * 2),3-mode); - float grad = restVolumeB * Spiky(dist,fluidMaterialA.x); - fluidDataA += float4(restVolumeB / restVolumeA * avgKernel,0,grad,grad*grad); - - // accumulate masses for COMs and moment matrices: - massCenterA += float4(positionB.xyz, 1) / positionB.w; - prevMassCenterA += float4(sortedPrevPositions[n].xyz, 1) / positionB.w; - anisotropyA += (multrnsp4(positionB, sortedPrevPositions[n]) + FLOAT4X4_IDENTITY * 0.001 * sortedPrincipalRadii[n].x * sortedPrincipalRadii[n].x) / positionB.w; - } - - // self particle contribution to density and gradient: - fluidDataA[3] += fluidDataA[2] * fluidDataA[2]; - - // usually, we'd weight density by mass (density contrast formulation) by dividing by invMass. Then, multiply by invMass when - // calculating the state equation (density / restDensity - 1, restDensity = mass / volume, so density * invMass * restVolume - 1 - // We end up with density / invMass * invMass * restVolume - 1, invMass cancels out. - float constraint = max(0, fluidDataA[0] * restVolumeA - 1) * fluidMaterialA.w; - - // calculate lambda: - fluidDataA[1] = -constraint / (positionA.w * fluidDataA[3] + EPSILON); - - // get total neighborhood mass: - float M = massCenterA[3]; - massCenterA /= massCenterA[3]; - prevMassCenterA /= prevMassCenterA[3]; - - // update moment: - anisotropyA -= M * multrnsp4(massCenterA, prevMassCenterA); - - // extract neighborhood orientation delta: - renderableOrientations[i] = ExtractRotation(anisotropyA, QUATERNION_IDENTITY, 5); - - sortedFluidData[i] = fluidDataA; - massCenters[i] = massCenterA; - prevMassCenters[i] = prevMassCenterA; -} - -[numthreads(128, 1, 1)] -void Apply (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatchBuffer[3]) return; - - float restVolumeA = pow(abs(sortedPrincipalRadii[i].x * 2),3-mode); - float4 fluidMaterialA = sortedFluidMaterials[i]; - float4 positionA = sortedPositions[i]; - float4 prevPositionA = sortedPrevPositions[i]; - float4 massCenterA = massCenters[i]; - float lambdaA = sortedFluidData[i][1]; - - float4 fluidMaterialB; - float4 fluidInterfaceB; - float4 massCenterB; - float4 positionB; - - float4 pressureDelta = FLOAT4_ZERO; - float4 viscVortDelta = FLOAT4_ZERO; - - uint count = min(maxNeighbors, neighborCounts[i]); - for (uint j = 0; j < count; ++j) - { - int n = neighbors[maxNeighbors * i + j]; - - fluidMaterialB = sortedFluidMaterials[n]; - massCenterB = massCenters[n]; - positionB = sortedPositions[n]; - - float4 normal = float4((positionA - positionB).xyz,0); - float dist = length(normal); - - float restVolumeB = pow(abs(sortedPrincipalRadii[n].x * 2),3-mode); - - // calculate lambda correction due to polarity (cohesion): - float cAvg = (Cohesion(dist,fluidMaterialA.x * 1.4) + Cohesion(dist,fluidMaterialB.x * 1.4)) * 0.5; - float st = 0.2 * cAvg * (1 - saturate(abs(fluidMaterialA.y - fluidMaterialB.y))) * (fluidMaterialA.y + fluidMaterialB.y) * 0.5; - float scorrA = -st / (positionA.w * sortedFluidData[i][3] + EPSILON); - float scorrB = -st / (positionB.w * sortedFluidData[n][3] + EPSILON); - - float avgGradient = (Spiky(dist,fluidMaterialA.x) + Spiky(dist,fluidMaterialB.x)) * 0.5; - pressureDelta += normal / (dist + EPSILON) * avgGradient * ((lambdaA + scorrA) * restVolumeB + (sortedFluidData[n][1] + scorrB) * restVolumeA); - - // viscosity: - float4 viscGoal = float4(massCenterB.xyz + rotate_vector(renderableOrientations[n], (prevPositionA - prevMassCenters[n]).xyz), 0); - viscVortDelta += (viscGoal - positionA) * min(fluidMaterialB.z, fluidMaterialA.z); - } - - // viscosity: - float4 viscGoal = float4(massCenterA.xyz + rotate_vector(renderableOrientations[i], (prevPositionA - prevMassCenters[i]).xyz), 0); - viscVortDelta += (viscGoal - positionA) * fluidMaterialA.z; - - AddPositionDelta(sortedToOriginal[i], pressureDelta * positionA.w + viscVortDelta / (neighborCounts[i] + 1)); -} - -[numthreads(128, 1, 1)] -void ApplyPositionDeltas (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatchBuffer[3]) return; - - int p = sortedToOriginal[i]; - ApplyPositionDelta(positions, p, 1); - - renderableOrientations[p] = FLOAT4_ZERO; - fluidData[p] = sortedFluidData[i]; -} - -[numthreads(128, 1, 1)] -void CalculateAtmosphere (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatchBuffer[3]) return; - - int originalIndex = sortedToOriginal[i]; - - float4 normal = FLOAT4_ZERO; - float4 linearVel = FLOAT4_ZERO; - - float4 curl = FLOAT4_ZERO; - float4 angularCurl = FLOAT4_ZERO; - - float4 vorticityDiff = FLOAT4_ZERO; - float4 baroclinityDiff = FLOAT4_ZERO; - float velDiff = 0; - - float restVolumeA = pow(abs(sortedPrincipalRadii[i].x * 2),3 - mode); - float4 velocityA = velocities_RO[originalIndex]; - float4 angularVelocityA = angularVelocities_RO[originalIndex]; - float4 positionA = sortedPositions[i]; - float radiiA = sortedFluidMaterials[i].x; - float4 userDataA = sortedUserData[i]; - float invDensityA = positionA.w / sortedFluidData_RO[i].x; // density contrast * mass; - - float radiiB; - float4 positionB; - float4 velocityB; - float4 angularVelocityB; - - uint count = min(maxNeighbors, neighborCounts[i]); - for (uint j = 0; j < count; ++j) - { - int n = neighbors[maxNeighbors * i + j]; - - float restVolumeB = pow(abs(sortedPrincipalRadii[n].x * 2),3 - mode); - radiiB = sortedFluidMaterials[n].x; - positionB = sortedPositions[n]; - - // Can't sort velocities as these are calculated *after* constraint projection. - // maybe a pre-sort step before velocity postprocess? - angularVelocityB = angularVelocities_RO[sortedToOriginal[n]]; - velocityB = velocities_RO[sortedToOriginal[n]]; - - float3 relVort = vorticity_RO[originalIndex].xyz - vorticity_RO[sortedToOriginal[n]].xyz; - float3 relAng = angularVelocityA.xyz - angularVelocityB.xyz; - float3 relVel = velocityA.xyz - velocityB.xyz; - float4 d = float4((positionA - positionB).xyz,0); - float dist = length(d); - - float avgGradient = (Spiky(dist,radiiA) + Spiky(dist,radiiB)) * 0.5f; - float avgKernel = (Poly6(dist,radiiA) + Poly6(dist,radiiB)) * 0.5f; - float avgNorm = (Poly6(0,radiiA) + Poly6(0,radiiB)) * 0.5; - - // property diffusion: - float diffusionSpeed = (sortedFluidInterface[i].w + sortedFluidInterface[n].w) * avgKernel * deltaTime; - float4 userDelta = (sortedUserData[n] - userDataA) * diffusionMask * diffusionSpeed; - userDataA += restVolumeB / restVolumeA * userDelta; - - // calculate color field normal: - float radius = (radiiA + radiiB) * 0.5f; - float4 normGrad = d / (dist + EPSILON); - float4 vgrad = normGrad * avgGradient; - normal += vgrad * radius * restVolumeB; - - // measure relative velocity for foam generation: - float relVelMag = length(relVel) + EPSILON; - velDiff += relVelMag * (1 - dot(relVel / relVelMag, normGrad.xyz)) * (1 - min(1,dist/(radius + EPSILON))); - - // linear vel due to angular velocity: - linearVel += float4(cross(angularVelocityB.xyz, d.xyz) * avgKernel / avgNorm,0); - - // micropolar vorticity curls: - curl += float4(cross(relVel, vgrad.xyz) / positionB.w * invDensityA,0); - angularCurl += float4(cross(relVort, vgrad.xyz) / positionB.w * invDensityA,0); - - // baroclinity and vorticity diffusion: - baroclinityDiff += float4(relAng * avgKernel / positionB.w * invDensityA, 0); - vorticityDiff += float4(relVort * avgKernel / positionB.w * invDensityA, 0); - } - - linearAccelerations[originalIndex] = angularCurl; - vorticityAccelerations[originalIndex] = curl; - linearFromAngular[originalIndex] = linearVel; - - angularDiffusion[originalIndex]._m00_m10_m20_m30 = baroclinityDiff; - angularDiffusion[originalIndex]._m01_m11_m21_m31 = vorticityDiff; - - fluidData[originalIndex].z = velDiff; - normals[originalIndex] = normal; - userData[originalIndex] = userDataA; -} - -[numthreads(128, 1, 1)] -void ApplyAtmosphere (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatchBuffer[3]) return; - - int originalIndex = sortedToOriginal[i]; - - float restVolume = pow(abs(sortedPrincipalRadii[i].x * 2),3 - mode); - - // particles near the surface should experience drag: - float4 velocityDiff = float4((velocities[originalIndex] - wind[originalIndex]).xyz,0); - velocities[originalIndex] -= sortedFluidInterface[i].x * velocityDiff * max(0, 1 - fluidData_RO[originalIndex].x * restVolume) * deltaTime; - - // external ambient pressure along normal: - velocities[originalIndex] += sortedFluidInterface[i].y * normals_RO[originalIndex] * deltaTime; - - // angular acceleration due to baroclinity: - angularVelocities[originalIndex] += float4(fluidMaterials2[originalIndex].z * cross(-normals_RO[originalIndex].xyz, -velocityDiff.xyz),0) * deltaTime; - angularVelocities[originalIndex] -= fluidMaterials2[originalIndex].w * angularDiffusion[originalIndex]._m00_m10_m20_m30; - - // micropolar vorticity: - velocities[originalIndex] += fluidMaterials2[originalIndex].x * linearAccelerations[originalIndex] * deltaTime; - vorticity[originalIndex] += fluidMaterials2[originalIndex].x * (vorticityAccelerations[originalIndex] * 0.5 - vorticity[originalIndex]) * deltaTime; - vorticity[originalIndex] -= fluidMaterials2[originalIndex].y * angularDiffusion[originalIndex]._m01_m11_m21_m31; - - linearAccelerations[originalIndex] = FLOAT4_ZERO; - vorticityAccelerations[originalIndex] = FLOAT4_ZERO; - angularDiffusion[originalIndex] = FLOAT4X4_ZERO; - - // we want to add together linear and angular velocity fields and use result to advect particles without modifying either field: - positions[originalIndex] += linearFromAngular_RO[originalIndex] * deltaTime; - prevPositions[originalIndex] += linearFromAngular_RO[originalIndex] * deltaTime; -} - -[numthreads(128, 1, 1)] -void AccumulateSmoothPositions (uint3 id : SV_DispatchThreadID) -{ - unsigned int p1 = id.x; - if (p1 >= dispatchBuffer[3]) return; - - anisotropies[p1] = FLOAT4X4_ZERO; - float4 renderablePositionA = renderablePositions[p1]; - float radiiA = sortedFluidMaterials[p1].x; - float4 avgPosition = float4(renderablePositionA.xyz, 1);//FLOAT4_ZERO; - - uint count = min(maxNeighbors, neighborCounts[p1]); - for (uint j = 0; j < count; ++j) - { - int p2 = neighbors[maxNeighbors * p1 + j]; - float4 renderablePositionB = renderablePositions[p2]; - - float dist = length((renderablePositionA - renderablePositionB).xyz); - - float avgKernel = (Poly6(dist,radiiA) + Poly6(dist,sortedFluidMaterials[p2].x)) * 0.5; - avgPosition += float4(renderablePositionB.xyz,1) * avgKernel; - } - - anisotropies[p1]._m03_m13_m23_m33 = avgPosition / avgPosition.w; -} - -[numthreads(128, 1, 1)] -void AccumulateAnisotropy (uint3 id : SV_DispatchThreadID) -{ - unsigned int p1 = id.x; - if (p1 >= dispatchBuffer[3]) return; - - float4x4 anisotropyA = anisotropies[p1]; - float4 renderablePositionA = renderablePositions[p1]; - float radiiA = sortedFluidMaterials[p1].x; - - uint count = min(maxNeighbors, neighborCounts[p1]); - for (uint j = 0; j < count; ++j) - { - int p2 = neighbors[maxNeighbors * p1 + j]; - float4 renderablePositionB = renderablePositions[p2]; - - float dist = length((renderablePositionA - renderablePositionB).xyz); - - float avgKernel = (Poly6(dist,radiiA) + Poly6(dist,sortedFluidMaterials[p2].x)) * 0.5; - - float4 r = (renderablePositionB - anisotropyA._m03_m13_m23_m33) * avgKernel; - anisotropyA += multrnsp4(r, r); - } - - anisotropies[p1] = anisotropyA; -} - -[numthreads(128, 1, 1)] -void AverageAnisotropy (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatchBuffer[3]) return; - - int o = sortedToOriginal[i]; - - if (anisotropies[i]._m00 + anisotropies[i]._m11 + anisotropies[i]._m22 > 0.01f) - { - float3 singularValues; - float3x3 u; - EigenSolve((float3x3)anisotropies[i], singularValues, u); - - float maxVal = singularValues[0]; - float3 s = max(singularValues, maxVal / maxAnisotropy) / maxVal * sortedPrincipalRadii[i].x; - - renderableOrientations[o] = q_look_at(u._m02_m12_m22,u._m01_m11_m21); - renderableRadii[o] = float4(s.xyz,1); - } - else - { - float radius = sortedPrincipalRadii[i].x / maxAnisotropy; - renderableOrientations[o] = QUATERNION_IDENTITY; - renderableRadii[o] = float4(radius,radius,radius,1); - fluidData[o].x = 1 / pow(abs(radius * 2),3-mode); // normal volume of an isolated particle. - } - - renderablePositions[o] = lerp(renderablePositions[o],anisotropies[i]._m03_m13_m23_m33,min((maxAnisotropy - 1)/3.0f,1)); - - // inactive particles have radii.w == 0, set it right away for particles killed during this frame - // to keep them from being rendered during this frame instead of waiting for the CPU to do it at the start of next sim step: - float4 radii = renderableRadii[o]; - radii.w = life[o] <= 0 ? 0: radii.w; - renderableRadii[o] = radii; -} diff --git a/Assets/Obi/Resources/Compute/DensityConstraints.compute.meta b/Assets/Obi/Resources/Compute/DensityConstraints.compute.meta deleted file mode 100644 index d170b648b..000000000 --- a/Assets/Obi/Resources/Compute/DensityConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 80856d7c741a940a7bbf0d7d4f472e1d -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/DistanceConstraints.compute b/Assets/Obi/Resources/Compute/DistanceConstraints.compute deleted file mode 100644 index bf507f613..000000000 --- a/Assets/Obi/Resources/Compute/DistanceConstraints.compute +++ /dev/null @@ -1,69 +0,0 @@ -#pragma kernel Project -#pragma kernel Apply - -#include "MathUtils.cginc" -#include "AtomicDeltas.cginc" - -StructuredBuffer particleIndices; -StructuredBuffer restLengths; -StructuredBuffer stiffnesses; -RWStructuredBuffer lambdas; - -RWStructuredBuffer positions; -StructuredBuffer invMasses; - -// Variables set from the CPU -uint activeConstraintCount; -float deltaTime; -float sorFactor; - -[numthreads(128, 1, 1)] -void Project (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int p1 = particleIndices[i * 2]; - int p2 = particleIndices[i * 2 + 1]; - - float w1 = invMasses[p1]; - float w2 = invMasses[p2]; - - // calculate time adjusted compliance - float compliance = stiffnesses[i].x / (deltaTime * deltaTime); - - // calculate position and lambda deltas: - float4 dist = positions[p1] - positions[p2]; - float d = length(dist); - - // calculate constraint value: - float constraint = d - restLengths[i]; - constraint -= max(min(constraint, 0), -stiffnesses[i].y); - - // calculate lambda and position deltas: - float dlambda = (-constraint - compliance * lambdas[i]) / (w1 + w2 + compliance + EPSILON); - float4 delta = dlambda * dist / (d + EPSILON); - - lambdas[i] += dlambda; - - float4 delta1 = delta * w1; - float4 delta2 = -delta * w2; - - AddPositionDelta(p1, delta1); - AddPositionDelta(p2, delta2); -} - -[numthreads(128, 1, 1)] -void Apply (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int p1 = particleIndices[i * 2]; - int p2 = particleIndices[i * 2 + 1]; - - ApplyPositionDelta(positions, p1, sorFactor); - ApplyPositionDelta(positions, p2, sorFactor); -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/DistanceConstraints.compute.meta b/Assets/Obi/Resources/Compute/DistanceConstraints.compute.meta deleted file mode 100644 index 8d55c47ce..000000000 --- a/Assets/Obi/Resources/Compute/DistanceConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4883886c2cc7740e18f906dcf663c1f1 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/DistanceFieldShape.compute b/Assets/Obi/Resources/Compute/DistanceFieldShape.compute deleted file mode 100644 index a101fb5e8..000000000 --- a/Assets/Obi/Resources/Compute/DistanceFieldShape.compute +++ /dev/null @@ -1,101 +0,0 @@ -#include "ColliderDefinitions.cginc" -#include "ContactHandling.cginc" -#include "DistanceFunctions.cginc" -#include "Simplex.cginc" -#include "Bounds.cginc" -#include "SolverParameters.cginc" -#include "Optimization.cginc" - -#pragma kernel GenerateContacts - -StructuredBuffer positions; -StructuredBuffer orientations; -StructuredBuffer principalRadii; -StructuredBuffer velocities; - -StructuredBuffer simplices; - -StructuredBuffer transforms; -StructuredBuffer shapes; - -// distance field data: -StructuredBuffer distanceFieldHeaders; -StructuredBuffer dfNodes; - -StructuredBuffer contactPairs; -StructuredBuffer contactOffsetsPerType; - -RWStructuredBuffer contacts; -RWStructuredBuffer dispatchBuffer; - -StructuredBuffer worldToSolver; - -uint maxContacts; -float deltaTime; - -[numthreads(128, 1, 1)] -void GenerateContacts (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - - // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. - if (i >= dispatchBuffer[11 + 4 * SDF_SHAPE]) return; - - int firstPair = contactOffsetsPerType[SDF_SHAPE]; - int simplexIndex = contactPairs[firstPair + i].x; - int colliderIndex = contactPairs[firstPair + i].y; - shape s = shapes[colliderIndex]; - - if (s.dataIndex < 0) return; - - DistanceField dfShape; - dfShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); - dfShape.s = s; - dfShape.distanceFieldHeaders = distanceFieldHeaders; - dfShape.dfNodes = dfNodes; - - int simplexSize; - int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); - - float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); - float4 simplexPoint; - - SurfacePoint colliderPoint = Optimize(dfShape, positions, orientations, principalRadii, - simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); - - float4 velocity = FLOAT4_ZERO; - float simplexRadius = 0; - for (int j = 0; j < simplexSize; ++j) - { - int particleIndex = simplices[simplexStart + j]; - simplexRadius += principalRadii[particleIndex].x * simplexBary[j]; - velocity += velocities[particleIndex] * simplexBary[j]; - } - - /*float4 rbVelocity = float4.zero; - if (rigidbodyIndex >= 0) - rbVelocity = BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, colliderPoint.point, rigidbodies, solverToWorld);*/ - - //float dAB = dot(simplexPoint - colliderPoint.pos, colliderPoint.normal); - //float vel = dot(velocity /*- rbVelocity*/, colliderPoint.normal); - - //if (vel * deltaTime + dAB <= simplexRadius + s.contactOffset + collisionMargin) - { - uint count = contacts.IncrementCounter(); - if (count < maxContacts) - { - contact c = (contact)0; - - c.pointB = colliderPoint.pos; - c.normal = colliderPoint.normal * dfShape.s.isInverted(); - c.pointA = simplexBary; - c.bodyA = simplexIndex; - c.bodyB = colliderIndex; - - contacts[count] = c; - - InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); - InterlockedMax(dispatchBuffer[3], count + 1); - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/DistanceFieldShape.compute.meta b/Assets/Obi/Resources/Compute/DistanceFieldShape.compute.meta deleted file mode 100644 index 0f2a1664c..000000000 --- a/Assets/Obi/Resources/Compute/DistanceFieldShape.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2391a8c719b4c4193a8be38dcf83e8fd -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/DistanceFunctions.cginc b/Assets/Obi/Resources/Compute/DistanceFunctions.cginc deleted file mode 100644 index e7835bc84..000000000 --- a/Assets/Obi/Resources/Compute/DistanceFunctions.cginc +++ /dev/null @@ -1,374 +0,0 @@ -#ifndef DISTANCEFUNCTIONS_INCLUDE -#define DISTANCEFUNCTIONS_INCLUDE - -#include "SurfacePoint.cginc" -#include "Transform.cginc" -#include "Bounds.cginc" - -struct Sphere : IDistanceFunction -{ - shape s; - transform colliderToSolver; - - void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) - { - float4 center = s.center * colliderToSolver.scale; - float4 pnt = colliderToSolver.InverseTransformPointUnscaled(pos) - center; - - if (s.is2D()) - pnt[2] = 0; - - float radius = s.size.x * cmax(colliderToSolver.scale.xyz); - float distanceToCenter = length(pnt); - - float4 normal = pnt / (distanceToCenter + EPSILON); - - projectedPoint.pos = colliderToSolver.TransformPointUnscaled(center + normal * (radius + s.contactOffset)); - projectedPoint.normal = colliderToSolver.TransformDirection(normal); - projectedPoint.bary = float4(1,0,0,0); - } -}; - -struct Box : IDistanceFunction -{ - shape s; - transform colliderToSolver; - - void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) - { - float4 center = s.center * colliderToSolver.scale; - float4 size = s.size * colliderToSolver.scale * 0.5f; - - // clamp the point to the surface of the box: - float4 pnt = colliderToSolver.InverseTransformPointUnscaled(pos) - center; - - if (s.is2D()) - pnt[2] = 0; - - // get minimum distance for each axis: - float4 distances = size - abs(pnt); - - if (distances.x >= 0 && distances.y >= 0 && distances.z >= 0) - { - projectedPoint.normal = float4(0,0,0,0); - projectedPoint.pos = pnt; - - // find minimum distance in all three axes and the axis index: - if (distances.y < distances.x && distances.y < distances.z) - { - projectedPoint.normal[1] = sign(pnt[1]); - projectedPoint.pos[1] = size[1] * projectedPoint.normal[1]; - } - else if (distances.z < distances.x && distances.z < distances.y) - { - projectedPoint.normal[2] = sign(pnt[2]); - projectedPoint.pos[2] = size[2] * projectedPoint.normal[2]; - } - else - { - projectedPoint.normal[0] = sign(pnt[0]); - projectedPoint.pos[0] = size[0] * projectedPoint.normal[0]; - } - } - else - { - projectedPoint.pos = clamp(pnt, -size, size); - projectedPoint.normal = normalizesafe(pnt - projectedPoint.pos); - } - - projectedPoint.pos = colliderToSolver.TransformPointUnscaled(projectedPoint.pos + center + projectedPoint.normal * s.contactOffset); - projectedPoint.normal = colliderToSolver.TransformDirection(projectedPoint.normal); - projectedPoint.bary = float4(1,0,0,0); - } -}; - -struct Capsule : IDistanceFunction -{ - shape s; - transform colliderToSolver; - - void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) - { - float4 center = s.center * colliderToSolver.scale; - float4 pnt = colliderToSolver.InverseTransformPointUnscaled(pos) - center; - - if (s.is2D()) - pnt[2] = 0; - - int direction = (int)s.size.z; - float height; - float radius; - float4 halfVector = float4(0,0,0,0); - - if (direction == 0) - { - radius = s.size.x * max(colliderToSolver.scale[1], colliderToSolver.scale[2]); - height = max(radius, s.size.y * 0.5f * colliderToSolver.scale[0]); - halfVector[0] = height - radius; - } - else if (direction == 1) - { - radius = s.size.x * max(colliderToSolver.scale[2], colliderToSolver.scale[0]); - height = max(radius, s.size.y * 0.5f * colliderToSolver.scale[1]); - halfVector[1] = height - radius; - } - else - { - radius = s.size.x * max(colliderToSolver.scale[0], colliderToSolver.scale[1]); - height = max(radius, s.size.y * 0.5f * colliderToSolver.scale[2]); - halfVector[2] = height - radius; - } - - float mu; - float4 centerLine = NearestPointOnEdge(-halfVector, halfVector, pnt, mu); - float4 centerToPoint = pnt - centerLine; - float distanceToCenter = length(centerToPoint); - - float4 normal = centerToPoint / (distanceToCenter + EPSILON); - - projectedPoint.pos = colliderToSolver.TransformPointUnscaled(center + centerLine + normal * (radius + s.contactOffset)); - projectedPoint.normal = colliderToSolver.TransformDirection(normal); - projectedPoint.bary = float4(1,0,0,0); - } -}; - -struct BIHNode -{ - int firstChild; /**< index of the first child node. The second one is right after the first.*/ - int start; /**< index of the first element in this node.*/ - int count; /**< amount of elements in this node.*/ - - int axis; /**< axis of the split plane (0,1,2 = x,y,z)*/ - float min_; /**< minimum split plane*/ - float max_; /**< maximum split plane*/ -}; - -struct TriangleMeshHeader -{ - int firstNode; - int nodeCount; - int firstTriangle; - int triangleCount; - int firstVertex; - int vertexCount; -}; - -struct Triangle -{ - int i1; - int i2; - int i3; - aabb b; -}; - -struct TriangleMesh : IDistanceFunction -{ - shape s; - transform colliderToSolver; - - CachedTri tri; - - void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) - { - float4 pnt = colliderToSolver.InverseTransformPointUnscaled(pos); - - if (s.is2D()) - pnt[2] = 0; - - float4 bary = FLOAT4_ZERO; - float4 nearestPoint = NearestPointOnTri(tri, pnt, bary); - float4 normal = normalizesafe(pnt - nearestPoint); - - projectedPoint.pos = colliderToSolver.TransformPointUnscaled(nearestPoint + normal * s.contactOffset); - projectedPoint.normal = colliderToSolver.TransformDirection(normal); - projectedPoint.bary = float4(1,0,0,0); - } - -}; - -struct HeightFieldHeader -{ - int firstSample; - int sampleCount; -}; - -struct Heightfield : IDistanceFunction -{ - shape s; - transform colliderToSolver; - - CachedTri tri; - float4 triNormal; - - void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) - { - float4 pnt = colliderToSolver.InverseTransformPoint(pos); - - float4 bary; - float4 nearestPoint = NearestPointOnTri(tri, pnt, bary); - float4 normal = normalizesafe(pnt - nearestPoint); - - // flip the contact normal if it points below ground: (doesn't work with holes) - //OneSidedNormal(triNormal, normal); - - projectedPoint.pos = colliderToSolver.TransformPoint(nearestPoint + normal * s.contactOffset); - projectedPoint.normal = colliderToSolver.TransformDirection(normal); - projectedPoint.bary = float4(1,0,0,0); - } - -}; - -struct DistanceFieldHeader -{ - int firstNode; - int nodeCount; -}; - -struct DFNode -{ - float4 distancesA; - float4 distancesB; - float4 center; - int firstChild; - - // add 12 bytes of padding to ensure correct memory alignment: - int pad0; - int pad1; - int pad2; - - float4 GetNormalizedPos(float4 position) - { - float4 corner = center - float4(center[3],center[3],center[3],center[3]); - return (position - corner) / (center[3] * 2); - } - - float4 SampleWithGradient(float4 position) - { - float4 nPos = GetNormalizedPos(position); - - // trilinear interpolation of distance: - float4 x = distancesA + (distancesB - distancesA) * nPos[0]; - float2 y = x.xy + (x.zw - x.xy) * nPos[1]; - float dist = y[0] + (y[1] - y[0]) * nPos[2]; - - // gradient estimation: - // x == 0 - float2 a = distancesA.xy + (distancesA.zw - distancesA.xy) * nPos[1]; - float x0 = a[0] + (a[1] - a[0]) * nPos[2]; - - // x == 1 - a = distancesB.xy + (distancesB.zw - distancesB.xy) * nPos[1]; - float x1 = a[0] + (a[1] - a[0]) * nPos[2]; - - // y == 0 - float y0 = x[0] + (x[1] - x[0]) * nPos[2]; - - // y == 1 - float y1 = x[2] + (x[3] - x[2]) * nPos[2]; - - return float4(x1 - x0, y1 - y0, y[1] - y[0], dist); - - } - - int GetOctant(float4 position) - { - int index = 0; - if (position[0] > center[0]) index |= 4; - if (position[1] > center[1]) index |= 2; - if (position[2] > center[2]) index |= 1; - return index; - } -}; - -struct DistanceField : IDistanceFunction -{ - shape s; - transform colliderToSolver; - - StructuredBuffer distanceFieldHeaders; - StructuredBuffer dfNodes; - - float4 DFTraverse(float4 particlePosition, - in DistanceFieldHeader header) - { - int stack[12]; - int stackTop = 0; - - stack[stackTop++] = 0; - - while (stackTop > 0) - { - // pop node index from the stack: - int nodeIndex = stack[--stackTop]; - DFNode node = dfNodes[header.firstNode + nodeIndex]; - - // if the child node exists, recurse down the df octree: - if (node.firstChild >= 0) - stack[stackTop++] = node.firstChild + node.GetOctant(particlePosition); - else - return node.SampleWithGradient(particlePosition); - } - return FLOAT4_ZERO; - } - - void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) - { - float4 pnt = colliderToSolver.InverseTransformPoint(pos); - - if (s.is2D()) - pnt[2] = 0; - - float4 sample = DFTraverse(pnt, distanceFieldHeaders[s.dataIndex]); - float4 normal = float4(normalize(sample.xyz), 0); - - projectedPoint.pos = colliderToSolver.TransformPoint(pnt - normal * (sample[3] - s.contactOffset)); - projectedPoint.normal = colliderToSolver.TransformDirection(normal); - projectedPoint.bary = float4(1,0,0,0); - } -}; - -struct EdgeMeshHeader -{ - int firstNode; - int nodeCount; - int firstEdge; - int edgeCount; - int firstVertex; - int vertexCount; -}; - -struct Edge -{ - int i1; - int i2; - aabb b; -}; - -struct EdgeMesh : IDistanceFunction -{ - shape s; - transform colliderToSolver; - int dataOffset; - - CachedEdge edge; - - void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) - { - float4 pnt = colliderToSolver.InverseTransformPointUnscaled(pos); - - if (s.is2D()) - pnt[2] = 0; - - float mu = 0; - float4 nearestPoint = NearestPointOnEdge(edge, pnt, mu); - float4 normal = normalizesafe(pnt - nearestPoint); - - projectedPoint.pos = colliderToSolver.TransformPointUnscaled(nearestPoint + normal * s.contactOffset); - projectedPoint.normal = colliderToSolver.TransformDirection(normal); - projectedPoint.bary = float4(1,0,0,0); - } - -}; - - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/DistanceFunctions.cginc.meta b/Assets/Obi/Resources/Compute/DistanceFunctions.cginc.meta deleted file mode 100644 index 9159daa26..000000000 --- a/Assets/Obi/Resources/Compute/DistanceFunctions.cginc.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 5b1df68bf523b4106a6b113980018d93 -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/EdgeMeshShape.compute b/Assets/Obi/Resources/Compute/EdgeMeshShape.compute deleted file mode 100644 index da31d3464..000000000 --- a/Assets/Obi/Resources/Compute/EdgeMeshShape.compute +++ /dev/null @@ -1,147 +0,0 @@ -#include "ColliderDefinitions.cginc" -#include "ContactHandling.cginc" -#include "DistanceFunctions.cginc" -#include "Simplex.cginc" -#include "Bounds.cginc" -#include "SolverParameters.cginc" -#include "Optimization.cginc" - -#pragma kernel GenerateContacts - -StructuredBuffer positions; -StructuredBuffer orientations; -StructuredBuffer principalRadii; -StructuredBuffer velocities; - -StructuredBuffer simplices; -StructuredBuffer simplexBounds; // bounding box of each simplex. - -StructuredBuffer transforms; -StructuredBuffer shapes; - -// edge mesh data: -StructuredBuffer edgeMeshHeaders; -StructuredBuffer edgeBihNodes; -StructuredBuffer edges; -StructuredBuffer edgeVertices; - -StructuredBuffer contactPairs; -StructuredBuffer contactOffsetsPerType; - -RWStructuredBuffer contacts; -RWStructuredBuffer dispatchBuffer; - -StructuredBuffer worldToSolver; - -uint maxContacts; -float deltaTime; - -[numthreads(128, 1, 1)] -void GenerateContacts (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - - // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. - if (i >= dispatchBuffer[11 + 4 * EDGE_MESH_SHAPE]) return; - - int firstPair = contactOffsetsPerType[EDGE_MESH_SHAPE]; - int simplexIndex = contactPairs[firstPair + i].x; - int colliderIndex = contactPairs[firstPair + i].y; - shape s = shapes[colliderIndex]; - - if (s.dataIndex < 0) return; - - EdgeMeshHeader header = edgeMeshHeaders[s.dataIndex]; - - EdgeMesh meshShape; - meshShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); - meshShape.s = s; - - // invert a full matrix here to accurately represent collider bounds scale. - float4x4 solverToCollider = Inverse(TRS(meshShape.colliderToSolver.translation.xyz, meshShape.colliderToSolver.rotation, meshShape.colliderToSolver.scale.xyz)); - aabb simplexBound = simplexBounds[simplexIndex].Transformed(solverToCollider); - - float4 marginCS = float4((s.contactOffset + collisionMargin) / meshShape.colliderToSolver.scale.xyz, 0); - - int simplexSize; - int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); - - int stack[12]; - int stackTop = 0; - - stack[stackTop++] = 0; - - while (stackTop > 0) - { - // pop node index from the stack: - int nodeIndex = stack[--stackTop]; - BIHNode node = edgeBihNodes[header.firstNode + nodeIndex]; - - // leaf node: - if (node.firstChild < 0) - { - // check for contact against all triangles: - for (int dataOffset = node.start; dataOffset < node.start + node.count; ++dataOffset) - { - Edge t = edges[header.firstEdge + dataOffset]; - float4 v1 = float4(edgeVertices[header.firstVertex + t.i1],0,0) + s.center; - float4 v2 = float4(edgeVertices[header.firstVertex + t.i2],0,0) + s.center; - aabb edgeBounds; - edgeBounds.FromEdge(v1, v2, marginCS); - - if (edgeBounds.IntersectsAabb(simplexBound, s.is2D())) - { - float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); - float4 simplexPoint; - - meshShape.edge.Cache(v1 * meshShape.colliderToSolver.scale, v2 * meshShape.colliderToSolver.scale); - - SurfacePoint surfacePoint = Optimize(meshShape, positions, orientations, principalRadii, - simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); - - float4 velocity = FLOAT4_ZERO; - float simplexRadius = 0; - for (int j = 0; j < simplexSize; ++j) - { - int particleIndex = simplices[simplexStart + j]; - simplexRadius += principalRadii[particleIndex].x * simplexBary[j]; - velocity += velocities[particleIndex] * simplexBary[j]; - } - - float dAB = dot(simplexPoint - surfacePoint.pos, surfacePoint.normal); - float vel = dot(velocity, surfacePoint.normal); - - if (vel * deltaTime + dAB <= simplexRadius + s.contactOffset + collisionMargin) - { - uint count = contacts.IncrementCounter(); - if (count < maxContacts) - { - contact c = (contact)0; - - c.pointB = surfacePoint.pos; - c.normal = surfacePoint.normal * meshShape.s.isInverted(); - c.pointA = simplexBary; - c.bodyA = simplexIndex; - c.bodyB = colliderIndex; - - contacts[count] = c; - - InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); - InterlockedMax(dispatchBuffer[3], count + 1); - } - } - } - } - } - else // check min and/or max children: - { - // visit min node: - if (simplexBound.min_[node.axis] <= node.min_) - stack[stackTop++] = node.firstChild; - - // visit max node: - if (simplexBound.max_[node.axis] >= node.max_) - stack[stackTop++] = node.firstChild + 1; - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/EdgeMeshShape.compute.meta b/Assets/Obi/Resources/Compute/EdgeMeshShape.compute.meta deleted file mode 100644 index 3f9c16b5b..000000000 --- a/Assets/Obi/Resources/Compute/EdgeMeshShape.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 229868ae412914f11bbfa8c3ab9474c8 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/FluidChunkDefs.cginc b/Assets/Obi/Resources/Compute/FluidChunkDefs.cginc deleted file mode 100644 index 24d1528e7..000000000 --- a/Assets/Obi/Resources/Compute/FluidChunkDefs.cginc +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef FLUIDCHUNKDEFS_INCLUDE -#define FLUIDCHUNKDEFS_INCLUDE - -#define chunkResolution 4u // amount of voxels in width/height/depth - -struct keyvalue -{ - uint key; - uint handle; -}; - -uint3 chunkGridResolution; // height/width/depth of chunk grid -float3 chunkGridOrigin; -float voxelSize; - -uint maxChunks; - -uint VoxelID(uint3 coords) -{ - return coords.x + coords.y * chunkGridResolution.x + coords.z * chunkGridResolution.x * chunkGridResolution.y; -} - -uint hash(uint k) -{ - k ^= k >> 16; - k *= 0x85ebca6b; - k ^= k >> 13; - k *= 0xc2b2ae35; - k ^= k >> 16; - return k % maxChunks; -} - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/FluidChunkDefs.cginc.meta b/Assets/Obi/Resources/Compute/FluidChunkDefs.cginc.meta deleted file mode 100644 index 2f088fd35..000000000 --- a/Assets/Obi/Resources/Compute/FluidChunkDefs.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: bc0e240276e8a42a2ac5a11368e4f7fa -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/FluidFoam.compute b/Assets/Obi/Resources/Compute/FluidFoam.compute deleted file mode 100644 index c81a59b3f..000000000 --- a/Assets/Obi/Resources/Compute/FluidFoam.compute +++ /dev/null @@ -1,482 +0,0 @@ -#pragma kernel SortFluidData - -#pragma kernel Emit -#pragma kernel EmitShape -#pragma kernel CopyAliveCount -#pragma kernel Update -#pragma kernel Integrate -#pragma kernel Copy - -#pragma kernel Sort -#pragma kernel ClearMesh -#pragma kernel BuildMesh - -#include "InterlockedUtils.cginc" -#include "MathUtils.cginc" -#include "GridUtils.cginc" -#include "Simplex.cginc" -#include "Bounds.cginc" -#include "SolverParameters.cginc" -#include "FluidKernels.cginc" - -StructuredBuffer sortedToOriginal; -RWStructuredBuffer sortedPositions; -RWStructuredBuffer sortedVelocities; -RWStructuredBuffer sortedAngularVelocities; -RWStructuredBuffer sortedOrientations; -RWStructuredBuffer sortedRadii; - -StructuredBuffer cellOffsets; // start of each cell in the sorted item array. -StructuredBuffer cellCounts; // number of item in each cell. -StructuredBuffer gridHashToSortedIndex; -StructuredBuffer solverBounds; - -StructuredBuffer fluidSimplices; -StructuredBuffer activeParticles; -StructuredBuffer positions; -StructuredBuffer orientations; -StructuredBuffer velocities; -RWStructuredBuffer angularVelocities; -StructuredBuffer principalRadii; -StructuredBuffer fluidMaterial; -StructuredBuffer fluidData; - -StructuredBuffer inputPositions; // w component is distance traveled inside volume (approximate volumetric lighting). -StructuredBuffer inputVelocities; // w component is buoyancy -StructuredBuffer inputColors; // rgba diffuse color -StructuredBuffer inputAttributes; // currentlifetime, maxlifetime, size, drag - -RWStructuredBuffer outputPositions; -RWStructuredBuffer outputVelocities; -RWStructuredBuffer outputColors; -RWStructuredBuffer outputAttributes; - -RWStructuredBuffer dispatch; -RWByteAddressBuffer vertices; -RWByteAddressBuffer indices; - -// Variables set from the CPU -uint activeParticleCount; -uint maxFoamParticles; -uint particlesToEmit; - -uint emitterShape; -float4 emitterPosition; -quaternion emitterRotation; -float4 emitterSize; - -uint minFluidNeighbors; -float2 vorticityRange; -float2 velocityRange; -float foamGenerationRate; -float potentialIncrease; -float potentialDiffusion; - -float advectionRadius; -float lifetime; -float lifetimeRandom; -float particleSize; -float buoyancy; -float drag; -float airDrag; -float sizeRandom; -float isosurface; -float airAging; -float3 agingOverPopulation; -float4 foamColor; -float4 sortAxis; - -const uint groupWidth; -const uint groupHeight; -const uint stepIndex; - -float deltaTime; -float randomSeed; - -static const int4 quadrantOffsets[] = -{ - int4(0, 0, 0, 1), - int4(1, 0, 0, 1), - int4(0, 1, 0, 1), - int4(1, 1, 0, 1), - int4(0, 0, 1, 1), - int4(1, 0, 1, 1), - int4(0, 1, 1, 1), - int4(1, 1, 1, 1) -}; - -void RandomInCylinder(float seed, float4 pos, float4 dir, float len, float radius, out float4 position, out float3 velocity) -{ - float3 rand = hash31(seed); - - float3 b1 = dir.xyz; - float3 b2 = normalizesafe(cross(b1, float3(1,0,0))); - float3 b3 = cross(b2, b1); - - float theta = rand.y * 2 * PI; - float2 disc = radius * sqrt(rand.x) * float2(cos(theta),sin(theta)); - - velocity = b2 * disc.x + b3 * disc.y; - position = float4(pos.xyz + b1 * len * rand.z + velocity,0); -} - -void RandomInBox(float seed, float4 center, float4 size, out float4 position, out float3 velocity) -{ - float3 rand = hash31(seed); - velocity = (rand - float3(0.5,0.5,0.5)) * size.xyz; - position = float4(center.xyz + velocity,0); -} - -[numthreads(128, 1, 1)] -void SortFluidData (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatch[3]) return; - - int original = sortedToOriginal[i]; - sortedPositions[i] = positions[original]; - sortedVelocities[i] = velocities[original]; - sortedAngularVelocities[i] = float4(angularVelocities[original].xyz,0); - sortedOrientations[i] = orientations[original]; - sortedRadii[i] = principalRadii[original]; -} - -[numthreads(128, 1, 1)] -void EmitShape (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - if (i >= particlesToEmit) return; - - // atomically increment alive particle counter: - uint count; - InterlockedAdd(dispatch[3], 1, count); - - if (count < maxFoamParticles) - { - // initialize foam particle in a random position inside the cylinder spawned by fluid particle: - float3 radialVelocity = float3(0,0,0); - - if (emitterShape == 0) - RandomInCylinder(randomSeed + i, -float4(0,1,0,0)*emitterSize.y*0.5, float4(0,1,0,0), emitterSize.y, max(emitterSize.x, emitterSize.z) * 0.5, outputPositions[count], radialVelocity); - else - RandomInBox(randomSeed + i, FLOAT4_ZERO, emitterSize, outputPositions[count], radialVelocity); - - float2 random = hash21(randomSeed - i); - - // calculate initial life/size/color: - float initialLife = max(0, lifetime - lifetime * random.x * lifetimeRandom); - float initialSize = particleSize - particleSize * random.y * sizeRandom; - - outputPositions[count] = float4(emitterPosition.xyz + rotate_vector(emitterRotation, outputPositions[count].xyz),0); - outputVelocities[count] = float4(0,0,0, buoyancy); - outputColors[count] = foamColor; - outputAttributes[count] = float4(1, 1/initialLife,initialSize,PackFloatRGBA(float4(airAging / 50.0, airDrag, drag, isosurface))); - } -} - -[numthreads(128, 1, 1)] -void Emit (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - if (i >= activeParticleCount) return; - - int p = activeParticles[i]; - - float4 angVel = angularVelocities[p]; - float2 potential = UnpackFloatRG(angVel.w); - - // calculate fluid potential for foam generation: - float vorticityPotential = Remap01(fluidData[p].z, vorticityRange.x, vorticityRange.y); - float velocityPotential = Remap01(length(velocities[p]), velocityRange.x, velocityRange.y); - float potentialDelta = velocityPotential * vorticityPotential * deltaTime * potentialIncrease; - - // update foam potential: - potential.y = saturate(potential.y * potentialDiffusion + potentialDelta); - - // calculate amount of emitted particles - potential.x += foamGenerationRate * potential.y * deltaTime; - int emitCount = (int)potential.x; - potential.x -= emitCount; - - for (int j = 0; j < emitCount; ++j) - { - // atomically increment alive particle counter: - uint count; - InterlockedAdd(dispatch[3], 1, count); - - if (count < maxFoamParticles) - { - // initialize foam particle in a random position inside the cylinder spawned by fluid particle: - float3 radialVelocity; - RandomInCylinder(randomSeed + p + j, positions[p], normalizesafe(velocities[p]), length(velocities[p]) * deltaTime, principalRadii[p].x, outputPositions[count], radialVelocity); - - // calculate initial life/size/color: - float2 random = hash21(randomSeed - p - j); - float initialLife = max(0, potential.y * (lifetime - lifetime * random.x * lifetimeRandom)); - float initialSize = particleSize - particleSize * random.y * sizeRandom; - - outputVelocities[count] = velocities[p] + float4(radialVelocity, buoyancy); - outputColors[count] = foamColor; - outputAttributes[count] = float4(1, 1/initialLife,initialSize,PackFloatRGBA(float4(airAging / 50.0, airDrag, drag, isosurface))); - } - } - - angVel.w = PackFloatRG(potential); - angularVelocities[p] = angVel; -} - -[numthreads(1, 1, 1)] -void CopyAliveCount (uint3 id : SV_DispatchThreadID) -{ - dispatch[0] = dispatch[3] / 128 + 1; - dispatch[8] = dispatch[3]; - dispatch[4] = dispatch[7] = 0; -} - -[numthreads(128, 1, 1)] -void Update (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - if (i >= dispatch[8]) return; - - uint count; - InterlockedAdd(dispatch[3], -1, count); - count--; - - if (count < maxFoamParticles && inputAttributes[count].x > 0) - { - uint aliveCount; - InterlockedAdd(dispatch[7], 1, aliveCount); - InterlockedMax(dispatch[4],(aliveCount + 1) / 128 + 1); - - float4 attributes = inputAttributes[count]; - float4 packedData = UnpackFloatRGBA(attributes.w); - - int offsetCount = (mode == 1) ? 4 : 8; - float4 advectedVelocity = FLOAT4_ZERO; - float4 advectedAngVelocity = FLOAT4_ZERO; - float kernelSum = -packedData.w; - uint neighbourCount = 0; - - float4 diffusePos = inputPositions[count]; - - for (uint m = 1; m <= levelPopulation[0]; ++m) - { - uint l = levelPopulation[m]; - float radius = CellSizeOfLevel(l); - float interactionDist = radius * 0.5; - - float4 cellCoords = floor((diffusePos - solverBounds[0].min_) / radius); - - cellCoords[3] = 0; - if (mode == 1) - cellCoords[2] = 0; - - float4 posInCell = diffusePos - (solverBounds[0].min_ + cellCoords * radius + float4(interactionDist,interactionDist,interactionDist,0)); - int4 quadrant = (int4)sign(posInCell); - quadrant[3] = l; - - for (int j = 0; j < offsetCount; ++j) - { - int4 neighborCoord = (int4)cellCoords + quadrantOffsets[j] * quadrant; - int cellIndex = gridHashToSortedIndex[GridHash(neighborCoord)]; - uint n = cellOffsets[cellIndex]; - uint end = n + cellCounts[cellIndex]; - - for (;n < end; ++n) - { - uint p = fluidSimplices[n]; - - int4 particleCoord = int4(floor((positions[p].xyz - solverBounds[0].min_.xyz)/ radius).xyz,l); - if (any (particleCoord - neighborCoord)) - continue; - - float4 normal = diffusePos - positions[p]; - normal[3] = 0; - if (mode == 1) - normal[2] = 0; - - float d = length(normal); - if (d <= interactionDist) - { - float3 radii = fluidMaterial[p].x * (principalRadii[p].xyz / principalRadii[p].x); - - float4 angVel = float4(cross(angularVelocities[p].xyz, normal.xyz),0); - advectedAngVelocity += angVel * Poly6(d, radii.x) / Poly6(0, radii.x); - - normal.xyz = rotate_vector(q_conj(orientations[p]), normal.xyz) / radii; - d = length(normal.xyz) * radii.x; - - // scale by volume (* 1 / normalized density) - float w = Poly6(d, radii.x) / fluidData[p].x; - - kernelSum += w; - advectedVelocity += float4(velocities[p].xyz,0) * w; - neighbourCount++; - } - } - } - } - - float4 forces = FLOAT4_ZERO; - float velocityScale = 1; - float agingScale = 1 + Remap01(dispatch[8] / (float)maxFoamParticles,agingOverPopulation.x,agingOverPopulation.y) * (agingOverPopulation.z - 1); - - // foam/bubble particle: - if (kernelSum > EPSILON && neighbourCount >= minFluidNeighbors) - { - // advection: - forces = packedData.z / deltaTime * (advectedVelocity / (kernelSum + packedData.w) + advectedAngVelocity - inputVelocities[count]); - - // buoyancy: - forces -= float4(gravity,0) * inputVelocities[count].w * saturate(kernelSum); // TODO: larger particles should rise faster. - - } - else // spray: - { - // gravity: - forces += float4(gravity,0); - - // atmospheric drag/aging: - velocityScale = packedData.y; - agingScale *= packedData.x * 50; - } - - // don't change 4th component, as its used to store buoyancy control parameter. - forces[3] = 0; - - // update particle data: - attributes.x -= attributes.y * deltaTime * agingScale; - //attributes.z += (attributes.y * deltaTime * agingScale) * 0.02; // increase size with age. TODO: maybe do in render shader? - outputAttributes[aliveCount] = attributes; - outputColors[aliveCount] = inputColors[count]; - - // add forces to velocity: - outputPositions[aliveCount] = inputPositions[count]; - outputVelocities[aliveCount] = (inputVelocities[count] + forces * deltaTime) * velocityScale; - } -} - -[numthreads(128, 1, 1)] -void Integrate (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatch[3]) return; - - outputPositions[i].xyz += outputVelocities[i].xyz * deltaTime; -} - -[numthreads(128, 1, 1)] -void Copy (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - - if (i == 0) - { - dispatch[0] = dispatch[4]; - dispatch[3] = dispatch[7]; - } - - if (i >= dispatch[7]) return; - - outputPositions[i] = inputPositions[i]; - outputVelocities[i] = inputVelocities[i]; - outputColors[i] = inputColors[i]; - outputAttributes[i] = inputAttributes[i]; -} - -[numthreads(128,1,1)] -void Sort(uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - - uint hIndex = i & (groupWidth - 1); - uint indexLeft = hIndex + (groupHeight + 1) * (i / groupWidth); - uint rightStepSize = stepIndex == 0 ? groupHeight - 2 * hIndex : (groupHeight + 1) / 2; - uint indexRight = indexLeft + rightStepSize; - - // Exit if out of bounds - if (indexRight >= dispatch[3]) return; - - float4 posLeft = outputPositions[indexLeft]; - float4 posRight = outputPositions[indexRight]; - float4 velLeft = outputVelocities[indexLeft]; - float4 velRight = outputVelocities[indexRight]; - float4 colorLeft = outputColors[indexLeft]; - float4 colorRight = outputColors[indexRight]; - float4 attrLeft = outputAttributes[indexLeft]; - float4 attrRight = outputAttributes[indexRight]; - - // calculate distance to camera: - float distLeft = dot(posLeft.xyz, sortAxis.xyz); - float distRight = dot(posRight.xyz, sortAxis.xyz); - - // Swap entries if order is incorrect - if (distLeft < distRight) - { - outputPositions[indexLeft] = posRight; - outputPositions[indexRight] = posLeft; - outputVelocities[indexLeft] = velRight; - outputVelocities[indexRight] = velLeft; - outputColors[indexLeft] = colorRight; - outputColors[indexRight] = colorLeft; - outputAttributes[indexLeft] = attrRight; - outputAttributes[indexRight] = attrLeft; - } -} - -[numthreads(128, 1, 1)] -void ClearMesh (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= maxFoamParticles) return; - - indices.Store((i*6)<<2, 0); - indices.Store((i*6+1)<<2, 0); - indices.Store((i*6+2)<<2, 0); - - indices.Store((i*6+3)<<2, 0); - indices.Store((i*6+4)<<2, 0); - indices.Store((i*6+5)<<2, 0); -} - -[numthreads(128, 1, 1)] -void BuildMesh (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatch[3]) return; - - // <<2 = multiply by 4 to get byte address, since a float/int is 4 bytes in size. - - // particle data is the same for all 4 vertices: - for (uint v = i*4; v < i*4 + 4; ++v) - { - int base = v*19; - - // pos - vertices.Store4(base<<2, asuint(float4(inputPositions[i].xyz, 1))); - - // color: - vertices.Store4((base+7)<<2, asuint( inputColors[i] )); - - // velocity and attributes - vertices.Store4((base+11)<<2, asuint( float4(inputVelocities[i].xyz, inputPositions[i].w))); - vertices.Store4((base+15)<<2, asuint( inputAttributes[i] )); - } - - //different offset for each vertex: - int base = i*4; - vertices.Store3((base*19 + 4)<<2, asuint(float3(1,1,0))); - vertices.Store3(((base+1)*19 + 4)<<2, asuint(float3(-1,1,0))); - vertices.Store3(((base+2)*19 + 4)<<2, asuint(float3(-1,-1,0))); - vertices.Store3(((base+3)*19 + 4)<<2, asuint(float3(1,-1,0))); - - // indices: - indices.Store((i*6)<<2, asuint(i*4+2)); - indices.Store((i*6+1)<<2, asuint(i*4+1)); - indices.Store((i*6+2)<<2, asuint(i*4)); - - indices.Store((i*6+3)<<2, asuint(i*4+3)); - indices.Store((i*6+4)<<2, asuint(i*4+2)); - indices.Store((i*6+5)<<2, asuint(i*4)); -} diff --git a/Assets/Obi/Resources/Compute/FluidFoam.compute.meta b/Assets/Obi/Resources/Compute/FluidFoam.compute.meta deleted file mode 100644 index 2fcb5eafe..000000000 --- a/Assets/Obi/Resources/Compute/FluidFoam.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a8c6735ba651f4c808f068c3b99bca04 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/FluidFoamCollisions.compute b/Assets/Obi/Resources/Compute/FluidFoamCollisions.compute deleted file mode 100644 index b41a5773c..000000000 --- a/Assets/Obi/Resources/Compute/FluidFoamCollisions.compute +++ /dev/null @@ -1,467 +0,0 @@ -#pragma kernel SolveDiffuseContacts - -#include "GridUtils.cginc" -#include "CollisionMaterial.cginc" -#include "ContactHandling.cginc" -#include "ColliderDefinitions.cginc" -#include "Rigidbody.cginc" -#include "Simplex.cginc" -#include "MathUtils.cginc" -#include "Bounds.cginc" -#include "SolverParameters.cginc" -#include "Optimization.cginc" -#include "DistanceFunctions.cginc" - -#define MAX_CONTACTS_PER_DIFFUSE 32 - -StructuredBuffer inputPositions; -StructuredBuffer inputAttributes; -RWStructuredBuffer inputVelocities; - -StructuredBuffer aabbs; -StructuredBuffer transforms; -StructuredBuffer shapes; - -StructuredBuffer sortedColliderIndices; -StructuredBuffer cellOffsets; -StructuredBuffer cellCounts; - -// triangle mesh data: -StructuredBuffer triangleMeshHeaders; -StructuredBuffer bihNodes; -StructuredBuffer triangles; -StructuredBuffer vertices; - -// edge mesh data: -StructuredBuffer edgeMeshHeaders; -StructuredBuffer edgeBihNodes; -StructuredBuffer edges; -StructuredBuffer edgeVertices; - -// heightfield data: -StructuredBuffer heightFieldHeaders; -StructuredBuffer heightFieldSamples; - -// distance field data: -StructuredBuffer distanceFieldHeaders; -StructuredBuffer dfNodes; - -StructuredBuffer solverToWorld; -StructuredBuffer worldToSolver; - -StructuredBuffer dispatch; - -float radiusScale; -uint colliderCount; // amount of colliders in the grid. -uint cellsPerCollider; // max amount of cells a collider can be inserted into. Typically this is 8. -int shapeTypeCount; // number of different collider shapes, ie: box, sphere, sdf, etc. -float deltaTime; - - -void CollideMesh(int colliderIndex, int threadIndex, aabb particleBounds, inout float4 pos, float radius) -{ - shape s = shapes[colliderIndex]; - if (s.dataIndex < 0) return; - - TriangleMeshHeader header = triangleMeshHeaders[s.dataIndex]; - - TriangleMesh meshShape; - meshShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); - meshShape.s = shapes[colliderIndex]; - - // invert a full matrix here to accurately represent collider bounds scale. - float4x4 solverToCollider = Inverse(TRS(meshShape.colliderToSolver.translation.xyz, meshShape.colliderToSolver.rotation, meshShape.colliderToSolver.scale.xyz)); - aabb simplexBound = particleBounds.Transformed(solverToCollider); // TODO: this is wrong, passed bounds are in world space! - - float4 marginCS = float4((s.contactOffset + collisionMargin) / meshShape.colliderToSolver.scale.xyz, 0); - - int stack[12]; - int stackTop = 0; - - stack[stackTop++] = 0; - - while (stackTop > 0) - { - // pop node index from the stack: - int nodeIndex = stack[--stackTop]; - BIHNode node = bihNodes[header.firstNode + nodeIndex]; - - // leaf node: - if (node.firstChild < 0) - { - // check for contact against all triangles: - for (int dataOffset = node.start; dataOffset < node.start + node.count; ++dataOffset) - { - Triangle t = triangles[header.firstTriangle + dataOffset]; - float4 v1 = float4(vertices[header.firstVertex + t.i1], 0); - float4 v2 = float4(vertices[header.firstVertex + t.i2], 0); - float4 v3 = float4(vertices[header.firstVertex + t.i3], 0); - aabb triangleBounds; - triangleBounds.FromTriangle(v1, v2, v3, marginCS); - - if (triangleBounds.IntersectsAabb(simplexBound, s.is2D())) - { - meshShape.tri.Cache(v1 * meshShape.colliderToSolver.scale, v2 * meshShape.colliderToSolver.scale, v3 * meshShape.colliderToSolver.scale); - - SurfacePoint surf; - meshShape.Evaluate(pos, float4(radius, radius, radius, 0), QUATERNION_IDENTITY, surf); - - float dist = dot(pos - surf.pos, surf.normal) - radius; - if (dist < 0) - pos = surf.pos + surf.normal * radius; - } - } - } - else // check min and/or max children: - { - // visit min node: - if (simplexBound.min_[node.axis] <= node.min_) - stack[stackTop++] = node.firstChild; - - // visit max node: - if (simplexBound.max_[node.axis] >= node.max_) - stack[stackTop++] = node.firstChild + 1; - } - } -} - -void CollideEdgeMesh(int colliderIndex, int threadIndex, aabb particleBounds, inout float4 pos, float radius) -{ - shape s = shapes[colliderIndex]; - if (s.dataIndex < 0) return; - - EdgeMeshHeader header = edgeMeshHeaders[s.dataIndex]; - - EdgeMesh meshShape; - meshShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); - meshShape.s = shapes[colliderIndex]; - - // invert a full matrix here to accurately represent collider bounds scale. - float4x4 solverToCollider = Inverse(TRS(meshShape.colliderToSolver.translation.xyz, meshShape.colliderToSolver.rotation, meshShape.colliderToSolver.scale.xyz)); - aabb simplexBound = particleBounds.Transformed(solverToCollider); // TODO: this is wrong, passed bounds are in world space! - //simplexBound.Expand(0.02); - - float4 marginCS = float4((s.contactOffset + collisionMargin) / meshShape.colliderToSolver.scale.xyz, 0); - - int stack[12]; - int stackTop = 0; - - stack[stackTop++] = 0; - - while (stackTop > 0) - { - // pop node index from the stack: - int nodeIndex = stack[--stackTop]; - BIHNode node = edgeBihNodes[header.firstNode + nodeIndex]; - - // leaf node: - if (node.firstChild < 0) - { - // check for contact against all triangles: - for (int dataOffset = node.start; dataOffset < node.start + node.count; ++dataOffset) - { - Edge t = edges[header.firstEdge + dataOffset]; - float4 v1 = float4(edgeVertices[header.firstVertex + t.i1],0,0) + s.center; - float4 v2 = float4(edgeVertices[header.firstVertex + t.i2],0,0) + s.center; - aabb edgeBounds; - edgeBounds.FromEdge(v1, v2, marginCS); - - if (edgeBounds.IntersectsAabb(simplexBound, s.is2D())) - { - meshShape.edge.Cache(v1 * meshShape.colliderToSolver.scale, v2 * meshShape.colliderToSolver.scale); - - SurfacePoint surf; - meshShape.Evaluate(pos, float4(radius, radius, radius, 0), QUATERNION_IDENTITY, surf); - - float dist = dot(pos - surf.pos, surf.normal) - radius; - if (dist < 0) - pos = surf.pos + surf.normal * radius; - } - } - } - else // check min and/or max children: - { - // visit min node: - if (simplexBound.min_[node.axis] <= node.min_) - stack[stackTop++] = node.firstChild; - - // visit max node: - if (simplexBound.max_[node.axis] >= node.max_) - stack[stackTop++] = node.firstChild + 1; - } - } -} - -void CollideHeightmap(int colliderIndex, int threadIndex, aabb particleBounds, inout float4 pos, float radius) -{ - shape s = shapes[colliderIndex]; - if (s.dataIndex < 0) return; - - HeightFieldHeader header = heightFieldHeaders[s.dataIndex]; - - Heightfield fieldShape; - fieldShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); - fieldShape.s = s; - - // invert a full matrix here to accurately represent collider bounds scale. - float4x4 solverToCollider = Inverse(TRS(fieldShape.colliderToSolver.translation.xyz, fieldShape.colliderToSolver.rotation, fieldShape.colliderToSolver.scale.xyz)); - aabb simplexBound = particleBounds.Transformed(solverToCollider); - - int resolutionU = (int)s.center.x; - int resolutionV = (int)s.center.y; - - // calculate terrain cell size: - float cellWidth = s.size.x / (resolutionU - 1); - float cellHeight = s.size.z / (resolutionV - 1); - - // calculate particle bounds min/max cells: - int2 min_ = int2((int)floor(simplexBound.min_[0] / cellWidth), (int)floor(simplexBound.min_[2] / cellHeight)); - int2 max_ = int2((int)floor(simplexBound.max_[0] / cellWidth), (int)floor(simplexBound.max_[2] / cellHeight)); - - for (int su = min_[0]; su <= max_[0]; ++su) - { - if (su >= 0 && su < resolutionU - 1) - { - for (int sv = min_[1]; sv <= max_[1]; ++sv) - { - if (sv >= 0 && sv < resolutionV - 1) - { - // calculate neighbor sample indices: - int csu1 = clamp(su + 1, 0, resolutionU - 1); - int csv1 = clamp(sv + 1, 0, resolutionV - 1); - - // sample heights: - float h1 = heightFieldSamples[header.firstSample + sv * resolutionU + su] * s.size.y; - float h2 = heightFieldSamples[header.firstSample + sv * resolutionU + csu1] * s.size.y; - float h3 = heightFieldSamples[header.firstSample + csv1 * resolutionU + su] * s.size.y; - float h4 = heightFieldSamples[header.firstSample + csv1 * resolutionU + csu1] * s.size.y; - - if (h1 < 0) continue; - h1 = abs(h1); - h2 = abs(h2); - h3 = abs(h3); - h4 = abs(h4); - - float min_x = su * s.size.x / (resolutionU - 1); - float max_x = csu1 * s.size.x / (resolutionU - 1); - float min_z = sv * s.size.z / (resolutionV - 1); - float max_z = csv1 * s.size.z / (resolutionV - 1); - - // ------contact against the first triangle------: - float4 v1 = float4(min_x, h3, max_z, 0); - float4 v2 = float4(max_x, h4, max_z, 0); - float4 v3 = float4(min_x, h1, min_z, 0); - - fieldShape.tri.Cache(v1, v2, v3); - fieldShape.triNormal.xyz = normalizesafe(cross((v2 - v1).xyz, (v3 - v1).xyz)); - - SurfacePoint surf; - fieldShape.Evaluate(pos, float4(radius, radius, radius, 0), QUATERNION_IDENTITY, surf); - - float dist = dot(pos - surf.pos, surf.normal) - radius; - if (dist < 0) - pos = surf.pos + surf.normal * radius; - - // ------contact against the second triangle------: - v1 = float4(min_x, h1, min_z, 0); - v2 = float4(max_x, h4, max_z, 0); - v3 = float4(max_x, h2, min_z, 0); - - fieldShape.tri.Cache(v1, v2, v3); - fieldShape.triNormal.xyz = normalizesafe(cross((v2 - v1).xyz, (v3 - v1).xyz)); - - fieldShape.Evaluate(pos, float4(radius, radius, radius, 0), QUATERNION_IDENTITY, surf); - - dist = dot(pos - surf.pos, surf.normal) - radius; - if (dist < 0) - pos = surf.pos + surf.normal * radius; - } - } - } - } -} - -[numthreads(128, 1, 1)] -void SolveDiffuseContacts (uint3 id : SV_DispatchThreadID) -{ - unsigned int threadIndex = id.x; - if (threadIndex >= dispatch[3]) return; - - uint cellCount = colliderCount * cellsPerCollider; - int candidateCount = 0; - uint candidates[MAX_CONTACTS_PER_DIFFUSE]; - - float4 predPos = inputPositions[threadIndex] + inputVelocities[threadIndex] * deltaTime; - float radius = inputAttributes[threadIndex].z * radiusScale; - - // max size of the particle bounds in cells: - int4 maxSize = int4(3,3,3,3); - - aabb b; - b.FromEdge(inputPositions[threadIndex], predPos, radius); - b.Transform(solverToWorld[0]); - - // build a list of candidate colliders: - for (uint m = 1; m <= levelPopulation[0]; ++m) - { - uint l = levelPopulation[m]; - float cellSize = CellSizeOfLevel(l); - - int4 minCell = floor(b.min_ / cellSize); - int4 maxCell = floor(b.max_ / cellSize); - maxCell = minCell + min(maxCell - minCell, maxSize); - - for (int x = minCell[0]; x <= maxCell[0]; ++x) - { - for (int y = minCell[1]; y <= maxCell[1]; ++y) - { - // for 2D mode, project each cell at z == 0 and check them too. This way we ensure 2D colliders - // (which are inserted in cells with z == 0) are accounted for in the broadphase. - if (mode == 1) - { - uint flatCellIndex = GridHash(int4(x,y,0,l)); - uint cellStart = cellOffsets[flatCellIndex]; - uint cellCount = cellCounts[flatCellIndex]; - - // iterate through colliders in the neighbour cell - for (uint n = cellStart; n < cellStart + cellCount; ++n) - { - // sorted insert into the candidates list: - if (candidateCount < MAX_CONTACTS_PER_DIFFUSE) - candidates[candidateCount++] = sortedColliderIndices[n] / cellsPerCollider; - } - } - - for (int z = minCell[2]; z <= maxCell[2]; ++z) - { - uint flatCellIndex = GridHash(int4(x,y,z,l)); - uint cellStart = cellOffsets[flatCellIndex]; - uint cellCount = cellCounts[flatCellIndex]; - - // iterate through colliders in the neighbour cell - for (uint n = cellStart; n < cellStart + cellCount; ++n) - { - if (candidateCount < MAX_CONTACTS_PER_DIFFUSE) - candidates[candidateCount++] = sortedColliderIndices[n] / cellsPerCollider; - } - - } - } - } - } - - //evaluate candidates and create contacts: - if (candidateCount > 0) - { - - // insert sort: - for (int k = 1; k < candidateCount; ++k) - { - uint key = candidates[k]; - int j = k - 1; - - while (j >= 0 && candidates[j] > key) - candidates[j + 1] = candidates[j--]; - - candidates[j + 1] = key; - } - - // make sure each candidate only shows up once in the list: - int first = 0, contactCount = 0; - while(++first != candidateCount) - { - if (candidates[contactCount] != candidates[first]) - candidates[++contactCount] = candidates[first]; - } - contactCount++; - - // solve contacts: - for (int i = 0; i < contactCount; i++) - { - int c = candidates[i]; - - aabb colliderBoundsWS = aabbs[c]; - - if (b.IntersectsAabb(colliderBoundsWS, mode == 1)) - { - - switch(shapes[c].type) - { - case SPHERE_SHAPE: - { - SurfacePoint surf; - Sphere sphereShape; - sphereShape.colliderToSolver = worldToSolver[0].Multiply(transforms[c]); - sphereShape.s = shapes[c]; - sphereShape.Evaluate(predPos, float4(radius, radius, radius, 0), QUATERNION_IDENTITY, surf); - - float dist = dot(predPos - surf.pos, surf.normal) - radius; - if (dist < 0) predPos = surf.pos + surf.normal * radius; - } - break; - - case BOX_SHAPE: - { - SurfacePoint surf; - Box boxShape; - boxShape.colliderToSolver = worldToSolver[0].Multiply(transforms[c]); - boxShape.s = shapes[c]; - boxShape.Evaluate(predPos, float4(radius, radius, radius, 0), QUATERNION_IDENTITY, surf); - - float dist = dot(predPos - surf.pos, surf.normal) - radius; - if (dist < 0) predPos = surf.pos + surf.normal * radius; - } - break; - - case CAPSULE_SHAPE: - { - SurfacePoint surf; - Capsule capShape; - capShape.colliderToSolver = worldToSolver[0].Multiply(transforms[c]); - capShape.s = shapes[c]; - capShape.Evaluate(predPos, float4(radius, radius, radius, 0), QUATERNION_IDENTITY, surf); - - float dist = dot(predPos - surf.pos, surf.normal) - radius; - if (dist < 0) predPos = surf.pos + surf.normal * radius; - } - break; - - case TRIANGLE_MESH_SHAPE: - { - CollideMesh(c, threadIndex, b, predPos, radius); - } - break; - - case EDGE_MESH_SHAPE: - { - CollideEdgeMesh(c, threadIndex, b, predPos, radius); - } - break; - - case HEIGHTMAP_SHAPE: - { - CollideHeightmap(c, threadIndex, b, predPos, radius); - } - break; - - case SDF_SHAPE: - { - SurfacePoint surf; - DistanceField dfShape; - dfShape.colliderToSolver = worldToSolver[0].Multiply(transforms[c]); - dfShape.s = shapes[c]; - dfShape.distanceFieldHeaders = distanceFieldHeaders; - dfShape.dfNodes = dfNodes; - dfShape.Evaluate(predPos, float4(radius, radius, radius, 0), QUATERNION_IDENTITY, surf); - - float dist = dot(predPos - surf.pos, surf.normal) - radius; - if (dist < 0) predPos = surf.pos + surf.normal * radius; - } - break; - } - } - } - } - - inputVelocities[threadIndex].xyz = (predPos.xyz - inputPositions[threadIndex].xyz) / deltaTime; -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/FluidFoamCollisions.compute.meta b/Assets/Obi/Resources/Compute/FluidFoamCollisions.compute.meta deleted file mode 100644 index f67b3366a..000000000 --- a/Assets/Obi/Resources/Compute/FluidFoamCollisions.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 62b650760f2294d0c9c68247f21c7009 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/FluidFoamDensity.compute b/Assets/Obi/Resources/Compute/FluidFoamDensity.compute deleted file mode 100644 index 9ff41c337..000000000 --- a/Assets/Obi/Resources/Compute/FluidFoamDensity.compute +++ /dev/null @@ -1,199 +0,0 @@ -#pragma kernel Clear -#pragma kernel InsertInGrid -#pragma kernel SortByGrid -#pragma kernel ComputeDensity -#pragma kernel ApplyDensity - -#include "InterlockedUtils.cginc" -#include "MathUtils.cginc" -#include "GridUtils.cginc" -#include "Simplex.cginc" -#include "Bounds.cginc" -#include "SolverParameters.cginc" -#include "FluidKernels.cginc" - -RWStructuredBuffer sortedToOriginal; - -RWStructuredBuffer offsetInCell; -RWStructuredBuffer cellStart; // start of each cell in the sorted item array. -RWStructuredBuffer cellCounts; // number of item in each cell. -StructuredBuffer solverBounds; - -RWStructuredBuffer inputPositions; -RWStructuredBuffer inputVelocities; -RWStructuredBuffer inputColors; -RWStructuredBuffer sortedPositions; -RWStructuredBuffer sortedVelocities; -RWStructuredBuffer fluidData; - -StructuredBuffer dispatch; - -// each emitter has its own global radius, not possible to have foam emitters interact with each other. -float particleRadius; -float smoothingRadius; -float surfaceTension; -float pressure; -float viscosity; -float4 volumeLightDirection; - -float deltaTime; - -[numthreads(128, 1, 1)] -void Clear (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= maxCells) return; - - // clear all cell counts to zero, and cell offsets to invalid. - cellStart[i] = INVALID; - cellCounts[i] = 0; -} - -[numthreads(128, 1, 1)] -void InsertInGrid (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatch[3]) return; - - uint cellIndex = GridHash(floor(inputPositions[i] / smoothingRadius).xyz); - InterlockedAdd(cellCounts[cellIndex],1,offsetInCell[i]); -} - -[numthreads(128, 1, 1)] -void SortByGrid (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatch[3]) return; - - uint cellIndex = GridHash(floor(inputPositions[i] / smoothingRadius).xyz); - - uint sortedIndex = cellStart[cellIndex] + offsetInCell[i]; - sortedPositions[sortedIndex] = inputPositions[i]; - sortedVelocities[sortedIndex] = inputVelocities[i]; - sortedToOriginal[sortedIndex] = i; -} - -[numthreads(128, 1, 1)] -void ComputeDensity (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatch[3]) return; - - float4 positionA = inputPositions[i]; - - int3 cellCoords = floor(inputPositions[i] / smoothingRadius).xyz; - - // self-contribution: - float avgKernel = Poly6(0,smoothingRadius); - float restVolume = pow(abs(particleRadius * 2),3-mode); - float grad = restVolume * Spiky(0,smoothingRadius); - - float4 fluidDataA = float4(avgKernel,0,grad,grad*grad); - - float4 positionB; - - // iterate over neighborhood, calculate density and gradient. - for (int k = 0; k < 27; ++k) - { - int3 neighborCoords = cellCoords + cellNeighborhood[k].xyz; - uint cellIndex = GridHash(neighborCoords); - uint start = cellStart[cellIndex]; - - for (uint j = 0; j < cellCounts[cellIndex]; ++j) - { - positionB = sortedPositions[start + j]; - float3 r = (positionA - positionB).xyz; - - if (mode == 1) - r[2] = 0; - - float dist = length(r); - - if (dist > smoothingRadius || any(neighborCoords - floor(positionB / smoothingRadius).xyz)) continue; - - float grad = restVolume * Spiky(dist,smoothingRadius); - fluidDataA += float4(Poly6(dist,smoothingRadius),0,grad,grad*grad); - } - } - - // self particle contribution to density and gradient: - fluidDataA[3] += fluidDataA[2] * fluidDataA[2]; - - // usually, we'd weight density by mass (density contrast formulation) by dividing by invMass. Then, multiply by invMass when - // calculating the state equation (density / restDensity - 1, restDensity = mass / volume, so density * invMass * restVolume - 1 - // We end up with density / invMass * invMass * restVolume - 1, invMass cancels out. - float constraint = max(0, fluidDataA[0] * restVolume - 1); - - // calculate lambda: - fluidDataA[1] = -constraint / (fluidDataA[3] + EPSILON); - - fluidData[i] = fluidDataA; -} - -[numthreads(128, 1, 1)] -void ApplyDensity (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatch[3]) return; - - int3 cellCoords = floor(inputPositions[i] / smoothingRadius).xyz; - - float restVolume = pow(abs(particleRadius * 2),3-mode); - float neighborhoodVolume = pow(abs(smoothingRadius * 2),3-mode); - float4 positionA = inputPositions[i]; - float4 velocityA = inputVelocities[i]; - float4 fluidDataA = fluidData[i]; - - float4 fluidDataB; - float4 positionB; - float4 velocityB; - - float4 pressureDelta = FLOAT4_ZERO; - float4 viscAccel = FLOAT4_ZERO; - float AO = 0; - - for (int k = 0; k < 27; ++k) - { - int3 neighborCoords = cellCoords + cellNeighborhood[k].xyz; - uint cellIndex = GridHash(neighborCoords); - uint start = cellStart[cellIndex]; - - for (uint j = 0; j < cellCounts[cellIndex]; ++j) - { - positionB = sortedPositions[start + j]; - velocityB = sortedVelocities[start + j]; - fluidDataB = fluidData[sortedToOriginal[start + j]]; - - float4 r = float4((positionA - positionB).xyz,0); - - if (mode == 1) - r[2] = 0; - - float dist = length(r); - - - if (dist > smoothingRadius || any(neighborCoords - floor(positionB / smoothingRadius).xyz)) continue; - - float kern = Poly6(dist,smoothingRadius); - float cAvg = Cohesion(dist,smoothingRadius); - - // XSPH viscosity: - float4 relVel = float4((velocityB - velocityA).xyz,0); - viscAccel += viscosity * relVel * kern * restVolume; - - float st = 0.2 * cAvg * surfaceTension; - float scorrA = - st / (fluidDataA[3] + EPSILON); - float scorrB = - st / (fluidDataB[3] + EPSILON); - pressureDelta += r / (dist + EPSILON) * Spiky(dist,smoothingRadius) * ((fluidDataA[1] + scorrA) + (fluidDataB[1] + scorrB)) * restVolume; - - float4 v = r / (dist + EPSILON); - AO += max(0, dot (volumeLightDirection.xyz, v.xyz) ) / (1 + dist) * restVolume; - } - } - - float4 delta = pressure * pressureDelta; - - // modify position and velocity: - inputPositions[i] = float4((positionA + delta).rgb, 2*PI * AO.x / neighborhoodVolume); - inputVelocities[i] += float4(delta.xyz / deltaTime + viscAccel.xyz,0); -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/FluidFoamDensity.compute.meta b/Assets/Obi/Resources/Compute/FluidFoamDensity.compute.meta deleted file mode 100644 index 247a584ac..000000000 --- a/Assets/Obi/Resources/Compute/FluidFoamDensity.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2332ee3ce70e9447d8d13b5b67ac8e6c -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/FluidKernels.cginc b/Assets/Obi/Resources/Compute/FluidKernels.cginc deleted file mode 100644 index deac80421..000000000 --- a/Assets/Obi/Resources/Compute/FluidKernels.cginc +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef FLUIDKERNELS_INCLUDE -#define FLUIDKERNELS_INCLUDE - -#include "SolverParameters.cginc" - -float Poly6(float r, float h) -{ - float h2 = h * h; - float h4 = h2 * h2; - float h8 = h4 * h4; - - float rl = min(r, h); - float hr = h2 - rl * rl; - - if (mode) - return 4.0f / PI / h8 * hr * hr * hr; - else - return 315.0f / (64.0 * PI) / (h8 * h) * hr * hr * hr; -} - -float Spiky(float r, float h) -{ - float h2 = h * h; - float h4 = h2 * h2; - - float rl = min(r, h); - float hr = h - rl; - - if (mode) - return -30.0f / PI / (h4 * h) * hr * hr; - else - return -45.0f / PI / (h4 * h2) * hr * hr; -} - -float Cohesion(float r, float h) -{ - return cos(min(r, h) * 3 * PI / (2 * h)); -} - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/FluidKernels.cginc.meta b/Assets/Obi/Resources/Compute/FluidKernels.cginc.meta deleted file mode 100644 index 5915645b0..000000000 --- a/Assets/Obi/Resources/Compute/FluidKernels.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 53c4eeee7bd2141deb8d1179555a1920 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/FluidMeshChunks.compute b/Assets/Obi/Resources/Compute/FluidMeshChunks.compute deleted file mode 100644 index da444b47b..000000000 --- a/Assets/Obi/Resources/Compute/FluidMeshChunks.compute +++ /dev/null @@ -1,205 +0,0 @@ -#pragma kernel ClearChunks -#pragma kernel ClearGrid -#pragma kernel InsertChunks -#pragma kernel SortParticles -#pragma kernel FindPopulatedLevels - -#include "MathUtils.cginc" -#include "Bounds.cginc" -#include "GridUtils.cginc" -#include "FluidChunkDefs.cginc" -#include "SolverParameters.cginc" - -// particle data: -StructuredBuffer particleIndices; -StructuredBuffer positions; -StructuredBuffer velocities; -StructuredBuffer angularVelocities; -StructuredBuffer principalRadii; -StructuredBuffer fluidMaterial; -StructuredBuffer fluidData; -StructuredBuffer orientations; -StructuredBuffer colors; -StructuredBuffer normals; - -RWStructuredBuffer sortedPositions; -RWStructuredBuffer sortedPrincipalRadii; -RWStructuredBuffer sortedVelocities; -RWStructuredBuffer sortedOrientations; -RWStructuredBuffer sortedColors; - -// particle grid data: -StructuredBuffer solverBounds; -StructuredBuffer gridHashToSortedIndex; -RWStructuredBuffer cellOffsets; // start of each cell in the sorted item array. -RWStructuredBuffer cellCounts; // number of item in each cell. -RWStructuredBuffer offsetInCell; // for each item, offset within its the cell. - -// voxel data: -RWStructuredBuffer chunkCoords; // for each chunk, spatial coordinates. -RWStructuredBuffer hashtable; // size: maxChunks entries. - -RWStructuredBuffer dispatchBuffer; - -uint firstParticle; -uint particleCount; -float isosurface; -float smoothing; - -uint AllocateChunk(uint3 coords) -{ - uint key = VoxelID(coords); - uint slot = hash(key); - - [allow_uav_condition] - for (uint i = 0; i < maxChunks; ++i) // at most, check the entire table. - { - uint prev; - InterlockedCompareExchange(hashtable[slot].key, INVALID, key, prev); - - // allocate new chunk: - if (prev == INVALID) - { - InterlockedAdd(dispatchBuffer[4],1,hashtable[slot].handle); - chunkCoords[hashtable[slot].handle] = coords; - return hashtable[slot].handle; - } - // could not allocate chunk, since it already exists. - else if (prev == key) - { - return INVALID; - } - // collision, try next slot. - else - slot = (slot + 1) % maxChunks; - } - return INVALID; // could not allocate chunk, not enough space. -} - -[numthreads(128, 1, 1)] -void ClearChunks (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= maxChunks) - return; - - // clear all chunks: - keyvalue k; - k.key = 0xffffffff; - k.handle = 0xffffffff; - hashtable[i] = k; -} - -[numthreads(128, 1, 1)] -void ClearGrid (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= maxCells) - return; - - if (i == 0) - { - for (int l = 0; l <= GRID_LEVELS; ++l) - levelPopulation[l] = 0; - } - - // clear all cell counts to zero, and cell offsets to invalid. - cellOffsets[i] = INVALID; - cellCounts[i] = 0; -} - -[numthreads(128, 1, 1)] -void InsertChunks (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= particleCount) return; - - int p = particleIndices[firstParticle + i]; - - // ignore inactive particles: - if (principalRadii[p].w <= 0.5f) - return; - - // calculate particle cell index: - int level = GridLevelForSize(fluidMaterial[p].x); - float cellSize = CellSizeOfLevel(level); - int4 cellCoord = int4(floor((positions[p].xyz - solverBounds[0].min_.xyz) / cellSize),level); - - // if the solver is 2D, project to the z = 0 cell. - if (mode == 1) cellCoord[2] = 0; - - // since cell hashes are morton-sorted during collision detection, here we also get sorted cells - // as long as particle cellCoords are reasonably similar - // (won't be the exact same since we use renderable positions instead of positions) - uint cellIndex = gridHashToSortedIndex[GridHash(cellCoord)]; - - // insert simplex in cell: - InterlockedAdd(cellCounts[cellIndex],1, offsetInCell[p]); - - // atomically increase this level's population by one: - InterlockedAdd(levelPopulation[1 + level],1); - - //in 3D, only particles near the surface should spawn chunks: - //if (mode == 0 && dot(normals[p],normals[p]) < 0.0001f) - //return; - - // expand aabb by voxel size, since boundary voxels (at a chunks' 0 X/Y/Z) can't be triangulated. - float radius = fluidMaterial[p].x + voxelSize; - - // calculate particle chunk span. - float chunkSize = chunkResolution * voxelSize; - uint3 minCell = floor((positions[p].xyz - radius - chunkGridOrigin) / chunkSize); - uint3 maxCell = floor((positions[p].xyz + radius - chunkGridOrigin) / chunkSize); - - if (mode == 1) - minCell[2] = maxCell[2] = 0; - - for (uint x = minCell[0]; x <= maxCell[0]; ++x) - { - for (uint y = minCell[1]; y <= maxCell[1]; ++y) - { - for (uint z = minCell[2]; z <= maxCell[2]; ++z) - { - AllocateChunk(uint3(x, y, z)); - } - } - } -} - -[numthreads(128, 1, 1)] -void SortParticles (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - if (i >= particleCount) return; - - int p = particleIndices[firstParticle + i]; - - // ignore inactive particles: - if (principalRadii[p].w <= 0.5f) - return; - - // calculate particle cell index: - int level = GridLevelForSize(fluidMaterial[p].x); - float cellSize = CellSizeOfLevel(level); - int4 cellCoord = int4(floor((positions[p].xyz - solverBounds[0].min_.xyz) / cellSize),level); - - // if the solver is 2D, project to the z = 0 cell. - if (mode == 1) cellCoord[2] = 0; - - uint cellIndex = gridHashToSortedIndex[GridHash(cellCoord)]; - - // find final sorted index: - uint gridIndex = cellOffsets[cellIndex] + offsetInCell[p]; - - // write particle data in sorted order: - sortedPositions[gridIndex] = float4(positions[p].xyz, 1 / fluidData[p].x); - sortedPrincipalRadii[gridIndex] = fluidMaterial[p].x * (principalRadii[p] / principalRadii[p].x); - sortedVelocities[gridIndex] = float4(velocities[p].xyz, (asuint(angularVelocities[p].w) & 0x0000ffff) / 65535.0); - sortedOrientations[gridIndex] = orientations[p]; - sortedColors[gridIndex] = colors[p]; -} - - - diff --git a/Assets/Obi/Resources/Compute/FluidMeshChunks.compute.meta b/Assets/Obi/Resources/Compute/FluidMeshChunks.compute.meta deleted file mode 100644 index e70344d36..000000000 --- a/Assets/Obi/Resources/Compute/FluidMeshChunks.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 745eb95f8ca884ea6830b3ca14ee05a0 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/FluidSurfaceMeshBuilding.compute b/Assets/Obi/Resources/Compute/FluidSurfaceMeshBuilding.compute deleted file mode 100644 index d4e04809e..000000000 --- a/Assets/Obi/Resources/Compute/FluidSurfaceMeshBuilding.compute +++ /dev/null @@ -1,604 +0,0 @@ -#pragma kernel SampleSDF -#pragma kernel CalculateSurface -#pragma kernel Triangulate -#pragma kernel Smoothing - -#pragma kernel FixArgsBuffer -#pragma kernel FillIndirectDrawBuffer - -#include "MathUtils.cginc" -#include "Bounds.cginc" -#include "GridUtils.cginc" -#include "FluidChunkDefs.cginc" -#include "FluidKernels.cginc" -#include "SolverParameters.cginc" -#include "NormalCompression.cginc" - -/* - * y z - * ^ / - * | - * 6----7 - * /| /| - * 2----3 | - * | 4--|-5 - * |/ |/ - * 0----1 --> x - * - */ - - /* - * static Vector2Int[] cubeEdges = - * { - * new Vector2Int(7,3), 0 - * new Vector2Int(7,5), 1 - * new Vector2Int(7,6), 2 - * - * new Vector2Int(6,4), 3 // x - * new Vector2Int(4,5), 4 - * new Vector2Int(5,1), 5 - * - * new Vector2Int(1,3), 6 // y - * new Vector2Int(3,2), 7 - * new Vector2Int(2,6), 8 - * - * new Vector2Int(4,0), 9 // z - * new Vector2Int(2,0), 10 - * new Vector2Int(1,0) 11 - * }; - */ - -static const int4 faceNeighborEdges[] = -{ - int4(0,1,5,6), - int4(0,2,7,8), - int4(4,5,9,11), - int4(3,8,9,10), - int4(6,7,10,11), - int4(1,2,3,4) -}; - -static const float3 corners[] = -{ - float3(0, 0, 0), // 0 - float3(1, 0, 0), // 1 - float3(0, 1, 0), // 2 - float3(1, 1, 0), // 3 - float3(0, 0, 1), // 4 - float3(1, 0, 1), // 5 - float3(0, 1, 1), // 6 - float3(1, 1, 1) // 7 -}; - -static const int3 quadNeighborIndices[] = -{ - int3(1, 3, 2), // x - int3(4, 5, 1), // y - int3(2, 6, 4), // z -}; - -static const int oppositeFaces[] = -{ - 7, //0 - 6, //1 - 5, //2 - 4, //3 - 3, //4 - 2, //5 - 1 //6 -}; - -static const int3 quadWindingOrder[] = { - int3(0, 1 ,2), - int3(2, 1 ,0) -}; - -struct indirectDrawIndexedArgs -{ - uint indexCountPerInstance; - uint instanceCount; - uint startIndex; - uint baseVertexIndex; - uint startInstance; -}; - -// particle grid data: -StructuredBuffer solverBounds; -StructuredBuffer cellOffsets; // start of each cell in the sorted item array. -StructuredBuffer cellCounts; // number of item in each cell. -StructuredBuffer gridHashToSortedIndex; - -StructuredBuffer sortedPositions; -StructuredBuffer sortedVelocities; -StructuredBuffer sortedPrincipalRadii; -StructuredBuffer sortedColors; -StructuredBuffer sortedOrientations; - -// voxel data: -StructuredBuffer chunkCoords; // for each chunk, spatial coordinates. -StructuredBuffer hashtable; // size: maxChunks entries. -RWStructuredBuffer voxelToVertex; // for each voxel, index into the vertices array in case the voxel spawns a vertex, INVALID otherwise. -RWStructuredBuffer vertexAdjacency; // indices of adjacent face voxels for each voxel. -RWStructuredBuffer voxelVelocities; // for each voxel, fluid velocity value. We are reusing the same ComputeBuffer used for vertexAdjacency. - -// edge LUTs -StructuredBuffer edges; -StructuredBuffer edgeTable; - -// mesh data: -RWStructuredBuffer verts; -RWStructuredBuffer outputVerts; -RWStructuredBuffer colors; -RWStructuredBuffer velocities; -RWStructuredBuffer quads; - -RWStructuredBuffer dispatchBuffer; -RWStructuredBuffer dispatchBuffer2; -RWStructuredBuffer indirectBuffer; - -uint currentBatch; - -float isosurface; -uint descentIterations; -float descentIsosurface; -float descentSpeed; -float smoothing; -float bevel; -uint dispatchMultiplier; -uint countMultiplier; -uint instanceCount; - -uint voxelCoordToOffset(int3 coord) -{ - if (mode == 1) - return (int)EncodeMorton2((uint2)coord.xy); - else return (int)EncodeMorton3((uint3)coord.xyz); -} - -uint LookupChunk(int3 coords) -{ - uint key = VoxelID(coords); - uint slot = hash(key); - - for (uint i = 0; i < maxChunks; ++i) // at most, check the entire table. - { - if (hashtable[slot].key == key) - { - return hashtable[slot].handle; - } - if (hashtable[slot].key == INVALID) - { - return INVALID; - } - - slot = (slot + 1) % maxChunks; - } - return INVALID; -} - -uint GetVoxelIndex(int3 chunkCoords, int3 voxelCoords, int voxelsInChunk) -{ - int3 mask = voxelCoords < 0 ? -1 : voxelCoords / chunkResolution; - uint chunk = LookupChunk(chunkCoords + mask); - - return chunk == INVALID ? INVALID : chunk * voxelsInChunk + voxelCoordToOffset(nfmod(voxelCoords, chunkResolution)); -} - -[numthreads(128, 1, 1)] -void SampleSDF (uint3 id : SV_DispatchThreadID) // one thread per voxel, -{ - uint i = id.x; - if (i >= dispatchBuffer[3]) return; - - int voxelsInChunk = (int)pow(chunkResolution, 3 - mode); // 64 voxels in 3D, 16 in 2D. - - // calculate chunk index: - int chunkIndex = i / voxelsInChunk; - - // get offset of voxel within chunk: - int cornerOffset = i - chunkIndex * voxelsInChunk; - int3 voxelCoords; - - if (mode == 1) - voxelCoords = (int3)DecodeMorton2((uint)cornerOffset); - else - voxelCoords = (int3)DecodeMorton3((uint)cornerOffset); - - int3 cornerCoords= chunkCoords[chunkIndex] * chunkResolution + voxelCoords; - - // calculate sampling position: - float3 samplePos = chunkGridOrigin + cornerCoords * voxelSize; - - float dist = isosurface; - float4 color = FLOAT4_ZERO; - float4 velocity = FLOAT4_ZERO; - - for (uint m = 1; m <= levelPopulation[0]; ++m) - { - uint l = levelPopulation[m]; - float cellSize = CellSizeOfLevel(l); - - int3 cell = floor((samplePos - solverBounds[0].min_.xyz) / cellSize); // TODO: not necessary to subtract solverBounds? - int3 minCell = cell - 1; - int3 maxCell = cell + 1; - - if (mode == 1) - minCell[2] = maxCell[2] = 0; - - for (int x = minCell[0]; x <= maxCell[0]; ++x) - { - for (int y = minCell[1]; y <= maxCell[1]; ++y) - { - for (int z = minCell[2]; z <= maxCell[2]; ++z) - { - int4 neighborCoord = int4(x, y, z, l); - int cellIndex = gridHashToSortedIndex[GridHash(neighborCoord)]; - uint n = cellOffsets[cellIndex]; - uint end = n + cellCounts[cellIndex]; - - for (;n < end; ++n) - { - float3 radii = sortedPrincipalRadii[n].xyz; - - // due to hash collisions, two neighboring cells might map to the same - // hash bucket, and we'll add the same set of particles twice to the neighbors list. - // So we only consider particles that have the same spatial coordinates as the cell. - uint level = GridLevelForSize(radii.x); - float cellSize = CellSizeOfLevel(level); - int4 particleCoord = int4(floor((sortedPositions[n].xyz - solverBounds[0].min_.xyz)/ cellSize).xyz,level); - - if (any (particleCoord - neighborCoord)) - continue; - - float3 normal = samplePos - sortedPositions[n].xyz; - if (mode == 1) - normal[2] = 0; - - // only update distance if within anisotropic kernel radius: - float maxDistance = radii.x + voxelSize * 1.42f; - float r = dot(normal, normal); - if (r <= maxDistance * maxDistance) - { - normal = rotate_vector(q_conj(sortedOrientations[n]), normal.xyz) / radii; - float d = length(normal) * radii.x; - - // sortedPositions.w is volume (1/normalized density): - float w = sortedPositions[n].w * Poly6(d,radii.x); - - dist -= w; - - // tigther smoothing kernel for color and velocities: - float w2 = 1-saturate(r / (radii.x * radii.x)); - color += float4(sortedColors[n].xyz * w2, w2); - velocity += sortedVelocities[n] * w2; // 4th component is length(angularVel), vorticity intensity. - } - - } - } - } - } - } - - verts[i].x = dist; - verts[i].y = PackFloatRGBA(color/color.w); - - voxelVelocities[i] = velocity / color.w; -} - -float EvaluateSDF (float4 distancesA, float4 distancesB, in float3 nPos, out float3 normal) -{ - // trilinear interpolation of distance: - float4 x = distancesA + (distancesB - distancesA) * nPos[0]; - float2 y = x.xy + (x.zw - x.xy) * nPos[1]; - - // gradient estimation: - // x == 0 - float2 a = distancesA.xy + (distancesA.zw - distancesA.xy) * nPos[1]; - float x0 = a[0] + (a[1] - a[0]) * nPos[2]; - - // x == 1 - a = distancesB.xy + (distancesB.zw - distancesB.xy) * nPos[1]; - float x1 = a[0] + (a[1] - a[0]) * nPos[2]; - - // y == 0 - float y0 = x[0] + (x[1] - x[0]) * nPos[2]; - - // y == 1 - float y1 = x[2] + (x[3] - x[2]) * nPos[2]; - - normal = normalize(float3(x1 - x0, y1 - y0, y[1] - y[0])); - return y[0] + (y[1] - y[0]) * nPos[2]; -} - -[numthreads(128, 1, 1)] -void CalculateSurface (uint3 id : SV_DispatchThreadID) // once per voxel. -{ - uint i = id.x; - if (i >= dispatchBuffer[3]) return; - - int voxelsInChunk = (int)pow(chunkResolution, 3 - mode); // 64 voxels in 3D, 16 in 2D. - int verticesPerVoxel = mode == 1 ? 4 : 8; // 8 vertices in 3D, 4 in 2D. - float3 dimensionMask = mode == 1 ? float3(1, 1, 0) : float3(1, 1, 1); - int edgeCount = mode == 1 ? 4 : 12; - - // initialize voxel with invalid vertex: - voxelToVertex[i] = INVALID; - - // calculate chunk index: - int chunkIndex = i / voxelsInChunk; - - // get offset of voxel within chunk: - int voxelOffset = i - chunkIndex * voxelsInChunk; - int3 voxelCoords; - - if (mode == 1) - voxelCoords = (int3)DecodeMorton2((uint)voxelOffset); - else - voxelCoords = (int3)DecodeMorton3((uint)voxelOffset); - - // get samples at voxel corners: - float samples[8]; - float4 vcolor[8]; - float4 vvelo[8]; - uint cornerMask = 0; - - // initialize all samples to zero (last 4 samples aren't written to in 2D). - int j = 0; - for (j = 0; j < 8; ++j) - samples[j] = 0; - - for (j = 0; j < verticesPerVoxel; ++j) - { - uint v = GetVoxelIndex(chunkCoords[chunkIndex], voxelCoords + corners[j], voxelsInChunk); - - if (v == INVALID) - return; - else - { - samples[j] = verts[v].x; - vcolor[j] = UnpackFloatRGBA(verts[v].y); - vvelo[j] = voxelVelocities[v]; - cornerMask |= samples[j] >= 0 ? (1 << j) : 0; - } - } - - // store cornerMask: - verts[i].z = asfloat(cornerMask); - - int edgeMask = edgeTable[cornerMask]; - - // if the voxel does not intersect the surface, return: - if ((mode == 1 && cornerMask == 0xf) || - (mode == 0 && edgeMask == 0)) - return; - - // calculate vertex position using edge crossings: - float3 normalizedPos = float3(0,0,0); - float4 velocity = FLOAT4_ZERO; - float4 color = FLOAT4_ZERO; - int intersections = 0; - - for (j = 0; j < edgeCount; ++j) - { - if((edgeMask & (1 << j)) == 0) - continue; - - int2 e = edges[j]; - float t = -samples[e.x] / (samples[e.y] - samples[e.x]); - - normalizedPos += lerp(corners[e.x],corners[e.y],t); - color += lerp(vcolor[e.x], vcolor[e.y], t); - velocity += lerp(vvelo[e.x], vvelo[e.y], t); - intersections++; - } - - // intersections will always be > 0 in 3D: - if (intersections > 0) - { - normalizedPos /= intersections; - color /= intersections; - velocity /= intersections; - } - else - { - normalizedPos = float3(0.5f, 0.5f, -bevel); - color = (vcolor[0] + vcolor[1] + vcolor[2] + vcolor[3]) * 0.25f; - velocity = (vvelo[0] + vvelo[1] + vvelo[2] + vvelo[3]) * 0.25f; - } - - float4 distancesA = float4(samples[0], samples[4], samples[2], samples[6]); - float4 distancesB = float4(samples[1], samples[5], samples[3], samples[7]); - - // gradient descent: - float3 normal; - for(uint k = 0; k < descentIterations; ++k) - { - float d = EvaluateSDF(distancesA, distancesB, normalizedPos, normal); - normalizedPos -= descentSpeed * normal * (d + isosurface + descentIsosurface); - } - - // final normal evaluation: - EvaluateSDF(distancesA, distancesB, normalizedPos, normal); - - // modify normal in 2D mode: - if (mode) - normal = lerp(float3(0,0,-1),float3(normal.xy,-normal.z),bevel); // no bevel, flat normals - - // Append vertex: - InterlockedAdd(dispatchBuffer[4],1,voxelToVertex[i]); - verts[voxelToVertex[i]].w = i; - - float3 voxelCorner = chunkGridOrigin + (float3)(chunkCoords[chunkIndex] * chunkResolution + voxelCoords) * voxelSize; - outputVerts[voxelToVertex[i]] = float4(voxelCorner * dimensionMask + normalizedPos * voxelSize, encode(normal)); - colors[voxelToVertex[i]] = color; - velocities[voxelToVertex[i]] = velocity; -} - -[numthreads(128, 1, 1)] -void Triangulate (uint3 id : SV_DispatchThreadID) -{ - uint v0 = id.x; - if (v0 >= dispatchBuffer[3]) return; - - int voxelsInChunk = (int)pow(chunkResolution, 3 - mode); // 64 voxels in 3D, 16 in 2D. - int quadCount = 3 - mode * 2; // 3 quads in 3D, 1 in 2D. - int adjacentCount = 6 - mode * 2; // 6 adjacent voxels in 3D, 4 in 2D. - - // get index of the voxel that spawned this vertex: - uint i = verts[v0].w; - - // calculate chunk index and look up coordinates: - int chunkIndex = i / voxelsInChunk; - - // get offset of voxel within chunk: - int voxelOffset = i - chunkIndex * voxelsInChunk; - int3 voxelCoords; - - if (mode == 1) - voxelCoords = (int3)DecodeMorton2((uint)voxelOffset); - else - voxelCoords = (int3)DecodeMorton3((uint)voxelOffset); - - uint cornerMask = asuint(verts[i].z); - int edgeMask = edgeTable[cornerMask]; - - // get winding order using last bit of cornermask, which indicates corner sign: - // in 2D, cornerMask >> 7 is always 0, so we get the second winding order. - int3 windingOrder = (cornerMask >> 7) ? quadWindingOrder[0] : quadWindingOrder[1]; - - // Retrieve adjacent voxels: - int j; - uint adjacent[6]; - for (j = 0; j < adjacentCount; ++j) - adjacent[j] = GetVoxelIndex(chunkCoords[chunkIndex], voxelCoords + corners[j + 1], voxelsInChunk); - - // Iterate over all potential quads, append those needed: - for (j = 0; j < quadCount; ++j) - { - // if the edge is not crossing the surface, skip it (3D only) - if (mode == 0 && (edgeMask & (1 << j)) == 0) - continue; - - // calculate final neighbor indices: - uint3 neighbors = uint3(quadNeighborIndices[j][windingOrder[0]]-1, - quadNeighborIndices[j][windingOrder[1]]-1, - quadNeighborIndices[j][windingOrder[2]]-1); - - // get vertex indices for all voxels involved: - uint v1 = voxelToVertex[adjacent[neighbors[0]]]; - uint v2 = voxelToVertex[adjacent[neighbors[1]]]; - uint v3 = voxelToVertex[adjacent[neighbors[2]]]; - - // if any of the vertices is invalid, skip the quad: - if (v1 == INVALID || v2 == INVALID || v3 == INVALID) - continue; - - // append a new quad: - uint baseIndex; - InterlockedAdd(dispatchBuffer2[4],1,baseIndex); - baseIndex *= 6; - - // flip edge if necessary, to always use the shortest diagonal: - float3 diag1 = outputVerts[v0].xyz - outputVerts[v2].xyz; - float3 diag2 = outputVerts[v1].xyz - outputVerts[v3].xyz; - if (dot(diag1,diag1) > dot(diag2,diag2) * 1.1) - { - quads[baseIndex] = v1; - quads[baseIndex+1] = v2; - quads[baseIndex+2] = v3; - - quads[baseIndex+3] = v0; - quads[baseIndex+4] = v1; - quads[baseIndex+5] = v3; - } - else - { - quads[baseIndex] = v0; - quads[baseIndex+1] = v1; - quads[baseIndex+2] = v2; - - quads[baseIndex+3] = v3; - quads[baseIndex+4] = v0; - quads[baseIndex+5] = v2; - } - } - - // Move adjacent voxel in Z axis to last position, so that 2D adjacent voxels are the first 4. - adjacent[5] = adjacent[3]; - adjacent[2] = GetVoxelIndex(chunkCoords[chunkIndex], voxelCoords + int3(0, -1, 0), voxelsInChunk); - adjacent[3] = GetVoxelIndex(chunkCoords[chunkIndex], voxelCoords + int3(-1, 0, 0), voxelsInChunk); - adjacent[4] = GetVoxelIndex(chunkCoords[chunkIndex], voxelCoords + int3(0, 0, -1), voxelsInChunk); - - // initialize vertex adjacency to INVALID. - for (j = 0; j < 6; ++j) - vertexAdjacency[v0*6 + j] = INVALID; - - // Determine adjacent surface voxels for smoothing: - bool isAdjacent; - for (j = 0; j < adjacentCount; ++j) - { - if (adjacent[j] != INVALID) - { - // adjacent if this does not intersect the surface or both intersect the surface. - isAdjacent = (edgeMask == 0 || edgeTable[asuint(verts[adjacent[j]].z)] != 0) && - - // in 3D mode, it should also intersect any of the face edges to be considered adjacent: - (mode == 1 || any(edgeMask & (1 << faceNeighborEdges[j]))); - - vertexAdjacency[v0 * 6 + j] = isAdjacent ? voxelToVertex[adjacent[j]] : INVALID; - } - } -} - -[numthreads(128, 1, 1)] -void Smoothing (uint3 id : SV_DispatchThreadID) -{ - uint thread = id.x; - if (thread >= dispatchBuffer[3]) return; - - float3 n = decode(verts[thread].w); - - float4 coord = float4(verts[thread].xyz,1); - float4 norm = float4(n,1); - - for (int j = 0; j < 6; ++j) - { - uint v = vertexAdjacency[thread*6 + j]; - if (v != INVALID) - { - coord += float4(verts[v].xyz,1); - norm += float4(decode(verts[v].w),1); - } - } - - coord.xyz /= coord.w; - norm.xyz /= norm.w; - - float3 v = lerp(verts[thread].xyz, coord.xyz, smoothing); - n = normalize(lerp(n,norm.xyz, smoothing)); - - outputVerts[thread] = float4(v, encode(n)); - -} - -[numthreads(1, 1, 1)] -void FixArgsBuffer (uint3 id : SV_DispatchThreadID) -{ - dispatchBuffer[3] = dispatchBuffer[4] * dispatchMultiplier; - dispatchBuffer[0] = dispatchBuffer[3] / 128 + 1; - dispatchBuffer[4] *= countMultiplier; // used to zero out fourth component if needed. -} - -[numthreads(1, 1, 1)] -void FillIndirectDrawBuffer (uint3 id : SV_DispatchThreadID) -{ - indirectDrawIndexedArgs a; - - a.indexCountPerInstance = dispatchBuffer[3] * 6; // number of quads * 6 - a.instanceCount = instanceCount; - a.startIndex = 0; - a.baseVertexIndex = 0; - a.startInstance = 0; - indirectBuffer[0] = a; -} - diff --git a/Assets/Obi/Resources/Compute/FluidSurfaceMeshBuilding.compute.meta b/Assets/Obi/Resources/Compute/FluidSurfaceMeshBuilding.compute.meta deleted file mode 100644 index 67121ca85..000000000 --- a/Assets/Obi/Resources/Compute/FluidSurfaceMeshBuilding.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 676e30b71ac3147969895b3f0ad6d2ec -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/GridUtils.cginc b/Assets/Obi/Resources/Compute/GridUtils.cginc deleted file mode 100644 index c3ce3b12a..000000000 --- a/Assets/Obi/Resources/Compute/GridUtils.cginc +++ /dev/null @@ -1,166 +0,0 @@ -#ifndef GRIDUTILS_INCLUDE -#define GRIDUTILS_INCLUDE - -#define INVALID 0xFFFFFFFF -#define MIN_GRID_LEVEL -8 //-6 // minimum cell size is 0.004 meters, enough for very small colliders / particles (log(0.004) / log(2)) -#define MAX_GRID_LEVEL 15 // maximum cell size is 32768 meters, enough for gargantuan objects. -#define GRID_LEVELS (MAX_GRID_LEVEL - MIN_GRID_LEVEL + 1) - -RWStructuredBuffer levelPopulation; -uint maxCells; // maximum number of unique cells in the grid. - -static const float4 cellNeighborhood[27] = { -float4(-1,-1,-1, 0), -float4(-1,-1, 0, 0), -float4(-1,-1, 1, 0), -float4(-1, 0,-1, 0), -float4(-1, 0, 0, 0), -float4(-1, 0, 1, 0), -float4(-1, 1,-1, 0), -float4(-1, 1, 0, 0), -float4(-1, 1, 1, 0), -float4( 0,-1,-1, 0), -float4( 0,-1, 0, 0), -float4( 0,-1, 1, 0), -float4( 0, 0,-1, 0), -float4( 0, 0, 0, 0), -float4( 0, 0, 1, 0), -float4( 0, 1,-1, 0), -float4( 0, 1, 0, 0), -float4( 0, 1, 1, 0), -float4( 1,-1,-1, 0), -float4( 1,-1, 0, 0), -float4( 1,-1, 1, 0), -float4( 1, 0,-1, 0), -float4( 1, 0, 0, 0), -float4( 1, 0, 1, 0), -float4( 1, 1,-1, 0), -float4( 1, 1, 0, 0), -float4( 1, 1, 1, 0), -}; - -static const float4 aheadCellNeighborhood[13] = { -float4(1,0,0,0), // + , 0 , 0 ( 1) -float4(0,1,0,0), // 0 , + , 0 ( 3) -float4(1,1,0,0), // + , + , 0 ( 4) -float4(0,0,1,0), // 0 , 0 , + ( 9) -float4(1,0,1,0), // + , 0 , + (10) -float4(0,1,1,0), // 0 , + , + (12) -float4(1,1,1,0), // + , + , + (13) - -float4(-1,1,0,0), // - , + , 0 ( 2) -float4(-1,-1,1,0), // - , - , + ( 5) -float4(0,-1,1,0), // 0 , - , + ( 6) -float4(1,-1,1,0), // + , - , + ( 7) -float4(-1,0,1,0), // - , 0 , + ( 8) -float4(-1,1,1,0), // - , + , + (11) -}; - -[numthreads(1,1,1)] -void FindPopulatedLevels (uint3 id : SV_DispatchThreadID) -{ - for (int l = 1; l <= GRID_LEVELS; ++l) - { - if (levelPopulation[l] > 0) - levelPopulation[1 + levelPopulation[0]++] = l - 1; - } -} - -inline int GridLevelForSize(float size) -{ - // the magic number is 1/log(2), used because log_a(x) = log_b(x) / log_b(a) - // level is clamped between MIN_LEVEL and MAX_LEVEL, then remapped to (0, MAX_LEVEL - MIN_LEVEL) - // this allows us to avoid InterlockedMax issues on GPU, since it doesn't work on negative numbers on some APIs. - return clamp((int)ceil(log(size) * 1.44269504089), MIN_GRID_LEVEL, MAX_GRID_LEVEL) - MIN_GRID_LEVEL; -} - -inline float CellSizeOfLevel(int level) -{ - return exp2(level + MIN_GRID_LEVEL); -} - -inline int4 GetParentCellCoords(int4 cellCoords, uint level) -{ - float decimation = exp2(level - cellCoords[3]); - int4 cell = (int4)floor((float4)cellCoords / decimation); - cell[3] = level; - return cell; -} - -uint Part1By1(uint x) -{ - x &= 0x0000ffff; // x = ---- ---- ---- ---- fedc ba98 7654 3210 - x = (x ^ (x << 8)) & 0x00ff00ff; // x = ---- ---- fedc ba98 ---- ---- 7654 3210 - x = (x ^ (x << 4)) & 0x0f0f0f0f; // x = ---- fedc ---- ba98 ---- 7654 ---- 3210 - x = (x ^ (x << 2)) & 0x33333333; // x = --fe --dc --ba --98 --76 --54 --32 --10 - x = (x ^ (x << 1)) & 0x55555555; // x = -f-e -d-c -b-a -9-8 -7-6 -5-4 -3-2 -1-0 - return x; -} - -// "Insert" two 0 bits after each of the 10 low bits of x -uint Part1By2(uint x) -{ - x &= 0x000003ff; // x = ---- ---- ---- ---- ---- --98 7654 3210 - x = (x ^ (x << 16)) & 0xff0000ff; // x = ---- --98 ---- ---- ---- ---- 7654 3210 - x = (x ^ (x << 8)) & 0x0300f00f; // x = ---- --98 ---- ---- 7654 ---- ---- 3210 - x = (x ^ (x << 4)) & 0x030c30c3; // x = ---- --98 ---- 76-- --54 ---- 32-- --10 - x = (x ^ (x << 2)) & 0x09249249; // x = ---- 9--8 --7- -6-- 5--4 --3- -2-- 1--0 - return x; -} - -uint Compact1By1(uint x) -{ - x &= 0x55555555; // x = -f-e -d-c -b-a -9-8 -7-6 -5-4 -3-2 -1-0 - x = (x ^ (x >> 1)) & 0x33333333; // x = --fe --dc --ba --98 --76 --54 --32 --10 - x = (x ^ (x >> 2)) & 0x0f0f0f0f; // x = ---- fedc ---- ba98 ---- 7654 ---- 3210 - x = (x ^ (x >> 4)) & 0x00ff00ff; // x = ---- ---- fedc ba98 ---- ---- 7654 3210 - x = (x ^ (x >> 8)) & 0x0000ffff; // x = ---- ---- ---- ---- fedc ba98 7654 3210 - return x; -} - -uint Compact1By2(uint x) -{ - x &= 0x09249249; // x = ---- 9--8 --7- -6-- 5--4 --3- -2-- 1--0 - x = (x ^ (x >> 2)) & 0x030c30c3; // x = ---- --98 ---- 76-- --54 ---- 32-- --10 - x = (x ^ (x >> 4)) & 0x0300f00f; // x = ---- --98 ---- ---- 7654 ---- ---- 3210 - x = (x ^ (x >> 8)) & 0xff0000ff; // x = ---- --98 ---- ---- ---- ---- 7654 3210 - x = (x ^ (x >> 16)) & 0x000003ff; // x = ---- ---- ---- ---- ---- --98 7654 3210 - return x; -} - -inline uint EncodeMorton2(uint2 coords) -{ - return (Part1By1(coords.y) << 1) + Part1By1(coords.x); -} - -inline uint EncodeMorton3(uint3 coords) -{ - return (Part1By2(coords.z) << 2) + (Part1By2(coords.y) << 1) + Part1By2(coords.x); -} - -inline uint3 DecodeMorton2(uint code) -{ - return uint3(Compact1By1(code >> 0), Compact1By1(code >> 1), 0); -} - -inline uint3 DecodeMorton3(uint code) -{ - return uint3(Compact1By2(code >> 0), Compact1By2(code >> 1), Compact1By2(code >> 2)); -} - -inline uint GridHash(in int4 cellIndex) -{ - return (73856093*cellIndex.x ^ - 19349663*cellIndex.y ^ - 83492791*cellIndex.z ^ - 10380569*cellIndex.w) % maxCells; -} - -inline uint GridHash(in int3 cellIndex) -{ - return (73856093*cellIndex.x ^ - 19349663*cellIndex.y ^ - 83492791*cellIndex.z) % maxCells; -} - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/GridUtils.cginc.meta b/Assets/Obi/Resources/Compute/GridUtils.cginc.meta deleted file mode 100644 index be067e289..000000000 --- a/Assets/Obi/Resources/Compute/GridUtils.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: b4dbf43981a3b419fbc2eaf5f2c05a6c -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/HeightfieldShape.compute b/Assets/Obi/Resources/Compute/HeightfieldShape.compute deleted file mode 100644 index 6b34be7b7..000000000 --- a/Assets/Obi/Resources/Compute/HeightfieldShape.compute +++ /dev/null @@ -1,198 +0,0 @@ -#include "ColliderDefinitions.cginc" -#include "ContactHandling.cginc" -#include "DistanceFunctions.cginc" -#include "Simplex.cginc" -#include "Bounds.cginc" -#include "SolverParameters.cginc" -#include "Optimization.cginc" - -#pragma kernel GenerateContacts - -StructuredBuffer positions; -StructuredBuffer orientations; -StructuredBuffer principalRadii; -StructuredBuffer velocities; - -StructuredBuffer simplices; -StructuredBuffer simplexBounds; // bounding box of each simplex. - -StructuredBuffer transforms; -StructuredBuffer shapes; - -// heightfield data: -StructuredBuffer heightFieldHeaders; -StructuredBuffer heightFieldSamples; - -StructuredBuffer contactPairs; -StructuredBuffer contactOffsetsPerType; - -RWStructuredBuffer contacts; -RWStructuredBuffer dispatchBuffer; - -StructuredBuffer worldToSolver; - -uint maxContacts; -float deltaTime; - -[numthreads(128, 1, 1)] -void GenerateContacts (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - - // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. - if (i >= dispatchBuffer[11 + 4 * HEIGHTMAP_SHAPE]) return; - - int firstPair = contactOffsetsPerType[HEIGHTMAP_SHAPE]; - int simplexIndex = contactPairs[firstPair + i].x; - int colliderIndex = contactPairs[firstPair + i].y; - shape s = shapes[colliderIndex]; - - if (s.dataIndex < 0) return; - - HeightFieldHeader header = heightFieldHeaders[s.dataIndex]; - - Heightfield fieldShape; - fieldShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); - fieldShape.s = s; - - // invert a full matrix here to accurately represent collider bounds scale. - float4x4 solverToCollider = Inverse(TRS(fieldShape.colliderToSolver.translation.xyz, fieldShape.colliderToSolver.rotation, fieldShape.colliderToSolver.scale.xyz)); - aabb simplexBound = simplexBounds[simplexIndex].Transformed(solverToCollider); - - int simplexSize; - int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); - - int resolutionU = (int)s.center.x; - int resolutionV = (int)s.center.y; - - // calculate terrain cell size: - float cellWidth = s.size.x / (resolutionU - 1); - float cellHeight = s.size.z / (resolutionV - 1); - - // calculate particle bounds min/max cells: - int2 min_ = int2((int)floor(simplexBound.min_[0] / cellWidth), (int)floor(simplexBound.min_[2] / cellHeight)); - int2 max_ = int2((int)floor(simplexBound.max_[0] / cellWidth), (int)floor(simplexBound.max_[2] / cellHeight)); - - for (int su = min_[0]; su <= max_[0]; ++su) - { - if (su >= 0 && su < resolutionU - 1) - { - for (int sv = min_[1]; sv <= max_[1]; ++sv) - { - if (sv >= 0 && sv < resolutionV - 1) - { - // calculate neighbor sample indices: - int csu1 = clamp(su + 1, 0, resolutionU - 1); - int csv1 = clamp(sv + 1, 0, resolutionV - 1); - - // sample heights: - float h1 = heightFieldSamples[header.firstSample + sv * resolutionU + su] * s.size.y; - float h2 = heightFieldSamples[header.firstSample + sv * resolutionU + csu1] * s.size.y; - float h3 = heightFieldSamples[header.firstSample + csv1 * resolutionU + su] * s.size.y; - float h4 = heightFieldSamples[header.firstSample + csv1 * resolutionU + csu1] * s.size.y; - - if (h1 < 0) continue; - h1 = abs(h1); - h2 = abs(h2); - h3 = abs(h3); - h4 = abs(h4); - - float min_x = su * s.size.x / (resolutionU - 1); - float max_x = csu1 * s.size.x / (resolutionU - 1); - float min_z = sv * s.size.z / (resolutionV - 1); - float max_z = csv1 * s.size.z / (resolutionV - 1); - - float4 convexPoint; - float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); - - // ------contact against the first triangle------: - float4 v1 = float4(min_x, h3, max_z, 0); - float4 v2 = float4(max_x, h4, max_z, 0); - float4 v3 = float4(min_x, h1, min_z, 0); - - fieldShape.tri.Cache(v1, v2, v3); - fieldShape.triNormal.xyz = normalizesafe(cross((v2 - v1).xyz, (v3 - v1).xyz)); - - SurfacePoint colliderPoint = Optimize(fieldShape, positions, orientations, principalRadii, - simplices, simplexStart, simplexSize, simplexBary, convexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); - - float4 velocity = FLOAT4_ZERO; - float simplexRadius = 0; - int j; - for (j = 0; j < simplexSize; ++j) - { - int particleIndex = simplices[simplexStart + j]; - simplexRadius += principalRadii[particleIndex].x * simplexBary[j]; - velocity += velocities[particleIndex] * simplexBary[j]; - } - - float dAB = dot(convexPoint - colliderPoint.pos, colliderPoint.normal); - float vel = dot(velocity, colliderPoint.normal); - - if (vel * deltaTime + dAB <= simplexRadius + s.contactOffset + collisionMargin) - { - uint count = contacts.IncrementCounter(); - if (count < maxContacts) - { - contact c = (contact)0; - - c.pointB = colliderPoint.pos; - c.normal = colliderPoint.normal * fieldShape.s.isInverted(); - c.pointA = simplexBary; - c.bodyA = simplexIndex; - c.bodyB = colliderIndex; - - contacts[count] = c; - - InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); - InterlockedMax(dispatchBuffer[3], count + 1); - } - } - - // ------contact against the second triangle------: - v1 = float4(min_x, h1, min_z, 0); - v2 = float4(max_x, h4, max_z, 0); - v3 = float4(max_x, h2, min_z, 0); - - fieldShape.tri.Cache(v1, v2, v3); - fieldShape.triNormal.xyz = normalizesafe(cross((v2 - v1).xyz, (v3 - v1).xyz)); - - colliderPoint = Optimize(fieldShape, positions, orientations, principalRadii, - simplices, simplexStart, simplexSize, simplexBary, convexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); - - velocity = FLOAT4_ZERO; - simplexRadius = 0; - for (j = 0; j < simplexSize; ++j) - { - int particleIndex = simplices[simplexStart + j]; - simplexRadius += principalRadii[particleIndex].x * simplexBary[j]; - velocity += velocities[particleIndex] * simplexBary[j]; - } - - dAB = dot(convexPoint - colliderPoint.pos, colliderPoint.normal); - vel = dot(velocity, colliderPoint.normal); - - if (vel * deltaTime + dAB <= simplexRadius + s.contactOffset + collisionMargin) - { - uint count = contacts.IncrementCounter(); - if (count < maxContacts) - { - contact c = (contact)0; - - c.pointB = colliderPoint.pos; - c.normal = colliderPoint.normal * fieldShape.s.isInverted(); - c.pointA = simplexBary; - c.bodyA = simplexIndex; - c.bodyB = colliderIndex; - - contacts[count] = c; - - InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); - InterlockedMax(dispatchBuffer[3], count + 1); - } - } - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/HeightfieldShape.compute.meta b/Assets/Obi/Resources/Compute/HeightfieldShape.compute.meta deleted file mode 100644 index a04ea6262..000000000 --- a/Assets/Obi/Resources/Compute/HeightfieldShape.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d9efd384bb82b4ec0b0adf1fc349a89b -ComputeShaderImporter: - externalObjects: {} - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/InertialFrame.cginc b/Assets/Obi/Resources/Compute/InertialFrame.cginc deleted file mode 100644 index fe1da60c9..000000000 --- a/Assets/Obi/Resources/Compute/InertialFrame.cginc +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef INERTIALFRAME_INCLUDE -#define INERTIALFRAME_INCLUDE - -#include "Transform.cginc" - -struct inertialFrame -{ - transform frame; - transform prevFrame; - - float4 velocity; - float4 angularVelocity; - - float4 acceleration; - float4 angularAcceleration; - - float4 velocityAtPoint(float4 pnt) - { - return velocity + float4(cross(angularVelocity.xyz, (pnt - prevFrame.translation).xyz), 0); - } -}; - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/InertialFrame.cginc.meta b/Assets/Obi/Resources/Compute/InertialFrame.cginc.meta deleted file mode 100644 index ed4916d3e..000000000 --- a/Assets/Obi/Resources/Compute/InertialFrame.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 2d21eb1b3353a439eb5f6f6df05dd6d0 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/InstancedParticleRendering.compute b/Assets/Obi/Resources/Compute/InstancedParticleRendering.compute deleted file mode 100644 index b07c7bc89..000000000 --- a/Assets/Obi/Resources/Compute/InstancedParticleRendering.compute +++ /dev/null @@ -1,44 +0,0 @@ -#pragma kernel UpdateParticleInstances - -#include "PathFrame.cginc" - -struct RendererData -{ - float4 color; - float radiusScale; -}; - -StructuredBuffer activeParticles; -StructuredBuffer rendererData; -StructuredBuffer rendererIndex; - -StructuredBuffer renderablePositions; -StructuredBuffer renderableOrientations; -StructuredBuffer renderableRadii; -StructuredBuffer colors; -float4x4 solverToWorld; - -RWStructuredBuffer instanceTransforms; -RWStructuredBuffer invInstanceTransforms; -RWStructuredBuffer instanceColors; - -uint particleCount; - -[numthreads(128, 1, 1)] -void UpdateParticleInstances (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= particleCount) return; - - int p = activeParticles[i]; - - float4x4 tfrm = TRS(renderablePositions[p].xyz, - renderableOrientations[p], - renderableRadii[p].xyz * renderableRadii[p][3] * rendererData[rendererIndex[i]].radiusScale); - - instanceTransforms[i] = mul(solverToWorld, tfrm); - - instanceColors[i] = colors[p] * rendererData[rendererIndex[i]].color; - - invInstanceTransforms[i] = Inverse(instanceTransforms[i]); -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/InstancedParticleRendering.compute.meta b/Assets/Obi/Resources/Compute/InstancedParticleRendering.compute.meta deleted file mode 100644 index a82b45e18..000000000 --- a/Assets/Obi/Resources/Compute/InstancedParticleRendering.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d2b27c5c6c8154b6694d7e017468ccc0 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/Integration.cginc b/Assets/Obi/Resources/Compute/Integration.cginc deleted file mode 100644 index fc9edd611..000000000 --- a/Assets/Obi/Resources/Compute/Integration.cginc +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef INTEGRATION_INCLUDE -#define INTEGRATION_INCLUDE - -#include "Quaternion.cginc" - -float4 IntegrateLinear(float4 position, float4 velocity, float dt) -{ - return position + velocity * dt; -} - -float4 DifferentiateLinear(float4 position, float4 prevPosition, float dt) -{ - return (position - prevPosition) / dt; -} - -quaternion AngularVelocityToSpinQuaternion(quaternion rotation, float4 angularVelocity, float dt) -{ - quaternion delta = quaternion(angularVelocity.x, - angularVelocity.y, - angularVelocity.z, 0); - - return quaternion(0.5f * qmul(delta,rotation) * dt); -} - -quaternion IntegrateAngular(quaternion rotation, float4 angularVelocity, float dt) -{ - rotation += AngularVelocityToSpinQuaternion(rotation,angularVelocity, dt); - return normalize(rotation); -} - -float4 DifferentiateAngular(quaternion rotation, quaternion prevRotation, float dt) -{ - quaternion deltaq = qmul(rotation, q_conj(prevRotation)); - float s = deltaq.w >= 0 ? 1 : -1; - return float4(s * deltaq.xyz * 2.0f / dt, 0); -} - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/Integration.cginc.meta b/Assets/Obi/Resources/Compute/Integration.cginc.meta deleted file mode 100644 index 7940d0152..000000000 --- a/Assets/Obi/Resources/Compute/Integration.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: d436b0155e8f943d59a26290140664cd -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/InterlockedUtils.cginc b/Assets/Obi/Resources/Compute/InterlockedUtils.cginc deleted file mode 100644 index 06f227295..000000000 --- a/Assets/Obi/Resources/Compute/InterlockedUtils.cginc +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef INTERLOCKEDUTILS_INCLUDE -#define INTERLOCKEDUTILS_INCLUDE - -void InterlockedAddFloat(RWStructuredBuffer buffer, int index, int axis, float value) -{ - uint i_val = asuint(value); - uint tmp0 = 0; - uint tmp1; - - [allow_uav_condition] - while (true) - { - InterlockedCompareExchange(buffer[index][axis], tmp0, i_val, tmp1); - - if (tmp1 == tmp0) - break; - - tmp0 = tmp1; - i_val = asuint(value + asfloat(tmp1)); - } - - return; -} - -void InterlockedAddFloat(RWStructuredBuffer buffer, int index, float value) -{ - uint i_val = asuint(value); - uint tmp0 = 0; - uint tmp1; - - [allow_uav_condition] - while (true) - { - InterlockedCompareExchange(buffer[index], tmp0, i_val, tmp1); - - if (tmp1 == tmp0) - break; - - tmp0 = tmp1; - i_val = asuint(value + asfloat(tmp1)); - } - - return; -} - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/InterlockedUtils.cginc.meta b/Assets/Obi/Resources/Compute/InterlockedUtils.cginc.meta deleted file mode 100644 index c09fa844e..000000000 --- a/Assets/Obi/Resources/Compute/InterlockedUtils.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: bb532ce1395da4d13b47a4da3e1b4033 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/MathUtils.cginc b/Assets/Obi/Resources/Compute/MathUtils.cginc deleted file mode 100644 index fd60de55d..000000000 --- a/Assets/Obi/Resources/Compute/MathUtils.cginc +++ /dev/null @@ -1,648 +0,0 @@ -#ifndef MATHUTILS_INCLUDE -#define MATHUTILS_INCLUDE - -#define PI 3.14159265359f -#define SQRT2 1.41421356237f -#define SQRT3 1.73205080757f -#define EPSILON 0.0000001f -#define FLT_MAX 3.402823466e+38 -#define FLT_MIN 1.175494351e-38 - -#define FLOAT4_ZERO float4(0, 0, 0, 0) -#define FLOAT4_EPSILON float4(EPSILON, EPSILON, EPSILON, EPSILON) - -#define zero 0 -#define one 1 - -#define PHASE_SELFCOLLIDE (1 << 24) -#define PHASE_FLUID (1 << 25) -#define PHASE_ONESIDED (1 << 26) -#define PHASE_ISOLATED (1 << 27) // particles that are not part of persistent constraints and can be deleted without ill effects: fluids and granulars - -#include "Quaternion.cginc" -#include "Matrix.cginc" - -// Based on Kubelka-Munk theory: https://vanity-ibex.xyz/blog/kubelka_munk_colormixing/ -float4 RGBToAbsorption(float4 rgb) -{ - // S (scattering) is assumed to be 1 for all channels - float4 k; - k.r = pow(1 - rgb.r, 2) / (2 * rgb.r + EPSILON); - k.g = pow(1 - rgb.g, 2) / (2 * rgb.g + EPSILON); - k.b = pow(1 - rgb.b, 2) / (2 * rgb.b + EPSILON); - k.a = rgb.a; - return k; -} - -// Based on Kubelka-Munk theory: https://vanity-ibex.xyz/blog/kubelka_munk_colormixing/ -float4 AbsorptionToRGB(float4 k) -{ - // Assuming S=1 for all channels - float4 rgb; - rgb.r = 1 + k.r - sqrt(k.r * (k.r + 2)); - rgb.g = 1 + k.g - sqrt(k.g * (k.g + 2)); - rgb.b = 1 + k.b - sqrt(k.b * (k.b + 2)); - rgb.a = k.a; - return rgb; -} - -//https://www.shadertoy.com/view/4djSRW -float3 hash33(float3 p3) -{ - p3 = frac(p3 * float3(.1031, .1030, .0973)); - p3 += dot(p3, p3.yxz+33.33); - return frac((p3.xxy + p3.yxx)*p3.zyx); -} - -float hash13(float3 p3) -{ - p3 = frac(p3 * .1031); - p3 += dot(p3, p3.zyx + 31.32); - return frac((p3.x + p3.y) * p3.z); -} - -float2 hash21(float p) -{ - float3 p3 = frac(float3(p,p,p) * float3(.1031, .1030, .0973)); - p3 += dot(p3, p3.yzx + 33.33); - return frac((p3.xx+p3.yz)*p3.zy); -} - -float3 hash31(float p) -{ - float3 p3 = frac(float3(p,p,p) * float3(.1031f, .1030f, .0973f)); - p3 += dot(p3, p3.yzx + 33.33f); - return frac((p3.xxy + p3.yzz) * p3.zyx); -} - -float4 normalizesafe(in float4 v, float4 def = float4(0,0,0,0)) -{ - float len = length(v); - return (len < EPSILON) ? def : v/len; -} - -float3 normalizesafe(in float3 v, float3 def = float3(0,0,0)) -{ - float len = length(v); - return (len < EPSILON) ? def : v/len; -} - -inline float cmax( in float3 v) -{ - return max(max(v.x,v.y),v.z); -} - -inline float3 nfmod(float3 a, float3 b) -{ - return a - b * floor(a / b); -} - -inline float BaryScale(float4 coords) -{ - return 1.0 / dot(coords, coords); -} - -float Remap01(float value, float min_, float max_) -{ - return (min(value, max_) - min(value, min_)) / (max_ - min_); -} - -float Remap(float value, float min_, float max_, float newmin_, float newmax_) -{ - return newmin_ + (value - min_) * (newmax_ - newmin_) / (max_ - min_); -} - -float EllipsoidRadius(float4 normSolverDirection, quaternion orientation, float3 radii) -{ - float3 localDir = rotate_vector(q_conj(orientation), normSolverDirection.xyz) / radii; - float sqrNorm = dot(localDir, localDir); - return sqrNorm > EPSILON ? sqrt(1 / sqrNorm) : radii.x; -} - -float4 Project(float4 v, float4 onto) -{ - float len = dot(onto,onto); - if (len < EPSILON) - return FLOAT4_ZERO; - return dot(onto, v) * onto / len; -} - -float3 Project(float3 v, float3 onto) -{ - float len = dot(onto,onto); - if (len < EPSILON) - return float3(0,0,0); - return dot(onto, v) * onto / len; -} - -inline void OneSidedNormal(float4 forward, inout float4 normal) -{ - float d = dot(normal.xyz, forward.xyz); - if (d < 0) normal -= 2 * d * forward; -} - -quaternion ExtractRotation(float3x3 m, quaternion rotation, int iterations) -{ - float4x4 R; - for (int i = 0; i < iterations; ++i) - { - R = q_toMatrix(rotation); - float3 omega = (cross(R._m00_m10_m20, m._m00_m10_m20) + cross(R._m01_m11_m21, m._m01_m11_m21) + cross(R._m02_m12_m22, m._m02_m12_m22)) / - (abs(dot(R._m00_m10_m20, m._m00_m10_m20) + dot(R._m01_m11_m21, m._m01_m11_m21) + dot(R._m02_m12_m22, m._m02_m12_m22)) + EPSILON); - - float w = length(omega); - if (w < EPSILON) - break; - - rotation = normalize(qmul(axis_angle((1.0f / w) * omega, w), rotation)); - } - return rotation; -} - -quaternion ExtractRotation(float4x4 m, quaternion rotation, int iterations) -{ - return ExtractRotation((float3x3) m, rotation, iterations); -} - -float4 GetParticleInertiaTensor(in float4 principalRadii, in float invRotationalMass) -{ - float4 sqrRadii = principalRadii * principalRadii; - return 0.2f / (invRotationalMass + EPSILON) * float4(sqrRadii[1] + sqrRadii[2], - sqrRadii[0] + sqrRadii[2], - sqrRadii[0] + sqrRadii[1], 0); -} - -float4x4 TransformInertiaTensor(float4 tensor, quaternion rotation) -{ - float4x4 rotMatrix = q_toMatrix(rotation); - return mul(rotMatrix, mul(AsDiagonal(tensor), transpose(rotMatrix))); -} - -float RotationalInvMass(float4x4 inverseInertiaTensor, float4 pos, float4 direction) -{ - float4 cr = mul(inverseInertiaTensor, float4(cross(pos.xyz, direction.xyz), 0)); - return dot(cross(cr.xyz, pos.xyz), direction.xyz); -} - -float RaySphereIntersection(float3 rayOrigin, float3 rayDirection, float3 center, float radius) -{ - float3 oc = rayOrigin - center; - - float a = dot(rayDirection, rayDirection); - float b = 2.0 * dot(oc, rayDirection); - float c = dot(oc, oc) - radius * radius; - float discriminant = b * b - 4 * a * c; - if (discriminant < 0){ - return -1.0f; - } - else{ - return (-b - sqrt(discriminant)) / (2.0f * a); - } -} - -struct CachedEdge -{ - float4 vertex; - float4 edge0; - float data; - - void Cache(in float4 v1, - in float4 v2) - { - vertex = v1; - vertex.w = 0; - edge0 = v2 - v1; - edge0.w = 0; - data = dot(edge0, edge0); - } -}; - -float4 NearestPointOnEdge(CachedEdge edge, float4 p, out float mu, bool clampToSegment = true) -{ - float4 ap = p - edge.vertex; - ap.w = 0; - - mu = dot(ap, edge.edge0) / (edge.data + EPSILON); - - if (clampToSegment) - mu = saturate(mu); - - float4 result = edge.vertex + edge.edge0 * mu; - result.w = 0; - return result; -} - -float4 NearestPointOnEdge(float4 a, float4 b, float4 p, out float mu, bool clampToSegment = true) -{ - float4 ap = p - a; - float4 ab = b - a; - ap.w = 0; - ab.w = 0; - - mu = dot(ap, ab) / (dot(ab, ab) + EPSILON); - - if (clampToSegment) - mu = saturate(mu); - - float4 result = a + ab * mu; - result.w = 0; - return result; -} - -float3 NearestPointOnEdge(float3 a, float3 b, float3 p, out float mu, bool clampToSegment = true) -{ - float3 ap = p - a; - float3 ab = b - a; - - mu = dot(ap, ab) / (dot(ab, ab) + EPSILON); - - if (clampToSegment) - mu = saturate(mu); - - float3 result = a + ab * mu; - return result; -} - -struct CachedTri -{ - float4 vertex; - float4 edge0; - float4 edge1; - float4 data; - - void Cache(in float4 v1, - in float4 v2, - in float4 v3) - { - vertex = v1; - edge0 = v2 - v1; - edge1 = v3 - v1; - data = float4(0,0,0,0); - data[0] = dot(edge0, edge0); - data[1] = dot(edge0, edge1); - data[2] = dot(edge1, edge1); - data[3] = data[0] * data[2] - data[1] * data[1]; - } -}; - -float4 NearestPointOnTri(in CachedTri tri, - in float4 p, - out float4 bary) -{ - float4 v0 = tri.vertex - p; - float b0 = dot(tri.edge0, v0); - float b1 = dot(tri.edge1, v0); - float t0 = tri.data[1] * b1 - tri.data[2] * b0; - float t1 = tri.data[1] * b0 - tri.data[0] * b1; - - if (t0 + t1 <= tri.data[3]) - { - if (t0 < zero) - { - if (t1 < zero) // region 4 - { - if (b0 < zero) - { - t1 = zero; - if (-b0 >= tri.data[0]) // V0 - t0 = one; - else // E01 - t0 = -b0 / tri.data[0]; - } - else - { - t0 = zero; - if (b1 >= zero) // V0 - t1 = zero; - else if (-b1 >= tri.data[2]) // V2 - t1 = one; - else // E20 - t1 = -b1 / tri.data[2]; - } - } - else // region 3 - { - t0 = zero; - if (b1 >= zero) // V0 - t1 = zero; - else if (-b1 >= tri.data[2]) // V2 - t1 = one; - else // E20 - t1 = -b1 / tri.data[2]; - } - } - else if (t1 < zero) // region 5 - { - t1 = zero; - if (b0 >= zero) // V0 - t0 = zero; - else if (-b0 >= tri.data[0]) // V1 - t0 = one; - else // E01 - t0 = -b0 / tri.data[0]; - } - else // region 0, interior - { - float invDet = one / tri.data[3]; - t0 *= invDet; - t1 *= invDet; - } - } - else - { - float tmp0, tmp1, numer, denom; - - if (t0 < zero) // region 2 - { - tmp0 = tri.data[1] + b0; - tmp1 = tri.data[2] + b1; - if (tmp1 > tmp0) - { - numer = tmp1 - tmp0; - denom = tri.data[0] - 2 * tri.data[1] + tri.data[2]; - if (numer >= denom) // V1 - { - t0 = one; - t1 = zero; - } - else // E12 - { - t0 = numer / denom; - t1 = one - t0; - } - } - else - { - t0 = zero; - if (tmp1 <= zero) // V2 - t1 = one; - else if (b1 >= zero) // V0 - t1 = zero; - else // E20 - t1 = -b1 / tri.data[2]; - } - } - else if (t1 < zero) // region 6 - { - tmp0 = tri.data[1] + b1; - tmp1 = tri.data[0] + b0; - if (tmp1 > tmp0) - { - numer = tmp1 - tmp0; - denom = tri.data[0] - 2 * tri.data[1] + tri.data[2]; - if (numer >= denom) // V2 - { - t1 = one; - t0 = zero; - } - else // E12 - { - t1 = numer / denom; - t0 = one - t1; - } - } - else - { - t1 = zero; - if (tmp1 <= zero) // V1 - t0 = one; - else if (b0 >= zero) // V0 - t0 = zero; - else // E01 - t0 = -b0 / tri.data[0]; - } - } - else // region 1 - { - numer = tri.data[2] + b1 - tri.data[1] - b0; - if (numer <= zero) // V2 - { - t0 = zero; - t1 = one; - } - else - { - denom = tri.data[0] - 2 * tri.data[1] + tri.data[2]; - if (numer >= denom) // V1 - { - t0 = one; - t1 = zero; - } - else // 12 - { - t0 = numer / denom; - t1 = one - t0; - } - } - } - } - - bary = float4(1 - (t0 + t1), t0, t1,0); - return tri.vertex + t0 * tri.edge0 + t1 * tri.edge1; -} - -float3 unitOrthogonal(float3 input) -{ - // Find a vector to cross() the input with. - if (!(input.x < input.z * EPSILON) - || !(input.y < input.z * EPSILON)) - { - float invnm = 1 / length(input.xy); - return float3(-input.y * invnm, input.x * invnm, 0); - } - else - { - float invnm = 1 / length(input.yz); - return float3(0, -input.z * invnm, input.y * invnm); - } -} - -// D is symmetric, S is an eigen value -float3 EigenVector(float3x3 D, float S) -{ - // Compute a cofactor matrix of D - sI. - float3 c0 = D._m00_m10_m20; c0[0] -= S; - float3 c1 = D._m01_m11_m21; c1[1] -= S; - float3 c2 = D._m02_m12_m22; c2[2] -= S; - - // Upper triangular matrix - float3 c0p = float3(c1[1] * c2[2] - c2[1] * c2[1], 0, 0); - float3 c1p = float3(c2[1] * c2[0] - c1[0] * c2[2], c0[0] * c2[2] - c2[0] * c2[0], 0); - float3 c2p = float3(c1[0] * c2[1] - c1[1] * c2[0], c1[0] * c2[0] - c0[0] * c2[1], c0[0] * c1[1] - c1[0] * c1[0]); - - // Get a column vector with a largest norm (non-zero). - float C01s = c1p[0] * c1p[0]; - float C02s = c2p[0] * c2p[0]; - float C12s = c2p[1] * c2p[1]; - float3 norm = float3(c0p[0] * c0p[0] + C01s + C02s, - C01s + c1p[1] * c1p[1] + C12s, - C02s + C12s + c2p[2] * c2p[2]); - - // index of largest: - int index = 0; - if (norm[0] > norm[1] && norm[0] > norm[2]) - index = 0; - else if (norm[1] > norm[0] && norm[1] > norm[2]) - index = 1; - else - index = 2; - - float3 V = float3(0,0,0); - - // special case - if (norm[index] < EPSILON) - { - V[0] = 1; return V; - } - else if (index == 0) - { - V[0] = c0p[0]; V[1] = c1p[0]; V[2] = c2p[0]; - return normalize(V); - } - else if (index == 1) - { - V[0] = c1p[0]; V[1] = c1p[1]; V[2] = c2p[1]; - return normalize(V); - } - else - { - V = c2p; - return normalize(V); - } -} - -static float3 EigenValues(float3x3 D) -{ - float one_third = 1 / 3.0f; - float one_sixth = 1 / 6.0f; - float three_sqrt = sqrt(3.0f); - - float3 c0 = D._m00_m10_m20; - float3 c1 = D._m01_m11_m21; - float3 c2 = D._m02_m12_m22; - - float m = one_third * (c0[0] + c1[1] + c2[2]); - - // K is D - I*diag(S) - float K00 = c0[0] - m; - float K11 = c1[1] - m; - float K22 = c2[2] - m; - - float K01s = c1[0] * c1[0]; - float K02s = c2[0] * c2[0]; - float K12s = c2[1] * c2[1]; - - float q = 0.5f * (K00 * (K11 * K22 - K12s) - K22 * K01s - K11 * K02s) + c1[0] * c2[1] * c0[2]; - float p = one_sixth * (K00 * K00 + K11 * K11 + K22 * K22 + 2 * (K01s + K02s + K12s)); - - float p_sqrt = sqrt(p); - - float tmp = p * p * p - q * q; - float phi = one_third * atan2(sqrt(max(0, tmp)), q); - float phi_c = cos(phi); - float phi_s = sin(phi); - float sqrt_p_c_phi = p_sqrt * phi_c; - float sqrt_p_3_s_phi = p_sqrt * three_sqrt * phi_s; - - float e0 = m + 2 * sqrt_p_c_phi; - float e1 = m - sqrt_p_c_phi - sqrt_p_3_s_phi; - float e2 = m - sqrt_p_c_phi + sqrt_p_3_s_phi; - - float aux; - if (e0 > e1) - { - aux = e0; - e0 = e1; - e1 = aux; - } - if (e0 > e2) - { - aux = e0; - e0 = e2; - e2 = aux; - } - if (e1 > e2) - { - aux = e1; - e1 = e2; - e2 = aux; - } - - return float3(e2, e1, e0); -} - -void EigenSolve(float3x3 D, out float3 S, out float3x3 V) -{ - // D is symmetric - // S is a vector whose elements are eigenvalues - // V is a matrix whose columns are eigenvectors - S = EigenValues(D); - float3 V0, V1, V2; - - if (S[0] - S[1] > S[1] - S[2]) - { - V0 = EigenVector(D, S[0]); - if (S[1] - S[2] < EPSILON) - { - V2 = unitOrthogonal(V0); - } - else - { - V2 = EigenVector(D, S[2]); V2 -= V0 * dot(V0, V2); V2 = normalize(V2); - } - V1 = cross(V2, V0); - } - else - { - V2 = EigenVector(D, S[2]); - if (S[0] - S[1] < EPSILON) - { - V1 = unitOrthogonal(V2); - } - else - { - V1 = EigenVector(D, S[1]); V1 -= V2 * dot(V2, V1); V1 = normalize(V1); - } - V0 = cross(V1, V2); - } - - V._m00_m10_m20 = V0; - V._m01_m11_m21 = V1; - V._m02_m12_m22 = V2; -} - -float4 UnpackFloatRGBA(float v) -{ - uint rgba = asuint(v); - float r = ((rgba & 0xff000000) >> 24) / 255.0; - float g = ((rgba & 0x00ff0000) >> 16) / 255.0; - float b = ((rgba & 0x0000ff00) >> 8) / 255.0; - float a = (rgba & 0x000000ff) / 255.0; - return float4(r, g, b, a); -} - -float PackFloatRGBA(float4 enc) -{ - uint rgba = ((uint)(enc.x * 255.0) << 24) + - ((uint)(enc.y * 255.0) << 16) + - ((uint)(enc.z * 255.0) << 8) + - (uint)(enc.w * 255.0); - return asfloat(rgba); -} - -float2 UnpackFloatRG(float v) -{ - uint rgba = asuint(v); - float r = ((rgba & 0xffff0000) >> 16) / 65535.0; - float g = (rgba & 0x0000ffff) / 65535.0; - return float2(r, g); -} - -float PackFloatRG(float2 enc) -{ - uint rgba = ((uint)(enc.x * 65535.0) << 16) + - (uint)(enc.y * 65535.0); - return asfloat(rgba); -} - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/MathUtils.cginc.meta b/Assets/Obi/Resources/Compute/MathUtils.cginc.meta deleted file mode 100644 index 43b30e62e..000000000 --- a/Assets/Obi/Resources/Compute/MathUtils.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 729e4f240dd344abfa1b0972b2ceb0ea -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/Matrix.cginc b/Assets/Obi/Resources/Compute/Matrix.cginc deleted file mode 100644 index 5a1bf98e0..000000000 --- a/Assets/Obi/Resources/Compute/Matrix.cginc +++ /dev/null @@ -1,108 +0,0 @@ -#ifndef MATRIX_INCLUDE -#define MATRIX_INCLUDE - -#define FLOAT4X4_IDENTITY float4x4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) -#define FLOAT3X3_IDENTITY float3x3(1, 0, 0, 0, 1, 0, 0, 0, 1) -#define FLOAT4X4_ZERO float4x4(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) -#define FLOAT3X3_ZERO float3x3(0, 0, 0, 0, 0, 0, 0, 0, 0) - -#include "Quaternion.cginc" - -float4x4 Inverse(float4x4 m) -{ - float n11 = m[0][0], n12 = m[1][0], n13 = m[2][0], n14 = m[3][0]; - float n21 = m[0][1], n22 = m[1][1], n23 = m[2][1], n24 = m[3][1]; - float n31 = m[0][2], n32 = m[1][2], n33 = m[2][2], n34 = m[3][2]; - float n41 = m[0][3], n42 = m[1][3], n43 = m[2][3], n44 = m[3][3]; - - float t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44; - float t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44; - float t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44; - float t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34; - - float det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14; - float idet = 1.0f / det; - - float4x4 ret; - - ret[0][0] = t11 * idet; - ret[0][1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * idet; - ret[0][2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * idet; - ret[0][3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * idet; - - ret[1][0] = t12 * idet; - ret[1][1] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * idet; - ret[1][2] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * idet; - ret[1][3] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * idet; - - ret[2][0] = t13 * idet; - ret[2][1] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * idet; - ret[2][2] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * idet; - ret[2][3] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * idet; - - ret[3][0] = t14 * idet; - ret[3][1] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * idet; - ret[3][2] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * idet; - ret[3][3] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * idet; - - return ret; -} - -float4x4 m_scale(float4x4 m, float3 v) -{ - float x = v.x, y = v.y, z = v.z; - - m[0][0] *= x; m[1][0] *= y; m[2][0] *= z; - m[0][1] *= x; m[1][1] *= y; m[2][1] *= z; - m[0][2] *= x; m[1][2] *= y; m[2][2] *= z; - m[0][3] *= x; m[1][3] *= y; m[2][3] *= z; - - return m; -} - -float4x4 m_translate(float4x4 m, float3 v) -{ - float x = v.x, y = v.y, z = v.z; - m[0][3] = x; - m[1][3] = y; - m[2][3] = z; - return m; -} - -float4x4 TRS(float3 position, float4 quat, float3 scale) -{ - float4x4 m = q_toMatrix(quat); - return float4x4(m[0][0] * scale.x, m[0][1] * scale.y, m[0][2] * scale.z, position.x, - m[1][0] * scale.x, m[1][1] * scale.y, m[1][2] * scale.z, position.y, - m[2][0] * scale.x, m[2][1] * scale.y, m[2][2] * scale.z, position.z, - 0, 0, 0, 1); -} - -float4x4 AsDiagonal(in float4 v) -{ - return float4x4(v.x, 0, 0, 0, - 0, v.y, 0, 0, - 0, 0, v.z, 0, - 0, 0, 0, v.w); -} - -float3x3 multrnsp(in float4 column, in float4 row) -{ - return float3x3(row.xyz * column[0],row.xyz * column[1],row.xyz * column[2]); -} - -float4x4 multrnsp4(in float4 column, float4 row) -{ - row[3] = 0; - return float4x4(row * column[0],row * column[1],row * column[2], float4(0,0,0,0)); -} - -float FrobeniusNorm(in float4x4 m) -{ - return sqrt(dot(m._m00_m10_m20_m30,m._m00_m10_m20_m30) + - dot(m._m01_m11_m21_m31,m._m01_m11_m21_m31) + - dot(m._m02_m12_m22_m32,m._m02_m12_m22_m32) + - dot(m._m03_m13_m23_m33,m._m03_m13_m23_m33)); -} - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/Matrix.cginc.meta b/Assets/Obi/Resources/Compute/Matrix.cginc.meta deleted file mode 100644 index d6fefdd94..000000000 --- a/Assets/Obi/Resources/Compute/Matrix.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 80cddbfae548f433a93a4e6e7a10b089 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/NormalCompression.cginc b/Assets/Obi/Resources/Compute/NormalCompression.cginc deleted file mode 100644 index 4fcc93d03..000000000 --- a/Assets/Obi/Resources/Compute/NormalCompression.cginc +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef NORMALCOMPRESSION_INCLUDE -#define NORMALCOMPRESSION_INCLUDE - -float2 octWrap( float2 v ) -{ - return ( 1.0 - abs( v.yx ) ) * ( v.xy >= 0.0 ? 1.0 : -1.0 ); -} - -// use octahedral encoding to reduce to 2 coords, then pack them as two 16 bit values in a 32 bit float. -float encode( float3 n ) -{ - n /= ( abs( n.x ) + abs( n.y ) + abs( n.z ) ); - n.xy = n.z >= 0.0 ? n.xy : octWrap( n.xy ); - n.xy = n.xy * 0.5 + 0.5; - uint nx = (uint)(n.x * 0xffff); - uint ny = (uint)(n.y * 0xffff); - return asfloat((nx << 16) | (ny & 0xffff)); -} - -// unpack 32 bit float into two 16 bit ones, then use octahedral decoding. -float3 decode( float k ) -{ - uint d = asuint(k); - float2 f = float2((d >> 16) / 65535.0, (d & 0xffff) / 65535.0) * 2.0 - 1.0; - - float3 n = float3( f.x, f.y, 1.0 - abs( f.x ) - abs( f.y ) ); - float t = saturate( -n.z ); - n.xy += n.xy >= 0.0 ? -t : t; - return normalize( n ); -} - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/NormalCompression.cginc.meta b/Assets/Obi/Resources/Compute/NormalCompression.cginc.meta deleted file mode 100644 index d98da8185..000000000 --- a/Assets/Obi/Resources/Compute/NormalCompression.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: d05e07f20b7784bac93ad5818826c787 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/Optimization.cginc b/Assets/Obi/Resources/Compute/Optimization.cginc deleted file mode 100644 index dbc54cd9d..000000000 --- a/Assets/Obi/Resources/Compute/Optimization.cginc +++ /dev/null @@ -1,126 +0,0 @@ -#ifndef OPTIMIZATION_INCLUDE -#define OPTIMIZATION_INCLUDE - -#include "MathUtils.cginc" -#include "SurfacePoint.cginc" - -void GetInterpolatedSimplexData(in int simplexStart, - in int simplexSize, - StructuredBuffer simplices, - StructuredBuffer positions, - StructuredBuffer orientations, - StructuredBuffer radii, - float4 convexBary, - inout float4 convexPoint, - inout float4 convexRadii, - inout float4 convexOrientation) -{ - convexPoint = FLOAT4_ZERO; - convexRadii = FLOAT4_ZERO; - convexOrientation = quaternion(0, 0, 0, 0); - for (int j = 0; j < simplexSize; ++j) - { - int particle = simplices[simplexStart + j]; - convexPoint += positions[particle] * convexBary[j]; - convexRadii += radii[particle] * convexBary[j]; - convexOrientation += orientations[particle] * convexBary[j]; - } - convexPoint.w = 0; -} - -// Frank-Wolfe convex optimization algorithm. Returns closest point to a simplex in a signed distance function. -void FrankWolfe(in IDistanceFunction f, - in int simplexStart, - in int simplexSize, - StructuredBuffer positions, - StructuredBuffer orientations, - StructuredBuffer radii, - StructuredBuffer simplices, - inout float4 convexPoint, - inout float4 convexThickness, - inout quaternion convexOrientation, - inout float4 convexBary, - inout SurfacePoint pointInFunction, - int maxIterations, - float tolerance) -{ - for (int i = 0; i < maxIterations; ++i) - { - // sample target function: - f.Evaluate(convexPoint, convexThickness, convexOrientation, pointInFunction); - - // find descent direction: - int descent = 0; - float gap = FLT_MIN; - for (int j = 0; j < simplexSize; ++j) - { - int particle = simplices[simplexStart + j]; - float4 candidate = positions[particle] - convexPoint; - candidate.w = 0; - - // here, we adjust the candidate by projecting it to the engrosed simplex's surface: - candidate -= pointInFunction.normal * (radii[particle].x - convexThickness.x); - - float corr = dot(-pointInFunction.normal, candidate); - if (corr > gap) - { - descent = j; - gap = corr; - } - } - - // if the duality gap is below tolerance threshold, stop iterating. - if (gap < tolerance) - break; - - // update the barycentric coords using 2/(i+2) as the step factor - float stp = 0.3f * 2.0f / (i + 2); - convexBary *= 1 - stp; - switch(descent) - { - case 0: convexBary[0] += stp;break; - case 1: convexBary[1] += stp;break; - case 2: convexBary[2] += stp;break; - case 3: convexBary[3] += stp;break; - } - - // get cartesian coordinates of current solution: - GetInterpolatedSimplexData(simplexStart, simplexSize, simplices, positions, orientations, radii, convexBary, convexPoint, convexThickness, convexOrientation); - } -} - -SurfacePoint Optimize(in IDistanceFunction f, - StructuredBuffer positions, - StructuredBuffer orientations, - StructuredBuffer radii, - StructuredBuffer simplices, - in int simplexStart, - in int simplexSize, - inout float4 convexBary, - out float4 convexPoint, - in int maxIterations = 16, - in float tolerance = 0.004f) -{ - SurfacePoint pointInFunction; - - // get cartesian coordinates of the initial guess: - float4 convexThickness; - quaternion convexOrientation; - GetInterpolatedSimplexData(simplexStart, simplexSize, simplices, positions, orientations, radii, convexBary, convexPoint, convexThickness, convexOrientation); - - // for a 0-simplex (point), perform a single evaluation: - if (simplexSize == 1 || maxIterations < 1) - f.Evaluate(convexPoint, convexThickness, convexOrientation, pointInFunction); - - // for a 1-simplex (edge), perform golden ratio search: - //else if (simplexSize == 2) - // GoldenSearch(ref function, simplexStart, simplexSize, positions, orientations, radii, simplices, ref convexPoint, ref convexThickness, ref convexOrientation, ref convexBary, ref pointInFunction, maxIterations, tolerance * 10); - - // for higher-order simplices, use general Frank-Wolfe convex optimization: - else - FrankWolfe(f, simplexStart, simplexSize, positions, orientations, radii, simplices, convexPoint, convexThickness, convexOrientation, convexBary, pointInFunction, maxIterations, tolerance); - - return pointInFunction; -} - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/Optimization.cginc.meta b/Assets/Obi/Resources/Compute/Optimization.cginc.meta deleted file mode 100644 index fe513de18..000000000 --- a/Assets/Obi/Resources/Compute/Optimization.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: e10fb000e4ce24365adc488a45bbe664 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/ParticleCollisionConstraints.compute b/Assets/Obi/Resources/Compute/ParticleCollisionConstraints.compute deleted file mode 100644 index 64a99c0c2..000000000 --- a/Assets/Obi/Resources/Compute/ParticleCollisionConstraints.compute +++ /dev/null @@ -1,214 +0,0 @@ -#pragma kernel Initialize -#pragma kernel Project -#pragma kernel Apply - -#include "SolverParameters.cginc" -#include "ContactHandling.cginc" -#include "ColliderDefinitions.cginc" -#include "CollisionMaterial.cginc" -#include "Simplex.cginc" -#include "AtomicDeltas.cginc" - - -StructuredBuffer particleIndices; - -StructuredBuffer simplices; -StructuredBuffer invMasses; -StructuredBuffer invRotationalMasses; -StructuredBuffer principalRadii; -StructuredBuffer velocities; -StructuredBuffer prevPositions; -StructuredBuffer fluidInterface; -StructuredBuffer prevOrientations; -StructuredBuffer orientations; - -RWStructuredBuffer positions; -RWStructuredBuffer deltas; -RWStructuredBuffer userData; - -// Vulkan workaround: don't declare a RW array after a counter/append one (particleContacts) since the counter overlaps the first entry in the next array. -RWStructuredBuffer effectiveMasses; -RWStructuredBuffer particleContacts; -StructuredBuffer dispatchBuffer; - -// Variables set from the CPU -uint particleCount; -float substepTime; -float sorFactor; - -[numthreads(128, 1, 1)] -void Initialize (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= dispatchBuffer[3]) return; - - int simplexSizeA; - int simplexSizeB; - int simplexStartA = GetSimplexStartAndSize(particleContacts[i].bodyA, simplexSizeA); - int simplexStartB = GetSimplexStartAndSize(particleContacts[i].bodyB, simplexSizeB); - - float4 simplexVelocityA = float4(0,0,0,0); - float4 simplexPrevPositionA = float4(0,0,0,0); - quaternion simplexPrevOrientationA = quaternion(0, 0, 0, 0); - float simplexRadiusA = 0; - float simplexInvMassA = 0; - float simplexInvRotationalMassA = 0; - - float4 simplexVelocityB = float4(0,0,0,0); - float4 simplexPrevPositionB = float4(0,0,0,0); - quaternion simplexPrevOrientationB = quaternion(0, 0, 0, 0); - float simplexRadiusB = 0; - float simplexInvMassB = 0; - float simplexInvRotationalMassB = 0; - - int j = 0; - for (j = 0; j < simplexSizeA; ++j) - { - int particleIndex = simplices[simplexStartA + j]; - simplexVelocityA += velocities[particleIndex] * particleContacts[i].pointA[j]; - simplexPrevPositionA += prevPositions[particleIndex] * particleContacts[i].pointA[j]; - simplexPrevOrientationA += prevOrientations[particleIndex] * particleContacts[i].pointA[j]; - simplexInvMassA += invMasses[particleIndex] * particleContacts[i].pointA[j]; - simplexInvRotationalMassA += invRotationalMasses[particleIndex] * particleContacts[i].pointA[j]; - simplexRadiusA += EllipsoidRadius(particleContacts[i].normal, prevOrientations[particleIndex], principalRadii[particleIndex].xyz) * particleContacts[i].pointA[j]; - } - - for (j = 0; j < simplexSizeB; ++j) - { - int particleIndex = simplices[simplexStartB + j]; - simplexVelocityB += velocities[particleIndex] * particleContacts[i].pointB[j]; - simplexPrevPositionB += prevPositions[particleIndex] * particleContacts[i].pointB[j]; - simplexPrevOrientationB += prevOrientations[particleIndex] * particleContacts[i].pointB[j]; - simplexInvMassB += invMasses[particleIndex] * particleContacts[i].pointB[j]; - simplexInvRotationalMassB += invRotationalMasses[particleIndex] * particleContacts[i].pointB[j]; - simplexRadiusB += EllipsoidRadius(particleContacts[i].normal, prevOrientations[particleIndex], principalRadii[particleIndex].xyz) * particleContacts[i].pointB[j]; - } - - simplexPrevPositionA.w = 0; - simplexPrevPositionB.w = 0; - - // update contact distance - float4 contactPointA = simplexPrevPositionA - particleContacts[i].normal * simplexRadiusA; - float4 contactPointB = simplexPrevPositionB + particleContacts[i].normal * simplexRadiusB; - - particleContacts[i].dist = dot(contactPointA - contactPointB, particleContacts[i].normal); - - // update contact basis: - CalculateBasis(simplexVelocityA - simplexVelocityB, particleContacts[i].normal,particleContacts[i].tangent); - - // update contact masses: - int aMaterialIndex = collisionMaterialIndices[simplices[simplexStartA]]; - int bMaterialIndex = collisionMaterialIndices[simplices[simplexStartB]]; - bool rollingContacts = (aMaterialIndex >= 0 ? collisionMaterials[aMaterialIndex].rollingContacts > 0 : false) | - (bMaterialIndex >= 0 ? collisionMaterials[bMaterialIndex].rollingContacts > 0 : false); - - float4 invInertiaTensorA = 1.0/(GetParticleInertiaTensor(simplexRadiusA, simplexInvRotationalMassA) + FLOAT4_EPSILON); - float4 invInertiaTensorB = 1.0/(GetParticleInertiaTensor(simplexRadiusB, simplexInvRotationalMassB) + FLOAT4_EPSILON); - - float4 bitangent = GetBitangent(particleContacts[i]); - CalculateContactMassesA(simplexInvMassA, invInertiaTensorA, simplexPrevPositionA, simplexPrevOrientationA, contactPointA, rollingContacts, particleContacts[i].normal,particleContacts[i].tangent,bitangent, effectiveMasses[i].normalInvMassA, effectiveMasses[i].tangentInvMassA, effectiveMasses[i].bitangentInvMassA); - CalculateContactMassesB(simplexInvMassB, invInertiaTensorB, simplexPrevPositionB, simplexPrevOrientationB, contactPointB, rollingContacts, particleContacts[i].normal,particleContacts[i].tangent,bitangent, effectiveMasses[i].normalInvMassB, effectiveMasses[i].tangentInvMassB, effectiveMasses[i].bitangentInvMassB); -} - -[numthreads(128, 1, 1)] -void Project (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= dispatchBuffer[3]) return; - - int simplexSizeA; - int simplexSizeB; - int simplexStartA = GetSimplexStartAndSize(particleContacts[i].bodyA, simplexSizeA); - int simplexStartB = GetSimplexStartAndSize(particleContacts[i].bodyB, simplexSizeB); - - // Combine collision materials (use material from first particle in simplex) - collisionMaterial material = CombineCollisionMaterials(collisionMaterialIndices[simplices[simplexStartA]], collisionMaterialIndices[simplices[simplexStartB]]); - - float4 simplexPositionA = FLOAT4_ZERO, simplexPositionB = FLOAT4_ZERO; - float simplexRadiusA = 0, simplexRadiusB = 0; - float4 simplexUserDataA = FLOAT4_ZERO, simplexUserDataB = FLOAT4_ZERO; - float miscibility = 0; - - int j = 0; - for (j = 0; j < simplexSizeA; ++j) - { - int particleIndex = simplices[simplexStartA + j]; - simplexPositionA += positions[particleIndex] * particleContacts[i].pointA[j]; - simplexRadiusA += EllipsoidRadius(particleContacts[i].normal, orientations[particleIndex], principalRadii[particleIndex].xyz) * particleContacts[i].pointA[j]; - simplexUserDataA += userData[particleIndex] * particleContacts[i].pointA[j]; - miscibility += fluidInterface[particleIndex].w * particleContacts[i].pointA[j]; - } - for (j = 0; j < simplexSizeB; ++j) - { - int particleIndex = simplices[simplexStartB + j]; - simplexPositionB += positions[particleIndex] * particleContacts[i].pointB[j]; - simplexRadiusB += EllipsoidRadius(particleContacts[i].normal, orientations[particleIndex], principalRadii[particleIndex].xyz) * particleContacts[i].pointA[j]; - simplexUserDataB += userData[particleIndex] * particleContacts[i].pointB[j]; - miscibility += fluidInterface[particleIndex].w * particleContacts[i].pointB[j]; - } - - simplexPositionA.w = 0; - simplexPositionB.w = 0; - - float4 posA = simplexPositionA - particleContacts[i].normal * simplexRadiusA; - float4 posB = simplexPositionB + particleContacts[i].normal * simplexRadiusB; - - float normalInvMass = effectiveMasses[i].normalInvMassA + effectiveMasses[i].normalInvMassB; - - // adhesion: - float lambda = SolveAdhesion(particleContacts[i], normalInvMass, posA, posB, material.stickDistance, material.stickiness, substepTime); - - lambda += SolvePenetration(particleContacts[i], normalInvMass, posA, posB, maxDepenetration * substepTime); - - if (abs(lambda) > EPSILON) - { - float shock = shockPropagation * dot(particleContacts[i].normal.xyz, normalizesafe(gravity)); - float4 delta = lambda * particleContacts[i].normal; - - float baryScale = BaryScale(particleContacts[i].pointA); - for (j = 0; j < simplexSizeA; ++j) - { - int particleIndex = simplices[simplexStartA + j]; - float4 delta1 = delta * invMasses[particleIndex] * particleContacts[i].pointA[j] * baryScale * (1 - shock); - AtomicAddPositionDelta(particleIndex, delta1); - } - - baryScale = BaryScale(particleContacts[i].pointB); - for (j = 0; j < simplexSizeB; ++j) - { - int particleIndex = simplices[simplexStartB + j]; - float4 delta2 = -delta * invMasses[particleIndex] * particleContacts[i].pointB[j] * baryScale * (1 + shock); - AtomicAddPositionDelta(particleIndex, delta2); - } - } - - // property diffusion: - if (particleContacts[i].dist < collisionMargin) - { - float diffusionSpeed = miscibility * 0.5 * substepTime; - float4 userDelta = (simplexUserDataB - simplexUserDataA) * diffusionMask * diffusionSpeed; - - for (j = 0; j < simplexSizeA; ++j) - AtomicAddOrientationDelta(simplices[simplexStartA + j], userDelta * particleContacts[i].pointA[j]); - - for (j = 0; j < simplexSizeB; ++j) - AtomicAddOrientationDelta(simplices[simplexStartB + j], -userDelta * particleContacts[i].pointB[j]); - } -} - -[numthreads(128, 1, 1)] -void Apply (uint3 id : SV_DispatchThreadID) -{ - unsigned int threadIndex = id.x; - - if (threadIndex >= particleCount) return; - - int p = particleIndices[threadIndex]; - - ApplyPositionDelta(positions, p, sorFactor); - ApplyUserDataDelta(userData, p); -} - - diff --git a/Assets/Obi/Resources/Compute/ParticleCollisionConstraints.compute.meta b/Assets/Obi/Resources/Compute/ParticleCollisionConstraints.compute.meta deleted file mode 100644 index e53cfc746..000000000 --- a/Assets/Obi/Resources/Compute/ParticleCollisionConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 770004596b21f49118a60c5ad181940c -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/ParticleFrictionConstraints.compute b/Assets/Obi/Resources/Compute/ParticleFrictionConstraints.compute deleted file mode 100644 index 13c92607f..000000000 --- a/Assets/Obi/Resources/Compute/ParticleFrictionConstraints.compute +++ /dev/null @@ -1,187 +0,0 @@ -#pragma kernel Project -#pragma kernel Apply - -#include "ContactHandling.cginc" -#include "Integration.cginc" -#include "CollisionMaterial.cginc" -#include "Simplex.cginc" -#include "AtomicDeltas.cginc" - -StructuredBuffer particleIndices; -StructuredBuffer simplices; -StructuredBuffer prevPositions; -StructuredBuffer prevOrientations; -StructuredBuffer invMasses; -StructuredBuffer invRotationalMasses; -StructuredBuffer principalRadii; - -RWStructuredBuffer positions; -RWStructuredBuffer orientations; -RWStructuredBuffer deltas; - -RWStructuredBuffer particleContacts; -RWStructuredBuffer effectiveMasses; -StructuredBuffer dispatchBuffer; - -// Variables set from the CPU -uint particleCount; -float substepTime; -float stepTime; -float sorFactor; - -[numthreads(128, 1, 1)] -void Project (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= dispatchBuffer[3]) return; - - int simplexSizeA; - int simplexSizeB; - int simplexStartA = GetSimplexStartAndSize(particleContacts[i].bodyA, simplexSizeA); - int simplexStartB = GetSimplexStartAndSize(particleContacts[i].bodyB, simplexSizeB); - - // Combine collision materials (use material from first particle in simplex) - collisionMaterial material = CombineCollisionMaterials(collisionMaterialIndices[simplices[simplexStartA]], - collisionMaterialIndices[simplices[simplexStartB]]); - - float4 prevPositionA = float4(0,0,0,0); - float4 linearVelocityA = float4(0,0,0,0); - float4 angularVelocityA = float4(0,0,0,0); - float invRotationalMassA = 0; - quaternion orientationA = quaternion(0, 0, 0, 0); - float simplexRadiusA = 0; - - float4 prevPositionB = float4(0,0,0,0); - float4 linearVelocityB = float4(0,0,0,0); - float4 angularVelocityB = float4(0,0,0,0); - float invRotationalMassB = 0; - quaternion orientationB = quaternion(0, 0, 0, 0); - float simplexRadiusB = 0; - - int j = 0; - for (j = 0; j < simplexSizeA; ++j) - { - int particleIndex = simplices[simplexStartA + j]; - prevPositionA += prevPositions[particleIndex] * particleContacts[i].pointA[j]; - linearVelocityA += DifferentiateLinear(positions[particleIndex], prevPositions[particleIndex], substepTime) * particleContacts[i].pointA[j]; - angularVelocityA += DifferentiateAngular(orientations[particleIndex], prevOrientations[particleIndex], substepTime) * particleContacts[i].pointA[j]; - invRotationalMassA += invRotationalMasses[particleIndex] * particleContacts[i].pointA[j]; - orientationA += orientations[particleIndex] * particleContacts[i].pointA[j]; - simplexRadiusA += EllipsoidRadius(particleContacts[i].normal, prevOrientations[particleIndex], principalRadii[particleIndex].xyz) * particleContacts[i].pointA[j]; - } - - for (j = 0; j < simplexSizeB; ++j) - { - int particleIndex = simplices[simplexStartB + j]; - prevPositionB += prevPositions[particleIndex] * particleContacts[i].pointB[j]; - linearVelocityB += DifferentiateLinear(positions[particleIndex], prevPositions[particleIndex], substepTime) * particleContacts[i].pointB[j]; - angularVelocityB += DifferentiateAngular(orientations[particleIndex], prevOrientations[particleIndex], substepTime) * particleContacts[i].pointB[j]; - invRotationalMassB += invRotationalMasses[particleIndex] * particleContacts[i].pointB[j]; - orientationB += orientations[particleIndex] * particleContacts[i].pointB[j]; - simplexRadiusB += EllipsoidRadius(particleContacts[i].normal, prevOrientations[particleIndex], principalRadii[particleIndex].xyz) * particleContacts[i].pointB[j]; - } - - float4 rA = FLOAT4_ZERO; - float4 rB = FLOAT4_ZERO; - - // Consider angular velocities if rolling contacts are enabled: - if (material.rollingContacts > 0) - { - rA = -particleContacts[i].normal * simplexRadiusA; - rB = particleContacts[i].normal * simplexRadiusB; - - linearVelocityA += float4(cross(angularVelocityA.xyz, rA.xyz), 0); - linearVelocityB += float4(cross(angularVelocityB.xyz, rB.xyz), 0); - } - - // Calculate relative velocity: - float4 relativeVelocity = linearVelocityA - linearVelocityB; - - // Determine impulse magnitude: - float tangentMass = effectiveMasses[i].tangentInvMassA + effectiveMasses[i].tangentInvMassB; - float bitangentMass = effectiveMasses[i].bitangentInvMassA + effectiveMasses[i].bitangentInvMassB; - float2 impulses = SolveFriction(particleContacts[i],tangentMass,bitangentMass,relativeVelocity, material.staticFriction, material.dynamicFriction, stepTime); - - if (abs(impulses.x) > EPSILON || abs(impulses.y) > EPSILON) - { - float4 tangentImpulse = impulses.x * particleContacts[i].tangent; - float4 bitangentImpulse = impulses.y * GetBitangent(particleContacts[i]); - float4 totalImpulse = tangentImpulse + bitangentImpulse; - - float baryScale = BaryScale(particleContacts[i].pointA); - for (j = 0; j < simplexSizeA; ++j) - { - int particleIndex = simplices[simplexStartA + j]; - float4 delta1 = (tangentImpulse * effectiveMasses[i].tangentInvMassA + bitangentImpulse * effectiveMasses[i].bitangentInvMassA) * substepTime * particleContacts[i].pointA[j] * baryScale; - AtomicAddPositionDelta(particleIndex, delta1); - } - - baryScale = BaryScale(particleContacts[i].pointB); - for (j = 0; j < simplexSizeB; ++j) - { - int particleIndex = simplices[simplexStartB + j]; - float4 delta2 = -(tangentImpulse * effectiveMasses[i].tangentInvMassB + bitangentImpulse * effectiveMasses[i].bitangentInvMassB) * substepTime * particleContacts[i].pointB[j] * baryScale; - AtomicAddPositionDelta(particleIndex, delta2); - } - - // Rolling contacts: - if (material.rollingContacts > 0) - { - float4 invInertiaTensorA = 1.0/(GetParticleInertiaTensor(simplexRadiusA, invRotationalMassA) + FLOAT4_EPSILON); - float4 invInertiaTensorB = 1.0/(GetParticleInertiaTensor(simplexRadiusB, invRotationalMassB) + FLOAT4_EPSILON); - - // Calculate angular velocity deltas due to friction impulse: - float4x4 solverInertiaA = TransformInertiaTensor(invInertiaTensorA, orientationA); - float4x4 solverInertiaB = TransformInertiaTensor(invInertiaTensorB, orientationB); - - float4 angVelDeltaA = mul(solverInertiaA, float4(cross(rA.xyz, totalImpulse.xyz), 0)); - float4 angVelDeltaB = -mul(solverInertiaB, float4(cross(rB.xyz, totalImpulse.xyz), 0)); - - // Final angular velocities, after adding the deltas: - angularVelocityA += angVelDeltaA; - angularVelocityB += angVelDeltaB; - - // Calculate weights (inverse masses): - float invMassA = length(mul(solverInertiaA, normalizesafe(angularVelocityA))); - float invMassB = length(mul(solverInertiaB, normalizesafe(angularVelocityB))); - - // Calculate rolling axis and angular velocity deltas: - float4 rollAxis = FLOAT4_ZERO; - float rollingImpulse = SolveRollingFriction(particleContacts[i],angularVelocityA, angularVelocityB, material.rollingFriction, invMassA, invMassB, rollAxis); - angVelDeltaA += rollAxis * rollingImpulse * invMassA; - angVelDeltaB -= rollAxis * rollingImpulse * invMassB; - - // Apply orientation deltas to particles: - quaternion orientationDeltaA = AngularVelocityToSpinQuaternion(orientationA, angVelDeltaA, substepTime); - quaternion orientationDeltaB = AngularVelocityToSpinQuaternion(orientationB, angVelDeltaB, substepTime); - - for (j = 0; j < simplexSizeA; ++j) - { - int particleIndex = simplices[simplexStartA + j]; - AtomicAddOrientationDelta(particleIndex, orientationDeltaA); - } - - for (j = 0; j < simplexSizeB; ++j) - { - int particleIndex = simplices[simplexStartB + j]; - AtomicAddOrientationDelta(particleIndex, orientationDeltaB); - } - } - } -} - -[numthreads(128, 1, 1)] -void Apply (uint3 id : SV_DispatchThreadID) -{ - unsigned int threadIndex = id.x; - - if (threadIndex >= particleCount) return; - - int p = particleIndices[threadIndex]; - - ApplyPositionDelta(positions, p, sorFactor); - ApplyOrientationDelta(orientations, p, sorFactor); -} - - diff --git a/Assets/Obi/Resources/Compute/ParticleFrictionConstraints.compute.meta b/Assets/Obi/Resources/Compute/ParticleFrictionConstraints.compute.meta deleted file mode 100644 index 48a2a4d33..000000000 --- a/Assets/Obi/Resources/Compute/ParticleFrictionConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: bd14011b19e9c47d1964f351a7ed4df7 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/ParticleGrid.compute b/Assets/Obi/Resources/Compute/ParticleGrid.compute deleted file mode 100644 index a2cc43eb2..000000000 --- a/Assets/Obi/Resources/Compute/ParticleGrid.compute +++ /dev/null @@ -1,626 +0,0 @@ -#include "GridUtils.cginc" -#include "CollisionMaterial.cginc" -#include "ColliderDefinitions.cginc" -#include "ContactHandling.cginc" -#include "SolverParameters.cginc" -#include "Simplex.cginc" -#include "Phases.cginc" -#include "Bounds.cginc" -#include "Simplex.cginc" - -#pragma kernel Clear -#pragma kernel InsertSimplices -#pragma kernel FindPopulatedLevels -#pragma kernel SortSimplices -#pragma kernel BuildFluidDispatch -#pragma kernel SortFluidSimplices -#pragma kernel BuildMortonIndices -#pragma kernel MortonSort -#pragma kernel FindFluidNeighborsInSameLevel -#pragma kernel FindFluidNeighborsInUpperLevels -#pragma kernel BuildContactList -#pragma kernel BuildFluidParticleIndexBuffer - -StructuredBuffer solverBounds; -StructuredBuffer simplexBounds; -StructuredBuffer simplices; // particle indices in each simplex. - -StructuredBuffer positions; -StructuredBuffer restPositions; -StructuredBuffer principalRadii; -StructuredBuffer fluidMaterials; -StructuredBuffer fluidInterface; -StructuredBuffer normals; - -StructuredBuffer orientations; -StructuredBuffer restOrientations; - -StructuredBuffer velocities; -StructuredBuffer invMasses; -StructuredBuffer phases; -StructuredBuffer filters; - -StructuredBuffer R_cellCoords; // for each item, its cell coordinates. -StructuredBuffer R_offsetInCell; // for each item, its offset within the cell. -StructuredBuffer R_cellOffsets; // start of each cell in the sorted item array. -StructuredBuffer R_cellCounts; // number of item in each cell. -StructuredBuffer R_levelPopulation; - -RWStructuredBuffer cellCoords; // for each item, its cell coordinates. -RWStructuredBuffer offsetInCell; // for each item, its offset within the cell. -RWStructuredBuffer cellOffsets; // start of each cell in the sorted item array. -RWStructuredBuffer cellCounts; // number of item in each cell. - -RWStructuredBuffer cellHashToMortonIndex; - -RWStructuredBuffer mortonSortedCellHashes; -RWStructuredBuffer sortedSimplexToFluid; // fluidSimplices -RWStructuredBuffer sortedFluidIndices; -RWStructuredBuffer sortedSimplexIndices; - -RWStructuredBuffer sortedPositions; -RWStructuredBuffer sortedFluidMaterials; -RWStructuredBuffer sortedFluidInterface; -RWStructuredBuffer sortedPrincipalRadii; - -RWStructuredBuffer neighbors; -RWStructuredBuffer neighborCounts; - -RWStructuredBuffer particleContacts; -RWStructuredBuffer contactPairs; - -RWStructuredBuffer fluidDispatchBuffer; -RWStructuredBuffer dispatchBuffer; - -RWStructuredBuffer colors; - -uint maxContacts; -uint maxNeighbors; -uint fluidParticleCount; -float deltaTime; - -const uint groupWidth; -const uint groupHeight; -const uint stepIndex; - -/** -For each cell, calculate coords and morton. This only works if there’s no collisions, so use the coord of one random particle that maps to that cell: - -For each simplex: -Determine cell coords (any particle in it will do) and hash, store in array per cell. Sort array by morton(coords), create array that maps from cell hash to morton index, then use as cellCounts[mortonIndex]. - -This way we have sorted particles and cells, and can use for fluid surface. Win win!! -*/ - -[numthreads(128, 1, 1)] -void Clear (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= maxCells) - return; - - if (i == 0) - { - for (int l = 0; l <= GRID_LEVELS; ++l) - levelPopulation[l] = 0; - } - - // clear all cell counts to zero, and cell offsets to invalid. - cellOffsets[i] = INVALID; - cellCounts[i] = 0; - mortonSortedCellHashes[i] = i; -} - -[numthreads(128, 1, 1)] -void InsertSimplices (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= pointCount + edgeCount + triangleCount) return; - - // calculate simplex cell index: - int level = GridLevelForSize(simplexBounds[i].MaxAxisLength()); - float cellSize = CellSizeOfLevel(level); - int4 cellCoord = int4(floor((simplexBounds[i].Center() - solverBounds[0].min_)/ cellSize).xyz,level); - - // if the solver is 2D, project to the z = 0 cell. - if (mode == 1) cellCoord[2] = 0; - - // insert simplex in cell: - uint cellIndex = GridHash(cellCoord); - cellCoords[i] = cellCoord; - InterlockedAdd(cellCounts[cellIndex],1,offsetInCell[i]); - - // assign minimum morton code to cell - // (there may be hash collisions mapping two coordinates to the same cell, that's why we use atomic minimum) - float mortonCellSize = solverBounds[0].MaxAxisLength() / 1024.0; - uint morton = EncodeMorton3(floor((simplexBounds[i].Center() - solverBounds[0].min_).xyz / mortonCellSize)); - InterlockedMin(cellOffsets[cellIndex], morton); - - // clear neighbor count: - neighborCounts[i] = 0; - - // atomically increase this level's population by one: - InterlockedAdd(levelPopulation[1 + level],1); -} - -[numthreads(128,1,1)] -void MortonSort(uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - - uint hIndex = i & (groupWidth - 1); - uint indexLeft = hIndex + (groupHeight + 1) * (i / groupWidth); - uint rightStepSize = stepIndex == 0 ? groupHeight - 2 * hIndex : (groupHeight + 1) / 2; - uint indexRight = indexLeft + rightStepSize; - - // Exit if out of bounds - if (indexRight >= maxCells) return; - - // get morton index for both cells: - uint mortonL = cellOffsets[indexLeft]; - uint mortonR = cellOffsets[indexRight]; - - // get cell counts: - uint simplexIndexL = cellCounts[indexLeft]; - uint simplexIndexR = cellCounts[indexRight]; - - uint orderL = mortonSortedCellHashes[indexLeft]; - uint orderR = mortonSortedCellHashes[indexRight]; - - // Swap entries if order is incorrect - if (mortonL > mortonR) - { - cellCounts[indexLeft] = simplexIndexR; - cellCounts[indexRight] = simplexIndexL; - - cellOffsets[indexLeft] = mortonR; - cellOffsets[indexRight] = mortonL; - - mortonSortedCellHashes[indexLeft] = orderR; - mortonSortedCellHashes[indexRight] = orderL; - } -} - -[numthreads(128,1,1)] -void BuildMortonIndices(uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= maxCells) return; - - // build map from cell hash to index in morton-sorted cell data. - int index = mortonSortedCellHashes[i]; - cellHashToMortonIndex[index] = i; -} - -[numthreads(128, 1, 1)] -void SortSimplices (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - if (i >= pointCount + edgeCount + triangleCount) return; - - // write simplex index to its index in the grid: - uint cellIndex = cellHashToMortonIndex[GridHash(R_cellCoords[i])]; - uint gridIndex = R_cellOffsets[cellIndex] + R_offsetInCell[i]; - sortedSimplexIndices[gridIndex] = i; // maps from index in grid to simplex index. - - // flag fluid simplices with 1. we'll later do a prefix sum of this array - // to get a compact list of grid-sorted fluid indices. - int size; - int p = simplices[GetSimplexStartAndSize(i, size)]; - sortedFluidIndices[gridIndex] = ((phases[p] & Fluid) != 0) ? 1:0; -} - -[numthreads(1, 1, 1)] -void BuildFluidDispatch (uint3 id : SV_DispatchThreadID) -{ - // since we are using *exclusive* prefix sum, - // we must add the last entries of both buffers together to get total count of fluid simplices. - - int lastEntry = pointCount + edgeCount + triangleCount - 1; - fluidDispatchBuffer[3] = sortedSimplexToFluid[lastEntry] + sortedFluidIndices[lastEntry]; - fluidDispatchBuffer[0] = fluidDispatchBuffer[3] / 128 + 1; -} - -[numthreads(128, 1, 1)] -void SortFluidSimplices (uint3 id : SV_DispatchThreadID) //rename to sort fluid data. -{ - // check all simplices. - uint i = id.x; - if (i >= pointCount + edgeCount + triangleCount) return; - - uint cellIndex = cellHashToMortonIndex[GridHash(R_cellCoords[i])]; - uint gridIndex = R_cellOffsets[cellIndex] + R_offsetInCell[i]; - - // copy the data of first particle in each fluid simplex to sorted arrays - // using prefix sum results: same as grid order, but contiguous. - int size; - int p = simplices[GetSimplexStartAndSize(i, size)]; - - if ((phases[p] & Fluid) != 0) - { - int fluidIndex = sortedSimplexToFluid[gridIndex]; - sortedFluidIndices[fluidIndex] = i; - - sortedPositions[fluidIndex] = positions[p]; - sortedFluidMaterials[fluidIndex] = fluidMaterials[p]; - sortedFluidInterface[fluidIndex] = fluidInterface[p]; - sortedPrincipalRadii[fluidIndex] = principalRadii[p]; - } - else - sortedSimplexToFluid[gridIndex] = -1; -} - -int GetSimplexGroup(in int simplexStart,in int simplexSize, out int flags, out int category, out int mask, out bool restPositionsEnabled) -{ - flags = 0; - int group = 0; - category = 0; - mask = 0; - restPositionsEnabled = false; - - for (int j = 0; j < simplexSize; ++j) - { - int particleIndex = simplices[simplexStart + j]; - group = max(group, phases[particleIndex] & GroupMask); - flags |= phases[particleIndex] & ~GroupMask; // get flags from phase - category |= filters[particleIndex] & CategoryMask; // get category from filter - mask |= (filters[particleIndex] & MaskMask) >> 16; // get mask from filter - restPositionsEnabled = restPositionsEnabled || (restPositions[particleIndex].w > 0.5f); - } - - return group; -} - -struct simplexData -{ - int index; - int start; - int size; - int category; - int mask; - int flags; - int group; - bool restPosEnabled; -}; - -simplexData GetSimplexData(int indexInGrid) -{ - simplexData s; - s.index = sortedSimplexIndices[indexInGrid]; - s.start = GetSimplexStartAndSize(s.index, s.size); - s.group = GetSimplexGroup(s.start, s.size, s.flags, s.category, s.mask, s.restPosEnabled); - return s; -} - -void InteractionTest(simplexData a, simplexData b) -{ - if ((a.flags & Fluid) == 0 || (b.flags & Fluid) == 0) - { - // immediately reject simplex pairs that share particles: - int j = 0; - for (int i = 0; i < a.size; ++i) - for (j = 0; j < b.size; ++j) - if (simplices[a.start + i] == simplices[b.start + j]) - return; - - // if all particles are in the same group: - if (a.group == b.group) - { - // if none are self-colliding, reject the pair. - if ((a.flags & b.flags & SelfCollide) == 0) - return; - } - // category-based filtering: - else if ((a.mask & b.category) == 0 || (b.mask & a.category) == 0) - return; - - // swap simplices (except for category) so that B is always the one-sided one. - int categoryA = a.category; - int categoryB = b.category; - if ((a.flags & OneSided) != 0 && categoryA < categoryB) - { - simplexData t = a; - a = b; - b = t; - } - - float4 simplexBary = BarycenterForSimplexOfSize(a.size); - float4 simplexPoint; - - Simplex simplexShape; - simplexShape.simplexStart = b.start; - simplexShape.simplexSize = b.size; - simplexShape.simplices = simplices; - simplexShape.positions = restPositions; - float simplexRadiusA = 0; float simplexRadiusB = 0; - - // skip the contact if there's self-intersection at rest: - if (a.group == b.group && (a.restPosEnabled || b.restPosEnabled)) - { - SurfacePoint restPoint = Optimize(simplexShape, restPositions, restOrientations, principalRadii, - simplices, a.start, a.size, simplexBary, simplexPoint, 4, 0); - - for (j = 0; j < a.size; ++j) - simplexRadiusA += principalRadii[simplices[a.start + j]].x * simplexBary[j]; - - for (j = 0; j < b.size; ++j) - simplexRadiusB += principalRadii[simplices[b.start + j]].x * restPoint.bary[j]; - - // compare distance along contact normal with radius. - if (dot(simplexPoint - restPoint.pos, restPoint.normal) < simplexRadiusA + simplexRadiusB) - return; - } - - simplexBary = BarycenterForSimplexOfSize(a.size); - simplexShape.positions = positions; - - SurfacePoint surfacePoint = Optimize(simplexShape, positions, orientations, principalRadii, - simplices, a.start, a.size, simplexBary, simplexPoint); - - simplexRadiusA = 0; simplexRadiusB = 0; - float4 velocityA = FLOAT4_ZERO, velocityB = FLOAT4_ZERO, normalA = FLOAT4_ZERO, normalB = FLOAT4_ZERO; - float invMassA = 0, invMassB = 0; - - for (j = 0; j < a.size; ++j) - { - int particleIndex = simplices[a.start + j]; - simplexRadiusA += principalRadii[particleIndex].x * simplexBary[j]; - velocityA += velocities[particleIndex] * simplexBary[j]; - float4 nrm = asfloat(normals[particleIndex]); - normalA += (nrm.w < 0 ? float4(rotate_vector(orientations[particleIndex],nrm.xyz), nrm.w) : nrm) * simplexBary[j]; - invMassA += invMasses[particleIndex] * simplexBary[j]; - } - - for (j = 0; j < b.size; ++j) - { - int particleIndex = simplices[b.start + j]; - simplexRadiusB += principalRadii[particleIndex].x * surfacePoint.bary[j]; - velocityB += velocities[particleIndex] * surfacePoint.bary[j]; - float4 nrm = asfloat(normals[particleIndex]); - normalB += (nrm.w < 0 ? float4(rotate_vector(orientations[particleIndex],nrm.xyz), nrm.w) : nrm) * surfacePoint.bary[j]; - invMassB += invMasses[particleIndex] * simplexBary[j]; - } - - // no contact between fixed simplices: TODO: make optional - //if (!(invMassA > 0 || invMassB > 0)) - // return; - - float dAB = dot(simplexPoint - surfacePoint.pos, surfacePoint.normal); - float vel = dot(velocityA - velocityB, surfacePoint.normal); - - // check if the projected velocity along the contact normal will get us within collision distance. - if (vel * deltaTime + dAB <= simplexRadiusA + simplexRadiusB + collisionMargin) - { - // adapt collision normal for one-sided simplices: - if ((b.flags & OneSided) != 0 && categoryA < categoryB) - OneSidedNormal(normalB, surfacePoint.normal); - - // during inter-collision, if either particle contains SDF data and they overlap: - if (a.group != b.group && (normalB.w < 0 || normalA.w < 0) && dAB * 1.05f <= simplexRadiusA + simplexRadiusB) - { - // as normal, pick SDF gradient belonging to least penetration distance: - float4 nij = normalB; - if (normalB.w >= 0 || (normalA.w < 0 && normalB.w < normalA.w)) - nij = float4(-normalA.xyz, normalA.w); - - // for boundary particles, use one sided sphere normal: - if (abs(nij.w) <= max(simplexRadiusA, simplexRadiusB) * 1.5f) - OneSidedNormal(nij, surfacePoint.normal); - else - surfacePoint.normal = nij; - } - - uint count = particleContacts.IncrementCounter(); - if (count < maxContacts) - { - contact c = (contact)0; - - c.normal = surfacePoint.normal; - c.pointA = simplexBary; - c.pointB = surfacePoint.bary; - c.bodyA = a.index; - c.bodyB = b.index; - - particleContacts[count] = c; - contactPairs[count] = uint2(c.bodyA,c.bodyB); - - InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); - InterlockedMax(dispatchBuffer[3], count + 1); - } - } - } -} - -[numthreads(128, 1, 1)] -void BuildContactList (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= pointCount + edgeCount + triangleCount) return; - - // current cell: - int4 cellCoord = R_cellCoords[i]; - uint cellIndex = cellHashToMortonIndex[GridHash(cellCoord)]; - uint n = R_cellOffsets[cellIndex]; - uint end = n + R_cellCounts[cellIndex]; - uint indexInGrid = n + R_offsetInCell[i]; - - simplexData data1 = GetSimplexData(indexInGrid); - - // in current cell, only consider simplices that appear after this one: - for (++indexInGrid; indexInGrid < end; ++indexInGrid) - InteractionTest(data1,GetSimplexData(indexInGrid)); - - // neighbour cells ahead of the current one in the same level: - for(int j = 0; j < 13; ++j) - { - // get first simplex in neighbor cell: - cellIndex = cellHashToMortonIndex[GridHash(cellCoord + aheadCellNeighborhood[j])]; - n = R_cellOffsets[cellIndex]; - end = n + R_cellCounts[cellIndex]; - - // iterate through all simplices in neighbor cell: - for (; n < end; ++n) - InteractionTest(data1,GetSimplexData(n)); - } - - // higher grid levels: - for (uint m = 1; m <= R_levelPopulation[0]; ++m) - { - uint l = R_levelPopulation[m]; - if (l <= (uint)cellCoord.w) continue; - - int4 parentCellCoords = GetParentCellCoords(cellCoord, l); - - for (int j = 0; j < 27; ++j) - { - // get first simplex in neighbor cell: - cellIndex = cellHashToMortonIndex[GridHash(parentCellCoords + cellNeighborhood[j])]; - n = R_cellOffsets[cellIndex]; - end = n + R_cellCounts[cellIndex]; - - // iterate through all simplices in neighbor cell: - for (; n < end; ++n) - InteractionTest(data1,GetSimplexData(n)); - } - } -} - -[numthreads(128, 1, 1)] -void FindFluidNeighborsInSameLevel (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatchBuffer[3]) return; - - // current cell: - int4 cellCoord = R_cellCoords[sortedFluidIndices[i]]; - int4 neighborCoord; - uint cellIndex, n, end; - - float4 d; - float interactionRadius, cellSize; - int fluidB; - - float4 posA = sortedPositions[i]; - float radA = sortedFluidMaterials[i].x; - - uint count = 0; - - // neighbour cells in same level. We don't need atomics for this, - // and we can guarantee that the neighbors for each particle will - // appear in sorted order. - for(int j = 0; j < 27; ++j) - { - // get cell start/end - neighborCoord = cellCoord + cellNeighborhood[j]; - cellIndex = cellHashToMortonIndex[GridHash(neighborCoord)]; - n = R_cellOffsets[cellIndex]; - end = n + R_cellCounts[cellIndex]; - - // iterate through all simplices in neighbor cell: - for (; n < end; ++n) - { - fluidB = sortedSimplexToFluid[n]; - if (fluidB >= 0 && fluidB != (int)i) - { - // due to hash collisions, two neighboring cells might map to the same - // hash bucket, and we'll add the same set of particles twice to the neighbors list. - // So we only consider particles that have the same spatial coordinates as the cell. - if (any (R_cellCoords[sortedFluidIndices[fluidB]] - neighborCoord)) - continue; - - // calculate particle center distance: - d = posA - sortedPositions[fluidB]; d.w = 0; - interactionRadius = max(radA, sortedFluidMaterials[fluidB].x) + collisionMargin; - - if (dot(d,d) <= interactionRadius * interactionRadius && count < maxNeighbors) - neighbors[maxNeighbors * i + (count++)] = fluidB; - } - } - } - - neighborCounts[i] = count; -} - -[numthreads(128, 1, 1)] -void FindFluidNeighborsInUpperLevels (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatchBuffer[3]) return; - - int s = sortedFluidIndices[i]; - - int4 cellCoord = R_cellCoords[s]; - int4 parentCellCoords, neighborCoord; - uint cellIndex, n, end; - - float4 d; - float interactionRadius, cellSize; - int fluidB; - - float4 posA = sortedPositions[i]; - float radA = sortedFluidMaterials[i].x; - - for (uint m = 1; m <= R_levelPopulation[0]; ++m) - { - uint l = R_levelPopulation[m]; - - // skip levels below this particle's level. - if (l <= (uint)cellCoord.w) continue; - - parentCellCoords = GetParentCellCoords(cellCoord, l); - - for (int j = 0; j < 27; ++j) - { - // get cell start/end - neighborCoord = parentCellCoords + cellNeighborhood[j]; - cellIndex = cellHashToMortonIndex[GridHash(neighborCoord)]; - n = R_cellOffsets[cellIndex]; - end = n + R_cellCounts[cellIndex]; - - // iterate through all simplices in neighbor cell: - for (; n < end; ++n) - { - fluidB = sortedSimplexToFluid[n]; - if (fluidB >= 0) - { - // due to hash collisions, two neighboring cells might map to the same - // hash bucket, and we'll add the same set of particles twice to the neighbors list. - // So we only consider particles that have the same spatial coordinates as the cell. - if (any (R_cellCoords[sortedFluidIndices[fluidB]] - neighborCoord)) - continue; - - // calculate particle center distance: - d = posA - sortedPositions[fluidB]; d.w = 0; - interactionRadius = max(radA, sortedFluidMaterials[fluidB].x) + collisionMargin; - - if (dot(d,d) <= interactionRadius * interactionRadius) - { - uint entryA, entryB; - InterlockedAdd(neighborCounts[i], 1, entryA); - InterlockedAdd(neighborCounts[fluidB], 1, entryB); - - if (entryA < maxNeighbors && entryB < maxNeighbors) - { - neighbors[maxNeighbors * i + entryA] = fluidB; - neighbors[maxNeighbors * fluidB + entryB] = i; - } - } - } - } - } - } - -} - -[numthreads(128, 1, 1)] -void BuildFluidParticleIndexBuffer (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatchBuffer[3]) return; - - // convert simplex index to start in indices array. - int o; - sortedFluidIndices[i] = simplices[GetSimplexStartAndSize(sortedFluidIndices[i], o)]; -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/ParticleGrid.compute.meta b/Assets/Obi/Resources/Compute/ParticleGrid.compute.meta deleted file mode 100644 index 15d29e6b1..000000000 --- a/Assets/Obi/Resources/Compute/ParticleGrid.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 282fd6222e54d48fea7f2d1a74501fa9 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/ParticleMeshBuilding.compute b/Assets/Obi/Resources/Compute/ParticleMeshBuilding.compute deleted file mode 100644 index e990898dc..000000000 --- a/Assets/Obi/Resources/Compute/ParticleMeshBuilding.compute +++ /dev/null @@ -1,72 +0,0 @@ -#pragma kernel BuildMesh - -#include "MathUtils.cginc" - -struct RendererData -{ - float4 color; - float radiusScale; -}; - -StructuredBuffer particleIndices; - -StructuredBuffer positions; -StructuredBuffer orientations; -StructuredBuffer radii; -StructuredBuffer colors; - -StructuredBuffer rendererIndices; -StructuredBuffer rendererData; - -RWByteAddressBuffer vertices; -RWByteAddressBuffer indices; - -uint firstParticle; -uint particleCount; - -[numthreads(128, 1, 1)] -void BuildMesh (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= particleCount) return; - - int p = particleIndices[firstParticle + i]; - int r = rendererIndices[firstParticle + i]; - - // <<2 = multiply by 4 to get byte address, since a float/int is 4 bytes in size. - - // particle data is the same for all 4 vertices: - for (uint v = i*4; v < i*4 + 4; ++v) - { - int base = v*23; - - // pos - vertices.Store4(base<<2, asuint(float4(positions[p].xyz, 1))); - - // color: - vertices.Store4((base+7)<<2, asuint(colors[p] * rendererData[r].color)); - - // b1, b2, b3: - vertices.Store4((base+11)<<2, asuint( float4(rotate_vector(orientations[p],float3(1,0,0)),radii[p].x * radii[p].w * rendererData[r].radiusScale) )); - vertices.Store4((base+15)<<2, asuint( float4(rotate_vector(orientations[p],float3(0,1,0)),radii[p].y * radii[p].w * rendererData[r].radiusScale) )); - vertices.Store4((base+19)<<2, asuint( float4(rotate_vector(orientations[p],float3(0,0,1)),radii[p].z * radii[p].w * rendererData[r].radiusScale) )); - } - - //different offset for each vertex: - int base = i*4; - vertices.Store3((base*23 + 4)<<2, asuint(float3(1,1,0))); - vertices.Store3(((base+1)*23 + 4)<<2, asuint(float3(-1,1,0))); - vertices.Store3(((base+2)*23 + 4)<<2, asuint(float3(-1,-1,0))); - vertices.Store3(((base+3)*23 + 4)<<2, asuint(float3(1,-1,0))); - - // indices: - indices.Store((i*6)<<2, asuint(i*4+2)); - indices.Store((i*6+1)<<2, asuint(i*4+1)); - indices.Store((i*6+2)<<2, asuint(i*4)); - - indices.Store((i*6+3)<<2, asuint(i*4+3)); - indices.Store((i*6+4)<<2, asuint(i*4+2)); - indices.Store((i*6+5)<<2, asuint(i*4)); -} - diff --git a/Assets/Obi/Resources/Compute/ParticleMeshBuilding.compute.meta b/Assets/Obi/Resources/Compute/ParticleMeshBuilding.compute.meta deleted file mode 100644 index c28621d12..000000000 --- a/Assets/Obi/Resources/Compute/ParticleMeshBuilding.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a5989e4df4ce944ea96d566e7df4d68a -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/PathFrame.cginc b/Assets/Obi/Resources/Compute/PathFrame.cginc deleted file mode 100644 index e9ea2742a..000000000 --- a/Assets/Obi/Resources/Compute/PathFrame.cginc +++ /dev/null @@ -1,158 +0,0 @@ -#ifndef PATHFRAME_INCLUDE -#define PATHFRAME_INCLUDE - -#include "MathUtils.cginc" - -struct pathFrame -{ - float3 position; - float3 tangent; - float3 normal; - float3 binormal; - - float4 color; - float thickness; - - - void Initialize(float3 position, float3 tangent, float3 normal, float3 binormal, float4 color, float thickness){ - this.position = position; - this.normal = normal; - this.tangent = tangent; - this.binormal = binormal; - this.color = color; - this.thickness = thickness; - } - - void Reset() - { - position = float3(0,0,0); - tangent = float3(0,0,1); - normal = float3(0,1,0); - binormal = float3(1,0,0); - color = float4(1,1,1,1); - thickness = 0; - } - - void SetTwist(float twist) - { - quaternion twistQ = axis_angle(tangent, radians(twist)); - normal = rotate_vector(twistQ, normal); - binormal = rotate_vector(twistQ, binormal); - } - - void Transport(pathFrame frame, float twist) - { - // Calculate delta rotation: - quaternion rotQ = from_to_rotation(tangent, frame.tangent); - quaternion twistQ = axis_angle(frame.tangent, radians(twist)); - quaternion finalQ = qmul(twistQ , rotQ); - - // Rotate previous frame axes to obtain the new ones: - normal = rotate_vector(finalQ, normal); - binormal = rotate_vector(finalQ, binormal); - tangent = frame.tangent; - position = frame.position; - thickness = frame.thickness; - color = frame.color; - } - - void Transport(float3 newPosition, float3 newTangent, float twist) - { - // Calculate delta rotation: - quaternion rotQ = from_to_rotation(tangent, newTangent); - quaternion twistQ = axis_angle(newTangent, radians(twist)); - quaternion finalQ = qmul(twistQ, rotQ); - - // Rotate previous frame axes to obtain the new ones: - normal = rotate_vector(finalQ, normal); - binormal = rotate_vector(finalQ, binormal); - tangent = newTangent; - position = newPosition; - - } - - // Transport, hinting the normal. - void Transport(float3 newPosition, float3 newTangent, float3 newNormal, float twist) - { - normal = rotate_vector(axis_angle(newTangent,radians(twist)), newNormal); - tangent = newTangent; - binormal = cross(normal, tangent); - position = newPosition; - } - - float3x3 ToMatrix(int mainAxis) - { - float3x3 basis; - - if (mainAxis == 0) - { - basis._m00_m10_m20 = tangent; - basis._m01_m11_m21 = binormal; - basis._m02_m12_m22 = normal; - } - else if (mainAxis == 1) - { - basis._m01_m11_m21 = tangent; - basis._m02_m12_m22 = binormal; - basis._m00_m10_m20 = normal; - } - else - { - basis._m02_m12_m22 = tangent; - basis._m00_m10_m20 = binormal; - basis._m01_m11_m21 = normal; - } - - /*int xo = (mainAxis) % 3; - int yo = (mainAxis + 1) % 3; - int zo = (mainAxis + 2) % 3; - - basis[xo] = tangent; - basis[yo] = binormal; - basis[zo] = normal;*/ - - return basis; - } -}; - -void WeightedSum(float w1, float w2, float w3, in pathFrame c1, in pathFrame c2, in pathFrame c3, out pathFrame sum) -{ - sum.position.x = c1.position.x * w1 + c2.position.x * w2 + c3.position.x * w3; - sum.position.y = c1.position.y * w1 + c2.position.y * w2 + c3.position.y * w3; - sum.position.z = c1.position.z * w1 + c2.position.z * w2 + c3.position.z * w3; - - sum.tangent.x = c1.tangent.x * w1 + c2.tangent.x * w2 + c3.tangent.x * w3; - sum.tangent.y = c1.tangent.y * w1 + c2.tangent.y * w2 + c3.tangent.y * w3; - sum.tangent.z = c1.tangent.z * w1 + c2.tangent.z * w2 + c3.tangent.z * w3; - - sum.normal.x = c1.normal.x * w1 + c2.normal.x * w2 + c3.normal.x * w3; - sum.normal.y = c1.normal.y * w1 + c2.normal.y * w2 + c3.normal.y * w3; - sum.normal.z = c1.normal.z * w1 + c2.normal.z * w2 + c3.normal.z * w3; - - sum.binormal.x = c1.binormal.x * w1 + c2.binormal.x * w2 + c3.binormal.x * w3; - sum.binormal.y = c1.binormal.y * w1 + c2.binormal.y * w2 + c3.binormal.y * w3; - sum.binormal.z = c1.binormal.z * w1 + c2.binormal.z * w2 + c3.binormal.z * w3; - - sum.color.x = c1.color.x * w1 + c2.color.x * w2 + c3.color.x * w3; - sum.color.y = c1.color.y * w1 + c2.color.y * w2 + c3.color.y * w3; - sum.color.z = c1.color.z * w1 + c2.color.z * w2 + c3.color.z * w3; - sum.color.w = c1.color.w * w1 + c2.color.w * w2 + c3.color.w * w3; - - sum.thickness = c1.thickness * w1 + c2.thickness * w2 + c3.thickness * w3; -} - -pathFrame addFrames(pathFrame c1, pathFrame c2) -{ - pathFrame r; - r.Initialize(c1.position + c2.position, c1.tangent + c2.tangent, c1.normal + c2.normal, c1.binormal + c2.binormal, c1.color + c2.color, c1.thickness + c2.thickness); - return r; -} - -pathFrame multiplyFrame(float f, pathFrame c) -{ - pathFrame r; - r.Initialize(c.position * f, c.tangent * f, c.normal * f, c.binormal * f, c.color * f, c.thickness * f); - return r; -} - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/PathFrame.cginc.meta b/Assets/Obi/Resources/Compute/PathFrame.cginc.meta deleted file mode 100644 index fa818faa6..000000000 --- a/Assets/Obi/Resources/Compute/PathFrame.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 10c2f01e614d74b30b6a489c96e8a0ce -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/PathSmoothing.compute b/Assets/Obi/Resources/Compute/PathSmoothing.compute deleted file mode 100644 index 06bf6ae5b..000000000 --- a/Assets/Obi/Resources/Compute/PathSmoothing.compute +++ /dev/null @@ -1,235 +0,0 @@ -#pragma kernel ParallelTransport -#pragma kernel Decimate -#pragma kernel ChaikinSmooth - -#include "PathFrame.cginc" - -struct smootherPathData -{ - uint smoothing; - float decimation; - float twist; - float restLength; - float smoothLength; - bool usesOrientedParticles; -}; - -StructuredBuffer renderablePositions; -StructuredBuffer renderableOrientations; -StructuredBuffer principalRadii; -StructuredBuffer colors; - -RWStructuredBuffer pathData; -StructuredBuffer particleIndices; - -RWStructuredBuffer pathFrames; -StructuredBuffer frameOffsets; -RWStructuredBuffer decimatedFrameCounts; - -RWStructuredBuffer smoothFrames; -StructuredBuffer smoothFrameOffsets; -RWStructuredBuffer smoothFrameCounts; - -// Variables set from the CPU -uint chunkCount; - -void PathFrameFromParticle(inout pathFrame frame, int particleIndex, bool useOrientedParticles, bool interpolateOrientation = false) -{ - // Update current frame values from particles: - frame.position = renderablePositions[particleIndex].xyz; - frame.thickness = principalRadii[particleIndex][0]; - frame.color = colors[particleIndex]; - - // Use particle orientation if possible: - if (useOrientedParticles) - { - quaternion current = renderableOrientations[particleIndex]; - quaternion previous = renderableOrientations[max(0, particleIndex - 1)]; - float4x4 average = q_toMatrix(interpolateOrientation ? q_slerp(current, previous, 0.5f) : current); - frame.normal = average._m01_m11_m21; - frame.binormal = average._m00_m10_m20; - frame.tangent = average._m02_m12_m22; - } -} - - -[numthreads(128, 1, 1)] -void ParallelTransport (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= chunkCount) return; - - pathFrame nextFrame; - pathFrame currFrame; - pathFrame prevFrame; - - nextFrame.Reset(); - currFrame.Reset(); - prevFrame.Reset(); - - int firstIndex = i > 0 ? frameOffsets[i - 1] : 0; - int frameCount = frameOffsets[i] - firstIndex; - - // initialize current and previous frame: - PathFrameFromParticle(currFrame, particleIndices[firstIndex], pathData[i].usesOrientedParticles, false); - prevFrame = currFrame; - - // parallel transport: - for (int m = 1; m <= frameCount; ++m) - { - int index = firstIndex + min(m, frameCount - 1); - int pIndex = particleIndices[index]; - - // generate curve frame from particle: - PathFrameFromParticle(nextFrame, pIndex, pathData[i].usesOrientedParticles); - - if (pathData[i].usesOrientedParticles) - { - // copy frame directly. - prevFrame = currFrame; - } - else - { - // perform parallel transport, using forward / backward average to calculate tangent. - // if the average is too small, reuse the previous frame tangent. - currFrame.tangent = normalizesafe((currFrame.position - prevFrame.position) + - (nextFrame.position - currFrame.position), prevFrame.tangent); - prevFrame.Transport(currFrame, pathData[i].twist); - } - - // advance current frame: - currFrame = nextFrame; - pathFrames[firstIndex + m - 1] = prevFrame; - } -} - -[numthreads(128, 1, 1)] -void Decimate (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= chunkCount) return; - - int firstInputIndex = i > 0 ? frameOffsets[i - 1] : 0; - int inputFrameCount = frameOffsets[i] - firstInputIndex; - - // no decimation, no work to do, just return: - if (pathData[i].decimation < 0.00001f || inputFrameCount < 3) - { - decimatedFrameCounts[i] = inputFrameCount; - return; - } - - float scaledThreshold = pathData[i].decimation * pathData[i].decimation * 0.01f; - - int start = 0; - int end = inputFrameCount - 1; - decimatedFrameCounts[i] = 0; - - while (start < end) - { - // add starting point: - pathFrames[firstInputIndex + decimatedFrameCounts[i]++] = pathFrames[firstInputIndex + start]; - - int newEnd = end; - - while (true) - { - int maxDistanceIndex = 0; - float maxDistance = 0; - float mu; - - // find the point that's furthest away from the current segment: - for (int j = start + 1; j < newEnd; j++) - { - float3 nearest = NearestPointOnEdge(pathFrames[firstInputIndex + start].position, - pathFrames[firstInputIndex + newEnd].position, - pathFrames[firstInputIndex + j].position, mu); - - float3 delta = nearest - pathFrames[firstInputIndex + j].position; - float d = dot(delta,delta); - - if (d > maxDistance) - { - maxDistanceIndex = j; - maxDistance = d; - } - } - - if (maxDistance <= scaledThreshold) - break; - - newEnd = maxDistanceIndex; - } - - start = newEnd; - } - - // add the last point: - pathFrames[firstInputIndex + decimatedFrameCounts[i]++] = pathFrames[firstInputIndex + end]; - -} - -[numthreads(128, 1, 1)] -void ChaikinSmooth (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= chunkCount) return; - - int firstInputIndex = i > 0 ? frameOffsets[i - 1] : 0; - int inputFrameCount = decimatedFrameCounts[i]; - - int firstOutputIndex = smoothFrameOffsets[i]; - - int k = (int)pathData[i].smoothing; - - // No work to do. just copy the input to the output: - if (k == 0) - { - smoothFrameCounts[i] = inputFrameCount; - for (int j = 0; j < inputFrameCount; ++j) - smoothFrames[firstOutputIndex + j] = pathFrames[firstInputIndex + j]; - } - else - { - // precalculate some quantities: - int pCount = (int)pow(2, k); - int n0 = inputFrameCount - 1; - float twoRaisedToMinusKPlus1 = pow(2, -(k + 1)); - float twoRaisedToMinusK = pow(2, -k); - float twoRaisedToMinus2K = pow(2, -2 * k); - float twoRaisedToMinus2KMinus1 = pow(2, -2 * k - 1); - - smoothFrameCounts[i] = (inputFrameCount - 2) * pCount + 2; - - // calculate initial curve points: - smoothFrames[firstOutputIndex] = addFrames(multiplyFrame(0.5f + twoRaisedToMinusKPlus1 , pathFrames[firstInputIndex]) , multiplyFrame(0.5f - twoRaisedToMinusKPlus1, pathFrames[firstInputIndex + 1])); - smoothFrames[firstOutputIndex + pCount * n0 - pCount + 1] = addFrames(multiplyFrame(0.5f - twoRaisedToMinusKPlus1, pathFrames[firstInputIndex + n0 - 1]) , multiplyFrame(0.5f + twoRaisedToMinusKPlus1, pathFrames[firstInputIndex + n0])); - - // calculate internal points: - for (int j = 1; j <= pCount; ++j) - { - // precalculate coefficients: - float F = 0.5f - twoRaisedToMinusKPlus1 - (j - 1) * (twoRaisedToMinusK - j * twoRaisedToMinus2KMinus1); - float G = 0.5f + twoRaisedToMinusKPlus1 + (j - 1) * (twoRaisedToMinusK - j * twoRaisedToMinus2K); - float H = (j - 1) * j * twoRaisedToMinus2KMinus1; - - for (int l = 1; l < n0; ++l) - { - WeightedSum(F, G, H, - pathFrames[firstInputIndex + l - 1], - pathFrames[firstInputIndex + l], - pathFrames[firstInputIndex + l + 1], - smoothFrames[firstOutputIndex + (l - 1) * pCount + j]); - } - } - - // make first and last curve points coincide with original points: - smoothFrames[firstOutputIndex] = pathFrames[firstInputIndex]; - smoothFrames[firstOutputIndex + smoothFrameCounts[i] - 1] = pathFrames[firstInputIndex + inputFrameCount - 1]; - } - - // calculate path lengths: - pathData[i].smoothLength = 0; - for (int j = firstOutputIndex + 1; j < firstOutputIndex + smoothFrameCounts[i]; ++j) - pathData[i].smoothLength += distance(smoothFrames[j-1].position, smoothFrames[j].position); -} diff --git a/Assets/Obi/Resources/Compute/PathSmoothing.compute.meta b/Assets/Obi/Resources/Compute/PathSmoothing.compute.meta deleted file mode 100644 index 589cc57c4..000000000 --- a/Assets/Obi/Resources/Compute/PathSmoothing.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 91c36d3d171884541b751112dfac062c -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/Phases.cginc b/Assets/Obi/Resources/Compute/Phases.cginc deleted file mode 100644 index 30bfe2086..000000000 --- a/Assets/Obi/Resources/Compute/Phases.cginc +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef PHASES_INCLUDE -#define PHASES_INCLUDE - - -#define CategoryMask 0x0000ffff -#define MaskMask 0xffff0000 - -#define GroupMask 0x00ffffff -#define SelfCollide 1 << 24 -#define Fluid 1 << 25 -#define OneSided 1 << 26 - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/Phases.cginc.meta b/Assets/Obi/Resources/Compute/Phases.cginc.meta deleted file mode 100644 index 290fe9508..000000000 --- a/Assets/Obi/Resources/Compute/Phases.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 96d6b61b6caf54444b039bf6f29c9205 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/PinConstraints.compute b/Assets/Obi/Resources/Compute/PinConstraints.compute deleted file mode 100644 index 33bb460e4..000000000 --- a/Assets/Obi/Resources/Compute/PinConstraints.compute +++ /dev/null @@ -1,229 +0,0 @@ -#pragma kernel Clear -#pragma kernel Initialize -#pragma kernel Project -#pragma kernel Apply -#pragma kernel ProjectRenderable - -#include "MathUtils.cginc" -#include "AtomicDeltas.cginc" -#include "ColliderDefinitions.cginc" -#include "Rigidbody.cginc" - -StructuredBuffer particleIndices; -StructuredBuffer colliderIndices; -StructuredBuffer offsets; -StructuredBuffer restDarboux; -StructuredBuffer stiffnesses; -RWStructuredBuffer lambdas; - -StructuredBuffer transforms; -StructuredBuffer shapes; -RWStructuredBuffer RW_rigidbodies; - -RWStructuredBuffer RW_positions; -RWStructuredBuffer RW_orientations; - -StructuredBuffer positions; -StructuredBuffer orientations; -StructuredBuffer prevPositions; -StructuredBuffer invMasses; -StructuredBuffer invRotationalMasses; - -StructuredBuffer inertialSolverFrame; - -// Variables set from the CPU -uint activeConstraintCount; -float stepTime; -float substepTime; -float timeLeft; -int steps; -float sorFactor; - -[numthreads(128, 1, 1)] -void Clear (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int colliderIndex = colliderIndices[i]; - - // no collider to pin to, so ignore the constraint. - if (colliderIndex < 0) - return; - - int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; - - if (rigidbodyIndex >= 0) - { - int orig; - InterlockedExchange(RW_rigidbodies[rigidbodyIndex].constraintCount, 0, orig); - } -} - -[numthreads(128, 1, 1)] -void Initialize (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int colliderIndex = colliderIndices[i]; - - // no collider to pin to, so ignore the constraint. - if (colliderIndex < 0) - return; - - int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; - - if (rigidbodyIndex >= 0) - { - InterlockedAdd(RW_rigidbodies[rigidbodyIndex].constraintCount, 1); - } -} - -[numthreads(128, 1, 1)] -void Project (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int particleIndex = particleIndices[i]; - int colliderIndex = colliderIndices[i]; - - // no collider to pin to, so ignore the constraint. - if (colliderIndex < 0) - return; - - int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; - - float frameEnd = stepTime * steps; - float substepsToEnd = timeLeft / substepTime; - - // calculate time adjusted compliances - float2 compliances = stiffnesses[i].xy / (substepTime * substepTime); - - // project particle position to the end of the full step: - float4 particlePosition = lerp(prevPositions[particleIndex], positions[particleIndex], substepsToEnd); - - // express pin offset in world space: - float4 worldPinOffset = transforms[colliderIndex].TransformPoint(offsets[i]); - float4 predictedPinOffset = worldPinOffset; - quaternion predictedRotation = transforms[colliderIndex].rotation; - - float rigidbodyLinearW = 0; - float rigidbodyAngularW = 0; - - if (rigidbodyIndex >= 0) - { - rigidbody rb = rigidbodies[rigidbodyIndex]; - - // predict offset point position using rb velocity at that point (can't integrate transform since position != center of mass) - float4 velocityAtPoint = GetRigidbodyVelocityAtPoint(rigidbodies[rigidbodyIndex],inertialSolverFrame[0].frame.InverseTransformPoint(worldPinOffset), - asfloat(linearDeltasAsInt[rigidbodyIndex]), - asfloat(angularDeltasAsInt[rigidbodyIndex]), inertialSolverFrame[0]); - - predictedPinOffset = IntegrateLinear(predictedPinOffset, inertialSolverFrame[0].frame.TransformVector(velocityAtPoint), frameEnd); - - // predict rotation at the end of the step: - predictedRotation = IntegrateAngular(predictedRotation, rb.angularVelocity + asfloat(angularDeltasAsInt[rigidbodyIndex]), frameEnd); - - // calculate linear and angular rigidbody effective masses (mass splitting: multiply by constraint count) - rigidbodyLinearW = rb.inverseMass * rb.constraintCount; - rigidbodyAngularW = RotationalInvMass(rb.inverseInertiaTensor, - worldPinOffset - rb.com, - normalizesafe(inertialSolverFrame[0].frame.TransformPoint(particlePosition) - predictedPinOffset)) * rb.constraintCount; - - } - - // Transform pin position to solver space for constraint solving: - predictedPinOffset = inertialSolverFrame[0].frame.InverseTransformPoint(predictedPinOffset); - predictedRotation = qmul(q_conj(inertialSolverFrame[0].frame.rotation), predictedRotation); - - float4 gradient = particlePosition - predictedPinOffset; - float constraint = length(gradient); - float4 gradientDir = gradient / (constraint + EPSILON); - - float4 lambda = lambdas[i]; - float linearDLambda = (-constraint - compliances.x * lambda.w) / (invMasses[particleIndex] + rigidbodyLinearW + rigidbodyAngularW + compliances.x + EPSILON); - lambda.w += linearDLambda; - float4 correction = linearDLambda * gradientDir; - - AddPositionDelta(particleIndex, correction * invMasses[particleIndex] / substepsToEnd); - - if (rigidbodyIndex >= 0) - { - ApplyImpulse(rigidbodyIndex, - -correction / frameEnd, - inertialSolverFrame[0].frame.InverseTransformPoint(worldPinOffset), - inertialSolverFrame[0].frame); - } - - if (rigidbodyAngularW > 0 || invRotationalMasses[particleIndex] > 0) - { - // bend/twist constraint: - quaternion omega = qmul(q_conj(orientations[particleIndex]), predictedRotation); //darboux vector - - quaternion omega_plus; - omega_plus = omega + restDarboux[i]; //delta Omega with - omega_0 - omega -= restDarboux[i]; //delta Omega with + omega_0 - if (dot(omega, omega) > dot(omega_plus, omega_plus)) - omega = omega_plus; - - float3 dlambda = (omega.xyz - compliances.y * lambda.xyz) / (compliances.y + invRotationalMasses[particleIndex] + rigidbodyAngularW + EPSILON); - lambda.xyz += dlambda; - - //discrete Darboux vector does not have vanishing scalar part: - quaternion dlambdaQ = quaternion(dlambda[0], dlambda[1], dlambda[2], 0); - - quaternion orientDelta = asfloat(orientationDeltasAsInt[particleIndex]); - orientDelta += qmul(predictedRotation, dlambdaQ) * invRotationalMasses[particleIndex] / substepsToEnd; - orientationDeltasAsInt[particleIndex] = asuint(orientDelta); - orientationConstraintCounts[particleIndex]++; - - if (rigidbodyIndex >= 0) - { - ApplyDeltaQuaternion(rigidbodyIndex, - predictedRotation, - -qmul(orientations[particleIndex], dlambdaQ) * rigidbodyAngularW, - inertialSolverFrame[0].frame, stepTime); - } - } - - lambdas[i] = lambda; -} - -[numthreads(128, 1, 1)] -void Apply (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int p = particleIndices[i]; - - ApplyPositionDelta(RW_positions, p, sorFactor); - ApplyOrientationDelta(RW_orientations, p, sorFactor); -} - -[numthreads(128, 1, 1)] -void ProjectRenderable (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int particleIndex = particleIndices[i]; - int colliderIndex = colliderIndices[i]; - - // no collider to pin to or projection deactivated, so ignore the constraint. - if (colliderIndex < 0 || offsets[i].w < 0.5f) - return; - - transform attachmentMatrix = inertialSolverFrame[0].frame.Inverse().Multiply(transforms[colliderIndex]); - - RW_positions[particleIndex] = attachmentMatrix.TransformPoint(offsets[i]); - if (stiffnesses[i].y < 10000) - RW_orientations[particleIndex] = qmul(attachmentMatrix.rotation, restDarboux[i]); -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/PinConstraints.compute.meta b/Assets/Obi/Resources/Compute/PinConstraints.compute.meta deleted file mode 100644 index 235824622..000000000 --- a/Assets/Obi/Resources/Compute/PinConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d65f884fa36104c4493d2bc55441b89d -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/PinholeConstraints.compute b/Assets/Obi/Resources/Compute/PinholeConstraints.compute deleted file mode 100644 index 1d5893ac5..000000000 --- a/Assets/Obi/Resources/Compute/PinholeConstraints.compute +++ /dev/null @@ -1,306 +0,0 @@ -#pragma kernel Clear -#pragma kernel Initialize -#pragma kernel Project -#pragma kernel Apply - -#include "MathUtils.cginc" -#include "AtomicDeltas.cginc" -#include "ColliderDefinitions.cginc" -#include "Rigidbody.cginc" - -RWStructuredBuffer particleIndices; -StructuredBuffer colliderIndices; -StructuredBuffer offsets; -RWStructuredBuffer edgeMus; -StructuredBuffer edgeRanges; -StructuredBuffer edgeRangeMus; -StructuredBuffer parameters; -RWStructuredBuffer relativeVelocities; -RWStructuredBuffer lambdas; - -StructuredBuffer transforms; -StructuredBuffer shapes; -RWStructuredBuffer RW_rigidbodies; - -RWStructuredBuffer RW_positions; - -StructuredBuffer deformableEdges; -StructuredBuffer positions; -StructuredBuffer prevPositions; -StructuredBuffer invMasses; - -StructuredBuffer inertialSolverFrame; - -// Variables set from the CPU -uint activeConstraintCount; -float stepTime; -float substepTime; -float timeLeft; -int steps; -float sorFactor; - -[numthreads(128, 1, 1)] -void Clear (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int colliderIndex = colliderIndices[i]; - - // no collider to pin to, so ignore the constraint. - if (colliderIndex < 0) - return; - - int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; - - if (rigidbodyIndex >= 0) - { - int orig; - InterlockedExchange(RW_rigidbodies[rigidbodyIndex].constraintCount, 0, orig); - } -} - -bool IsEdgeValid(int edgeIndex, int nextEdgeIndex, float mix) -{ - return (mix < 0) ? deformableEdges[nextEdgeIndex * 2 + 1] == deformableEdges[edgeIndex * 2] : - deformableEdges[nextEdgeIndex * 2] == deformableEdges[edgeIndex * 2 + 1]; -} - -bool ClampToRange(int i, int edgeIndex, inout float mix) -{ - bool clamped = false; - if (edgeIndex == edgeRanges[i].x && mix < edgeRangeMus[i].x) - { - mix = edgeRangeMus[i].x; - clamped = true; - } - if (edgeIndex == edgeRanges[i].y && mix > edgeRangeMus[i].y) - { - mix = edgeRangeMus[i].y; - clamped = true; - } - return clamped; -} - -[numthreads(128, 1, 1)] -void Initialize (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int edgeIndex = particleIndices[i]; - int colliderIndex = colliderIndices[i]; - - // if no collider or edge, ignore the constraint. - if (edgeIndex < 0 || colliderIndex < 0) - return; - - int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; - - if (rigidbodyIndex >= 0) - { - InterlockedAdd(RW_rigidbodies[rigidbodyIndex].constraintCount, 1); - } - - float frameEnd = stepTime * steps; - float substepsToEnd = timeLeft / substepTime; - - // calculate time adjusted compliances - float compliance = parameters[i * 5] / (substepTime * substepTime); - - int p1 = deformableEdges[edgeIndex * 2]; - int p2 = deformableEdges[edgeIndex * 2 + 1]; - int edgeCount = max(0, edgeRanges[i].y - edgeRanges[i].x + 1); - - // express pin offset in world space: - float4 worldPinOffset = transforms[colliderIndex].TransformPoint(offsets[i]); - float4 predictedPinOffset = worldPinOffset; - - if (rigidbodyIndex >= 0) - { - // predict offset point position using rb velocity at that point (can't integrate transform since position != center of mass) - float4 velocityAtPoint = GetRigidbodyVelocityAtPoint(rigidbodies[rigidbodyIndex],inertialSolverFrame[0].frame.InverseTransformPoint(worldPinOffset), - asfloat(linearDeltasAsInt[rigidbodyIndex]), - asfloat(angularDeltasAsInt[rigidbodyIndex]), inertialSolverFrame[0]); - - predictedPinOffset = IntegrateLinear(predictedPinOffset, inertialSolverFrame[0].frame.TransformVector(velocityAtPoint), frameEnd); - } - - // transform pinhole position to solver space for constraint solving: - float4 solverPredictedOffset = inertialSolverFrame[0].frame.InverseTransformPoint(predictedPinOffset); - - // get current edge data: - float mix = 0; - float4 particlePosition1 = lerp(prevPositions[p1], positions[p1], substepsToEnd); - float4 particlePosition2 = lerp(prevPositions[p2], positions[p2], substepsToEnd); - float edgeLength = length(particlePosition1 - particlePosition2) + EPSILON; - NearestPointOnEdge(particlePosition1, particlePosition2, solverPredictedOffset, mix, false); - - // calculate current relative velocity between rope and pinhole: - float velocity = (mix - edgeMus[i]) / substepTime * edgeLength; // vel = pos / time. - relativeVelocities[i] = velocity; - - // apply motor force: - float targetAccel = (parameters[i * 5 + 2] - velocity) / substepTime; // accel = vel / time. - float maxAccel = parameters[i * 5 + 3] * max(lerp(invMasses[p1], invMasses[p2], mix), EPSILON); // accel = force / mass. Guard against inf*0 - velocity += clamp(targetAccel, -maxAccel, maxAccel) * substepTime; - - // calculate new position by adding motor acceleration: - float corrMix = edgeMus[i] + velocity * substepTime / edgeLength; - - // apply artificial friction by interpolating predicted position and corrected position. - mix = lerp(mix, corrMix, parameters[i * 5 + 1]); - - // move to an adjacent simplex if needed - if (!ClampToRange(i, edgeIndex, mix) && (mix < 0 || mix > 1)) - { - bool clampOnEnd = parameters[i * 5 + 4] > 0.5f; - - // calculate distance we need to travel along simplex chain: - float distToTravel = length(particlePosition1 - particlePosition2) * (mix < 0 ? -mix : mix - 1); - - int nextEdgeIndex; - for (int k = 0; k < 10; ++k) - { - // calculate index of next edge: - nextEdgeIndex = edgeRanges[i].x + (int)nfmod((mix < 0 ? edgeIndex - 1 : edgeIndex + 1) - edgeRanges[i].x, edgeCount); - - // see if it's valid - if (!IsEdgeValid(edgeIndex, nextEdgeIndex, mix)) - { - // disable constraint if needed - if (!clampOnEnd) { particleIndices[i] = -1; return; } - - // otherwise clamp to end: - mix = saturate(mix); - break; - } - - // advance to next edge: - edgeIndex = nextEdgeIndex; - - p1 = deformableEdges[edgeIndex*2]; - p2 = deformableEdges[edgeIndex*2 + 1]; - particlePosition1 = lerp(prevPositions[p1], positions[p1], substepsToEnd); - particlePosition2 = lerp(prevPositions[p2], positions[p2], substepsToEnd); - edgeLength = length(particlePosition1 - particlePosition2) + EPSILON; - - // stop if we reached target edge: - if (distToTravel <= edgeLength) - { - mix = mix < 0 ? 1 - saturate(distToTravel / edgeLength) : saturate(distToTravel / edgeLength); - ClampToRange(i, edgeIndex, mix); - break; - } - - // stop if we reached end of range: - if (ClampToRange(i, edgeIndex, mix)) - break; - - distToTravel -= edgeLength; - } - } - - // store new position along edge: - edgeMus[i] = mix; - particleIndices[i] = edgeIndex; -} - -[numthreads(128, 1, 1)] -void Project (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int edgeIndex = particleIndices[i]; - int colliderIndex = colliderIndices[i]; - - // if no collider or edge, ignore the constraint. - if (edgeIndex < 0 || colliderIndex < 0) - return; - - float frameEnd = stepTime * steps; - float substepsToEnd = timeLeft / substepTime; - - // calculate time adjusted compliances - float compliance = parameters[i * 5] / (substepTime * substepTime); - - int p1 = deformableEdges[edgeIndex * 2]; - int p2 = deformableEdges[edgeIndex * 2 + 1]; - - // get current edge data: - float mix = edgeMus[i]; - float4 particlePosition1 = lerp(prevPositions[p1], positions[p1], substepsToEnd); - float4 particlePosition2 = lerp(prevPositions[p2], positions[p2], substepsToEnd); - float4 projection = lerp(particlePosition1, particlePosition2, mix); - - // express pin offset in world space: - float4 worldPinOffset = transforms[colliderIndex].TransformPoint(offsets[i]); - float4 predictedPinOffset = worldPinOffset; - - float rigidbodyLinearW = 0; - float rigidbodyAngularW = 0; - - int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; - if (rigidbodyIndex >= 0) - { - rigidbody rb = rigidbodies[rigidbodyIndex]; - - // predict offset point position using rb velocity at that point (can't integrate transform since position != center of mass) - float4 velocityAtPoint = GetRigidbodyVelocityAtPoint(rigidbodies[rigidbodyIndex],inertialSolverFrame[0].frame.InverseTransformPoint(worldPinOffset), - asfloat(linearDeltasAsInt[rigidbodyIndex]), - asfloat(angularDeltasAsInt[rigidbodyIndex]), inertialSolverFrame[0]); - - predictedPinOffset = IntegrateLinear(predictedPinOffset, inertialSolverFrame[0].frame.TransformVector(velocityAtPoint), frameEnd); - - // calculate linear and angular rigidbody effective masses (mass splitting: multiply by constraint count) - rigidbodyLinearW = rb.inverseMass * rb.constraintCount; - rigidbodyAngularW = RotationalInvMass(rb.inverseInertiaTensor, - worldPinOffset - rb.com, - normalizesafe(inertialSolverFrame[0].frame.TransformPoint(projection) - predictedPinOffset)) * rb.constraintCount; - } - - // transform pinhole position to solver space for constraint solving: - predictedPinOffset = inertialSolverFrame[0].frame.InverseTransformPoint(predictedPinOffset); - - float4 gradient = projection - predictedPinOffset; - float constraint = length(gradient); - float4 gradientDir = gradient / (constraint + EPSILON); - - float lambda = (-constraint - compliance * lambdas[i]) / (lerp(invMasses[p1], invMasses[p2], mix) + rigidbodyLinearW + rigidbodyAngularW + compliance + EPSILON); - lambdas[i] += lambda; - float4 correction = lambda * gradientDir; - - float baryScale = BaryScale(float4(1 - mix, mix, 0, 0)); - - AddPositionDelta(p1, correction * baryScale * invMasses[p1] * (1 - mix) / substepsToEnd); - AddPositionDelta(p2, correction * baryScale * invMasses[p2] * mix / substepsToEnd); - - if (rigidbodyIndex >= 0) - { - ApplyImpulse(rigidbodyIndex, - -correction / frameEnd, - inertialSolverFrame[0].frame.InverseTransformPoint(worldPinOffset), - inertialSolverFrame[0].frame); - } -} - -[numthreads(128, 1, 1)] -void Apply (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int edgeIndex = particleIndices[i]; - if (edgeIndex < 0) return; - - int p1 = deformableEdges[edgeIndex * 2]; - int p2 = deformableEdges[edgeIndex * 2 + 1]; - - ApplyPositionDelta(RW_positions, p1, sorFactor); - ApplyPositionDelta(RW_positions, p2, sorFactor); -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/PinholeConstraints.compute.meta b/Assets/Obi/Resources/Compute/PinholeConstraints.compute.meta deleted file mode 100644 index b76f43e88..000000000 --- a/Assets/Obi/Resources/Compute/PinholeConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b2e9779c1ab6b4ac5b79540db1485539 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/Quaternion.cginc b/Assets/Obi/Resources/Compute/Quaternion.cginc deleted file mode 100644 index 9143d27ca..000000000 --- a/Assets/Obi/Resources/Compute/Quaternion.cginc +++ /dev/null @@ -1,230 +0,0 @@ -#ifndef QUATERNION_INCLUDE -#define QUATERNION_INCLUDE - -#define QUATERNION_IDENTITY float4(0, 0, 0, 1) - -typedef float4 quaternion; - -// Quaternion multiplication -// http://mathworld.wolfram.com/Quaternion.html -quaternion qmul(quaternion q1, quaternion q2) -{ - return quaternion( - q2.xyz * q1.w + q1.xyz * q2.w + cross(q1.xyz, q2.xyz), - q1.w * q2.w - dot(q1.xyz, q2.xyz) - ); -} - -// Vector rotation with a quaternion -// http://mathworld.wolfram.com/Quaternion.html -float3 rotate_vector(quaternion r, float3 v) -{ - float4 r_c = r * float4(-1, -1, -1, 1); - return qmul(r, qmul(float4(v, 0), r_c)).xyz; -} - -// A given angle of rotation about a given axis -quaternion axis_angle(float3 axis, float angle) -{ - float sn = sin(angle * 0.5); - float cs = cos(angle * 0.5); - return quaternion(axis * sn, cs); -} - -// https://stackoverflow.com/questions/1171849/finding-quaternion-representing-the-rotation-from-one-vector-to-another -quaternion from_to_rotation(float3 v1, float3 v2) -{ - float4 q; - float d = dot(v1, v2); - if (d < -0.999999) - { - float3 right = float3(1, 0, 0); - float3 up = float3(0, 1, 0); - float3 tmp = cross(right, v1); - if (length(tmp) < 0.000001) - { - tmp = cross(up, v1); - } - tmp = normalize(tmp); - q = axis_angle(tmp, 3.14159265359f); - } else if (d > 0.999999) { - q = QUATERNION_IDENTITY; - } else { - q.xyz = cross(v1, v2); - q.w = 1 + d; - q = normalize(q); - } - return q; -} - -float4 q_conj(float4 q) -{ - return float4(-q.x, -q.y, -q.z, q.w); -} - -// https://jp.mathworks.com/help/aeroblks/quaternioninverse.html -quaternion q_inverse(quaternion q) -{ - quaternion conj = q_conj(q); - return conj / (q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w); -} - -quaternion q_diff(quaternion q1, quaternion q2) -{ - return q2 * q_inverse(q1); -} - -quaternion q_look_at(float3 forward, float3 up) -{ - forward = normalize(forward); - float3 right = normalize(cross(up, forward)); - up = cross(forward, right); - - float m00 = right.x; - float m01 = right.y; - float m02 = right.z; - float m10 = up.x; - float m11 = up.y; - float m12 = up.z; - float m20 = forward.x; - float m21 = forward.y; - float m22 = forward.z; - - float num8 = (m00 + m11) + m22; - quaternion q = QUATERNION_IDENTITY; - - if (num8 > 0.0) - { - float num = sqrt(num8 + 1.0); - q.w = num * 0.5; - num = 0.5 / num; - q.x = (m12 - m21) * num; - q.y = (m20 - m02) * num; - q.z = (m01 - m10) * num; - return q; - } - else if ((m00 >= m11) && (m00 >= m22)) - { - float num7 = sqrt(((1.0 + m00) - m11) - m22); - float num4 = 0.5 / num7; - q.x = 0.5 * num7; - q.y = (m01 + m10) * num4; - q.z = (m02 + m20) * num4; - q.w = (m12 - m21) * num4; - return q; - } - else if (m11 > m22) - { - float num6 = sqrt(((1.0 + m11) - m00) - m22); - float num3 = 0.5 / num6; - q.x = (m10 + m01) * num3; - q.y = 0.5 * num6; - q.z = (m21 + m12) * num3; - q.w = (m20 - m02) * num3; - return q; - } - else - { - float num5 = sqrt(((1.0 + m22) - m00) - m11); - float num2 = 0.5 / num5; - q.x = (m20 + m02) * num2; - q.y = (m21 + m12) * num2; - q.z = 0.5 * num5; - q.w = (m01 - m10) * num2; - return q; - } -} - -quaternion q_slerp(in quaternion a, in quaternion b, float t) -{ - // if either input is zero, return the other. - if (length(a) == 0.0) - { - if (length(b) == 0.0) - return QUATERNION_IDENTITY; - else - return b; - } - else if (length(b) == 0.0) - { - return a; - } - else - { - float cosHalfAngle = a.w * b.w + dot(a.xyz, b.xyz); - - if (cosHalfAngle >= 1.0 || cosHalfAngle <= -1.0) - { - return a; - } - else - { - if (cosHalfAngle < 0.0) - { - b.xyz = -b.xyz; - b.w = -b.w; - cosHalfAngle = -cosHalfAngle; - } - - float blendA; - float blendB; - if (cosHalfAngle < 0.99) - { - // do proper slerp for big angles - float halfAngle = acos(cosHalfAngle); - float sinHalfAngle = sin(halfAngle); - float oneOverSinHalfAngle = 1.0 / sinHalfAngle; - blendA = sin(halfAngle * (1.0 - t)) * oneOverSinHalfAngle; - blendB = sin(halfAngle * t) * oneOverSinHalfAngle; - } - else - { - // do lerp if angle is really small. - blendA = 1.0 - t; - blendB = t; - } - - quaternion result = quaternion(blendA * a.xyz + blendB * b.xyz, blendA * a.w + blendB * b.w); - - if (length(result) > 0.0) - return normalize(result); - else - return QUATERNION_IDENTITY; - } - } -} - -quaternion q_eulerXYZ(float3 euler) -{ - float3 s, c; - sincos(0.5f * euler, s, c); - return quaternion( - // s.x * c.y * c.z + s.y * s.z * c.x, - // s.y * c.x * c.z - s.x * s.z * c.y, - // s.z * c.x * c.y - s.x * s.y * c.z, - // c.x * c.y * c.z + s.y * s.z * s.x - float4(s.xyz, c.x) * c.yxxy * c.zzyz + s.yxxy * s.zzyz * float4(c.xyz, s.x) * float4(1.0f, -1.0f, -1.0f, 1.0f) - ); -} - -float4x4 q_toMatrix(quaternion q) -{ - float xx = q.x * q.x; - float xy = q.x * q.y; - float xz = q.x * q.z; - float xw = q.x * q.w; - - float yy = q.y * q.y; - float yz = q.y * q.z; - float yw = q.y * q.w; - - float zz = q.z * q.z; - float zw = q.z * q.w; - - return float4x4(1 - 2 * (yy + zz), 2 * (xy - zw), 2 * (xz + yw), 0, - 2 * (xy + zw), 1 - 2 * (xx + zz), 2 * (yz - xw), 0, - 2 * (xz - yw), 2 * (yz + xw), 1 - 2 * (xx + yy), 0, - 0, 0, 0, 1); -} - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/Quaternion.cginc.meta b/Assets/Obi/Resources/Compute/Quaternion.cginc.meta deleted file mode 100644 index ad02e0bf5..000000000 --- a/Assets/Obi/Resources/Compute/Quaternion.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: d586fccea37884cd99448480e05b9efc -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/QueryDefinitions.cginc b/Assets/Obi/Resources/Compute/QueryDefinitions.cginc deleted file mode 100644 index ddd2b711a..000000000 --- a/Assets/Obi/Resources/Compute/QueryDefinitions.cginc +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef QUERYDEFS_INCLUDE -#define QUERYDEFS_INCLUDE - -#define SPHERE_QUERY 0 -#define BOX_QUERY 1 -#define RAY_QUERY 2 - -struct queryShape -{ - float4 center; - float4 size; - int type; - float contactOffset; - float maxDistance; - int filter; -}; - -struct queryResult -{ - float4 simplexBary; // point A, expressed as simplex barycentric coords for simplices. - float4 queryPoint; // point B, expressed as a solver-space position. - float4 normal; - float dist; - float distAlongRay; - int simplexIndex; - int queryIndex; -}; - - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/QueryDefinitions.cginc.meta b/Assets/Obi/Resources/Compute/QueryDefinitions.cginc.meta deleted file mode 100644 index 55f203af5..000000000 --- a/Assets/Obi/Resources/Compute/QueryDefinitions.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: aa793a9f45d044bb9af2361e9c92f11d -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/RayShapeQuery.compute b/Assets/Obi/Resources/Compute/RayShapeQuery.compute deleted file mode 100644 index a02d9f39f..000000000 --- a/Assets/Obi/Resources/Compute/RayShapeQuery.compute +++ /dev/null @@ -1,132 +0,0 @@ -#include "ColliderDefinitions.cginc" -#include "QueryDefinitions.cginc" -#include "ContactHandling.cginc" -#include "Transform.cginc" -#include "Simplex.cginc" -#include "Bounds.cginc" -#include "SolverParameters.cginc" -#include "Optimization.cginc" - -#pragma kernel GenerateResults - -StructuredBuffer positions; -StructuredBuffer orientations; -StructuredBuffer principalRadii; -StructuredBuffer simplices; - -StructuredBuffer transforms; -StructuredBuffer shapes; - -StructuredBuffer contactPairs; -StructuredBuffer contactOffsetsPerType; - -RWStructuredBuffer results; -RWStructuredBuffer dispatchBuffer; - -StructuredBuffer worldToSolver; - -uint maxContacts; - -struct Ray : IDistanceFunction -{ - queryShape s; - transform colliderToSolver; - - void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) - { - float4x4 simplexToSolver = TRS(pos.xyz, orientation, radii.xyz); - float4x4 solverToSimplex = Inverse(simplexToSolver); - float4x4 colliderToSimplex = mul(solverToSimplex, TRS(colliderToSolver.translation.xyz, colliderToSolver.rotation, colliderToSolver.scale.xyz)); - - // express ray in simplex space (ellipsoid == scaled sphere) - float4 rayOrigin = mul(colliderToSimplex, float4(s.center.xyz,1)); - float4 rayDirection = normalizesafe(mul(colliderToSimplex, float4(s.size.xyz,0))); - - float rayDistance = RaySphereIntersection(rayOrigin.xyz, rayDirection.xyz, float3(0,0,0), 1); - - if (rayDistance < 0) - { - pos = colliderToSolver.InverseTransformPointUnscaled(pos); - - float mu; - float4 centerLine = NearestPointOnEdge(s.center * colliderToSolver.scale, (s.center + s.size) * colliderToSolver.scale, pos, mu); - float4 centerToPoint = pos - centerLine; - float distanceToCenter = length(centerToPoint); - - float4 normal = centerToPoint / (distanceToCenter + EPSILON); - - projectedPoint.pos = colliderToSolver.TransformPointUnscaled(centerLine + normal * s.contactOffset); - projectedPoint.normal = colliderToSolver.TransformDirection(normal); - } - else - { - float4 rayPoint = mul(simplexToSolver, float4((rayOrigin + rayDirection * rayDistance).xyz,1)); - float4 normal = normalizesafe(float4((pos - rayPoint).xyz,0)); - - projectedPoint.pos = rayPoint + normal * s.contactOffset; - projectedPoint.normal = normal; - } - - projectedPoint.bary = float4(1,0,0,0); - } -}; - -[numthreads(128, 1, 1)] -void GenerateResults (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - - // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. - if (i >= dispatchBuffer[11 + 4*RAY_QUERY]) return; - - int firstPair = contactOffsetsPerType[RAY_QUERY]; - int simplexIndex = contactPairs[firstPair + i].x; - int queryIndex = contactPairs[firstPair + i].y; - - queryResult c = (queryResult)0; - - Ray rayShape; - rayShape.colliderToSolver = worldToSolver[0].Multiply(transforms[queryIndex]); - rayShape.s = shapes[queryIndex]; - - int simplexSize; - int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); - - float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); - float4 simplexPoint; - - SurfacePoint surfacePoint = Optimize(rayShape, positions, orientations, principalRadii, - simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); - - - float4 simplexPrevPosition = FLOAT4_ZERO; - float simplexRadius = 0; - for (int j = 0; j < simplexSize; ++j) - { - int particleIndex = simplices[simplexStart + j]; - simplexPrevPosition += positions[particleIndex] * simplexBary[j]; - simplexRadius += EllipsoidRadius(surfacePoint.normal, orientations[particleIndex], principalRadii[particleIndex].xyz) * simplexBary[j]; - } - - c.queryPoint = surfacePoint.pos; - c.normal = surfacePoint.normal; - c.simplexBary = simplexBary; - c.simplexIndex = simplexIndex; - c.queryIndex = queryIndex; - c.dist = dot(simplexPrevPosition - surfacePoint.pos, surfacePoint.normal) - simplexRadius; - - if (c.dist <= rayShape.s.maxDistance) - { - uint count = results.IncrementCounter(); - if (count < maxContacts) - { - float4 pointOnRay = surfacePoint.pos + surfacePoint.normal * c.dist; - c.distAlongRay = dot(pointOnRay.xyz - rayShape.s.center.xyz, normalizesafe(rayShape.s.size.xyz)); - - results[count] = c; - - InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); - InterlockedMax(dispatchBuffer[3], count + 1); - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/RayShapeQuery.compute.meta b/Assets/Obi/Resources/Compute/RayShapeQuery.compute.meta deleted file mode 100644 index 5228b8174..000000000 --- a/Assets/Obi/Resources/Compute/RayShapeQuery.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: cc1e43b48b9764f8585de0bd68298b1c -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/Rigidbody.cginc b/Assets/Obi/Resources/Compute/Rigidbody.cginc deleted file mode 100644 index 9038eef51..000000000 --- a/Assets/Obi/Resources/Compute/Rigidbody.cginc +++ /dev/null @@ -1,108 +0,0 @@ -#ifndef RIGIDBODY_INCLUDE -#define RIGIDBODY_INCLUDE - -#include "InertialFrame.cginc" -#include "InterlockedUtils.cginc" -#include "Integration.cginc" - -RWStructuredBuffer linearDeltasAsInt; -RWStructuredBuffer angularDeltasAsInt; - -struct rigidbody -{ - float4x4 inverseInertiaTensor; - float4 velocity; - float4 angularVelocity; - float4 com; - float inverseMass; - - int constraintCount; - int pad1; - int pad2; -}; - -StructuredBuffer rigidbodies; - -void CalculateContactMassesB(in rigidbody rb, - in transform t, - float4 pointB, - float4 normal, - float4 bitangent, - float4 tangent, - out float normalInvMassB, - out float tangentInvMassB, - out float bitangentInvMassB) -{ - float4 rB = t.TransformPoint(pointB) - rb.com; - - // initialize inverse linear masses: - normalInvMassB = tangentInvMassB = bitangentInvMassB = rb.inverseMass; - normalInvMassB += RotationalInvMass(rb.inverseInertiaTensor, rB, normal); - tangentInvMassB += RotationalInvMass(rb.inverseInertiaTensor, rB, tangent); - bitangentInvMassB += RotationalInvMass(rb.inverseInertiaTensor, rB, bitangent); -} - -float4 GetRigidbodyVelocityAtPoint(in rigidbody rb, - float4 pnt, - float4 linearDelta, - float4 angularDelta, - in inertialFrame frame) -{ - float4 linearVel = rb.velocity + linearDelta; - float4 angularVel = rb.angularVelocity + angularDelta; - float4 r = frame.frame.TransformPoint(pnt) - rb.com; - - // calculate rigidbody velocity. (point is assumed to be expressed in solver space, convert it to world space): - float4 wsRigidbodyVel = linearVel + float4(cross(angularVel.xyz, r.xyz), 0); - - // calculate solver velocity: - float4 wsSolverVelocity = frame.velocity + float4(cross(frame.angularVelocity.xyz, pnt.xyz), 0); - - // convert the resulting velocity back to solver space: - return frame.frame.InverseTransformVector(wsRigidbodyVel - wsSolverVelocity); -}; - -void AtomicAddLinearDelta(in int rigidbodyIndex, in float4 delta) -{ - InterlockedAddFloat(linearDeltasAsInt, rigidbodyIndex, 0, delta.x); - InterlockedAddFloat(linearDeltasAsInt, rigidbodyIndex, 1, delta.y); - InterlockedAddFloat(linearDeltasAsInt, rigidbodyIndex, 2, delta.z); -} - -void AtomicAddAngularDelta(in int rigidbodyIndex, in float4 delta) -{ - InterlockedAddFloat(angularDeltasAsInt, rigidbodyIndex, 0, delta.x); - InterlockedAddFloat(angularDeltasAsInt, rigidbodyIndex, 1, delta.y); - InterlockedAddFloat(angularDeltasAsInt, rigidbodyIndex, 2, delta.z); -} - -void ApplyImpulse(int rigidbodyIndex, - float4 impulse, - float4 pnt, - in transform frame) -{ - float4 impulseWS = frame.TransformVector(impulse); - float4 r = frame.TransformPoint(pnt) - rigidbodies[rigidbodyIndex].com; - - float4 linearDelta = rigidbodies[rigidbodyIndex].inverseMass * impulseWS; - float4 angularDelta = mul(rigidbodies[rigidbodyIndex].inverseInertiaTensor, float4(cross(r.xyz, impulseWS.xyz), 0)); - - AtomicAddLinearDelta (rigidbodyIndex, linearDelta); - AtomicAddAngularDelta(rigidbodyIndex, angularDelta); -} - -void ApplyDeltaQuaternion(int rigidbodyIndex, - quaternion rotation, - quaternion delta, - in transform frame, - float dt) -{ - quaternion rotationWS = qmul(frame.rotation, rotation); - quaternion deltaWS = qmul(frame.rotation, delta); - - // convert quaternion delta to angular acceleration: - quaternion newRotation = normalize(rotationWS + deltaWS); - AtomicAddAngularDelta(rigidbodyIndex, DifferentiateAngular(newRotation, rotationWS, dt)); -} - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/Rigidbody.cginc.meta b/Assets/Obi/Resources/Compute/Rigidbody.cginc.meta deleted file mode 100644 index 68dede378..000000000 --- a/Assets/Obi/Resources/Compute/Rigidbody.cginc.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 157a770866f4047a5b8a08e6aca2f1bf -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/RopeChainRendering.compute b/Assets/Obi/Resources/Compute/RopeChainRendering.compute deleted file mode 100644 index 57ee32be6..000000000 --- a/Assets/Obi/Resources/Compute/RopeChainRendering.compute +++ /dev/null @@ -1,109 +0,0 @@ -#pragma kernel UpdateChainMesh - -#include "PathFrame.cginc" - -struct chainRendererData -{ - int modifierOffset; - float twistAnchor; - float twist; - uint usesOrientedParticles; - - float4 scale; -}; - -struct chunkData -{ - int rendererIndex; - int offset; // index of the first element for each chunk. -}; - -struct linkModifier -{ - float3 translation; - float3 scale; - float3 rotation; - - void Clear() - { - translation = float3(0,0,0); - scale = float3(1,1,1); - rotation = float3(0,0,0); - } -}; - -StructuredBuffer rendererData; -StructuredBuffer chunksData; -StructuredBuffer modifiers; -StructuredBuffer elements; - -StructuredBuffer renderablePositions; -StructuredBuffer renderableOrientations; -StructuredBuffer principalRadii; -StructuredBuffer colors; -float4x4 solverToWorld; - -RWStructuredBuffer instanceTransforms; -RWStructuredBuffer invInstanceTransforms; -RWStructuredBuffer instanceColors; - -uint chunkCount; - -[numthreads(32, 1, 1)] -void UpdateChainMesh (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= chunkCount) return; - - int firstIndex = i > 0 ? chunksData[i - 1].offset : 0; - uint elementCount = chunksData[i].offset - firstIndex; - - int rendererIndex = chunksData[i].rendererIndex; - chainRendererData renderer = rendererData[rendererIndex]; - - int firstModifier = rendererIndex > 0 ? rendererData[rendererIndex - 1].modifierOffset : 0; - uint modifierCount = renderer.modifierOffset - firstModifier; - - linkModifier modifier; - modifier.Clear(); - - pathFrame frame; - frame.Reset(); - - float twist = -renderer.twist * elementCount * renderer.twistAnchor; - frame.SetTwist(twist); - - // parallel transport: - for (uint m = 0; m < elementCount; ++m) - { - if (modifierCount > 0) - modifier = modifiers[firstModifier + m % modifierCount]; - - int index = firstIndex + m; - float4 pos = renderablePositions[elements[index].x]; - float4 nextPos = renderablePositions[elements[index].y]; - float4 vect = nextPos - pos; - float3 tangent = normalizesafe(vect.xyz); - - if (renderer.usesOrientedParticles == 1) - { - frame.Transport(nextPos.xyz, tangent, rotate_vector(renderableOrientations[elements[index].x], float3(0, 1, 0)), twist); - twist += renderer.twist; - } - else - frame.Transport(nextPos.xyz, tangent, renderer.twist); - - if (modifierCount > 0) - modifier = modifiers[firstModifier + m % (uint)modifierCount]; - - quaternion rotation = q_look_at(frame.tangent, frame.normal); - float3 position = (pos + vect * 0.5f).xyz + rotate_vector(rotation, modifier.translation); - float3 scale = principalRadii[elements[index].x].x * 2 * renderer.scale.xyz * modifier.scale; - - rotation = qmul(rotation, q_eulerXYZ(radians(modifier.rotation))); - - instanceTransforms[index] = mul(solverToWorld, TRS(position,rotation,scale)); - invInstanceTransforms[index] = Inverse(instanceTransforms[index]); - instanceColors[index] = (colors[elements[index].x] + colors[elements[index].x]) * 0.5; - } -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/RopeChainRendering.compute.meta b/Assets/Obi/Resources/Compute/RopeChainRendering.compute.meta deleted file mode 100644 index a80ac9cb2..000000000 --- a/Assets/Obi/Resources/Compute/RopeChainRendering.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 64a1b58e2d7634b3b905947b0c5e78c7 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/RopeExtrudedRendering.compute b/Assets/Obi/Resources/Compute/RopeExtrudedRendering.compute deleted file mode 100644 index cdcb106c5..000000000 --- a/Assets/Obi/Resources/Compute/RopeExtrudedRendering.compute +++ /dev/null @@ -1,164 +0,0 @@ -#pragma kernel UpdateRopeMesh - -#include "PathFrame.cginc" - -struct smootherPathData -{ - uint smoothing; - float decimation; - float twist; - float restLength; - float smoothLength; - uint usesOrientedParticles; -}; - -struct extrudedMeshData -{ - int sectionVertexCount; - float thicknessScale; - float uvAnchor; - uint normalizeV; - float2 uvScale; -}; - -StructuredBuffer pathSmootherIndices; -StructuredBuffer chunkOffsets; - -StructuredBuffer frames; -StructuredBuffer frameOffsets; -StructuredBuffer frameCounts; - -StructuredBuffer sectionData; -StructuredBuffer sectionOffsets; -StructuredBuffer sectionIndices; - -StructuredBuffer vertexOffsets; -StructuredBuffer triangleOffsets; -StructuredBuffer triangleCounts; - -StructuredBuffer extrudedData; -StructuredBuffer pathData; - -RWByteAddressBuffer vertices; -RWByteAddressBuffer tris; - -// Variables set from the CPU -uint firstRenderer; -uint rendererCount; - -pathFrame LookAt(pathFrame frame, in pathFrame target, out float dist) -{ - float3 tangent = target.position - frame.position; - dist = length(tangent); - tangent /= dist + EPSILON; - - quaternion rotQ = from_to_rotation(frame.tangent, tangent); - frame.normal = rotate_vector(rotQ, frame.normal); - frame.binormal = rotate_vector(rotQ, frame.binormal); - frame.tangent = tangent; - - return frame; -} - -[numthreads(128, 1, 1)] -void UpdateRopeMesh (uint3 id : SV_DispatchThreadID) -{ - unsigned int u = id.x; - if (u >= rendererCount) return; - - int k = firstRenderer + u; - int s = pathSmootherIndices[k]; - - float3 vertex = float3(0,0,0); - float3 normal = float3(0,0,0); - float4 texTangent = FLOAT4_ZERO; - - int tri = 0; - int sectionIndex = 0; - int sectionStart = sectionOffsets[sectionIndices[k]]; - int sectionSegments = (sectionOffsets[sectionIndices[k] + 1] - sectionStart) - 1; - int verticesPerSection = sectionSegments + 1; // the last vertex in each section must be duplicated, due to uv wraparound. - - float smoothLength = 0; - int i; - for (i = chunkOffsets[s]; i < chunkOffsets[s + 1]; ++i) - smoothLength += pathData[i].smoothLength; - - float vCoord = -extrudedData[k].uvScale.y * pathData[chunkOffsets[s]].restLength * extrudedData[k].uvAnchor; - float actualToRestLengthRatio = smoothLength / pathData[chunkOffsets[s]].restLength; - - int firstVertex = vertexOffsets[k]; - int firstTriangle = triangleOffsets[k]; - - // clear out triangle indices for this rope: - for (i = firstTriangle; i < firstTriangle + triangleCounts[k]; ++i) - { - int offset = i*3; - tris.Store((offset)<<2, 0); - tris.Store((offset+1)<<2,0); - tris.Store((offset+2)<<2,0); - } - - // for each chunk in the rope: - for (i = chunkOffsets[s]; i < chunkOffsets[s+1]; ++i) - { - int firstFrame = frameOffsets[i]; - int frameCount = frameCounts[i]; - - for (int f = 0; f < frameCount; ++f) - { - // Calculate previous and next curve indices: - int prevIndex = firstFrame + max(f - 1, 0); - int index = firstFrame + f; - - // advance v texcoord: - vCoord += extrudedData[k].uvScale.y * (distance(frames[index].position, frames[prevIndex].position) / - (extrudedData[k].normalizeV ? smoothLength : actualToRestLengthRatio)); - - // calculate section thickness and scale the basis vectors by it: - float sectionThickness = frames[index].thickness * extrudedData[k].thicknessScale; - - // Loop around each segment: - int nextSectionIndex = sectionIndex + 1; - for (int j = 0; j <= sectionSegments; ++j) - { - // make just one copy of the section vertex: - float2 sectionVertex = sectionData[sectionStart + j]; - - // calculate normal using section vertex, curve normal and binormal: - normal.x = (sectionVertex.x * frames[index].normal.x + sectionVertex.y * frames[index].binormal.x) * sectionThickness; - normal.y = (sectionVertex.x * frames[index].normal.y + sectionVertex.y * frames[index].binormal.y) * sectionThickness; - normal.z = (sectionVertex.x * frames[index].normal.z + sectionVertex.y * frames[index].binormal.z) * sectionThickness; - - // offset curve position by normal: - vertex.x = frames[index].position.x + normal.x; - vertex.y = frames[index].position.y + normal.y; - vertex.z = frames[index].position.z + normal.z; - - // cross(normal, curve tangent) - texTangent.xyz = cross(normal, frames[index].tangent); - texTangent.w = -1; - - int base = (firstVertex + sectionIndex * verticesPerSection + j) * 16; - vertices.Store3( base<<2, asuint(vertex)); - vertices.Store3((base + 3)<<2, asuint(normal)); - vertices.Store4((base + 6)<<2, asuint(texTangent)); - vertices.Store4((base + 10)<<2, asuint(frames[index].color)); - vertices.Store2((base + 14)<<2, asuint(float2(j / (float)sectionSegments * extrudedData[k].uvScale.x, vCoord))); - - if (j < sectionSegments && f < frameCount - 1) - { - int offset = firstTriangle * 3; - tris.Store((offset + tri++)<<2, asuint(firstVertex + sectionIndex * verticesPerSection + j)); - tris.Store((offset + tri++)<<2, asuint(firstVertex + nextSectionIndex * verticesPerSection + j)); - tris.Store((offset + tri++)<<2, asuint(firstVertex + sectionIndex * verticesPerSection + (j + 1))); - - tris.Store((offset + tri++)<<2, asuint(firstVertex + sectionIndex * verticesPerSection + (j + 1))); - tris.Store((offset + tri++)<<2, asuint(firstVertex + nextSectionIndex * verticesPerSection + j)); - tris.Store((offset + tri++)<<2, asuint(firstVertex + nextSectionIndex * verticesPerSection + (j + 1))); - } - } - sectionIndex++; - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/RopeExtrudedRendering.compute.meta b/Assets/Obi/Resources/Compute/RopeExtrudedRendering.compute.meta deleted file mode 100644 index 2861b99f9..000000000 --- a/Assets/Obi/Resources/Compute/RopeExtrudedRendering.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0d389c799c83d43f38f2486ab16fe902 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/RopeLineRendering.compute b/Assets/Obi/Resources/Compute/RopeLineRendering.compute deleted file mode 100644 index 8d3582ae6..000000000 --- a/Assets/Obi/Resources/Compute/RopeLineRendering.compute +++ /dev/null @@ -1,162 +0,0 @@ -#pragma kernel UpdateLineMesh - -#include "PathFrame.cginc" - -struct smootherPathData -{ - uint smoothing; - float decimation; - float twist; - float restLength; - float smoothLength; - uint usesOrientedParticles; -}; - -struct lineMeshData -{ - float2 uvScale; - float thicknessScale; - float uvAnchor; - uint normalizeV; -}; - -StructuredBuffer pathSmootherIndices; -StructuredBuffer chunkOffsets; - -StructuredBuffer frames; -StructuredBuffer frameOffsets; -StructuredBuffer frameCounts; - -StructuredBuffer vertexOffsets; -StructuredBuffer triangleOffsets; -StructuredBuffer triangleCounts; - -StructuredBuffer rendererData; -StructuredBuffer pathData; - -RWByteAddressBuffer vertices; -RWByteAddressBuffer tris; - -// Variables set from the CPU -uint firstRenderer; -uint rendererCount; -float3 localSpaceCamera; - -pathFrame LookAt(pathFrame frame, in pathFrame target, out float dist) -{ - float3 tangent = target.position - frame.position; - dist = length(tangent); - tangent /= dist + EPSILON; - - quaternion rotQ = from_to_rotation(frame.tangent, tangent); - frame.normal = rotate_vector(rotQ, frame.normal); - frame.binormal = rotate_vector(rotQ, frame.binormal); - frame.tangent = tangent; - - return frame; -} - -[numthreads(128, 1, 1)] -void UpdateLineMesh (uint3 id : SV_DispatchThreadID) -{ - unsigned int u = id.x; - if (u >= rendererCount) return; - - int k = firstRenderer + u; - int s = pathSmootherIndices[k]; - - float3 vertex = float3(0,0,0); - float3 normal = float3(0,0,0); - float4 bitangent = FLOAT4_ZERO; - - int tri = 0; - int sectionIndex = 0; - int firstVertex = vertexOffsets[k]; - int firstTriangle = triangleOffsets[k]; - - float smoothLength = 0; - int i = 0; - for (i = chunkOffsets[s]; i < chunkOffsets[s + 1]; ++i) - smoothLength += pathData[i].smoothLength; - - float vCoord = -rendererData[k].uvScale.y * pathData[chunkOffsets[s]].restLength * rendererData[k].uvAnchor; - float actualToRestLengthRatio = smoothLength / pathData[chunkOffsets[s]].restLength; - - // clear out triangle indices for this rope: - for (i = firstTriangle; i < firstTriangle + triangleCounts[k]; ++i) - { - int offset = i*3; - tris.Store((offset)<<2, 0); - tris.Store((offset+1)<<2,0); - tris.Store((offset+2)<<2,0); - } - - // for each chunk in the rope: - for (i = chunkOffsets[s]; i < chunkOffsets[s+1]; ++i) - { - int firstFrame = frameOffsets[i]; - int frameCount = frameCounts[i]; - - for (int f = 0; f < frameCount; ++f) - { - // Calculate previous and next curve indices: - int prevIndex = firstFrame + max(f - 1, 0); - int index = firstFrame + f; - - // advance v texcoord: - vCoord += rendererData[k].uvScale.y * (distance(frames[index].position, frames[prevIndex].position) / - (rendererData[k].normalizeV == 1 ? smoothLength : actualToRestLengthRatio)); - - // calculate section thickness and scale the basis vectors by it: - float sectionThickness = frames[index].thickness * rendererData[k].thicknessScale; - - normal.x = frames[index].position.x - localSpaceCamera.x; - normal.y = frames[index].position.y - localSpaceCamera.y; - normal.z = frames[index].position.z - localSpaceCamera.z; - normal = normalize(normal); - - bitangent.x = -(normal.y * frames[index].tangent.z - normal.z * frames[index].tangent.y); - bitangent.y = -(normal.z * frames[index].tangent.x - normal.x * frames[index].tangent.z); - bitangent.z = -(normal.x * frames[index].tangent.y - normal.y * frames[index].tangent.x); - bitangent.xyz = normalize(bitangent.xyz); - bitangent.w = 1; - - vertex.x = frames[index].position.x - bitangent.x * sectionThickness; - vertex.y = frames[index].position.y - bitangent.y * sectionThickness; - vertex.z = frames[index].position.z - bitangent.z * sectionThickness; - - int base = (firstVertex + sectionIndex * 2) * 16; - vertices.Store3( base<<2, asuint(vertex)); - vertices.Store3((base + 3)<<2, asuint(-normal)); - vertices.Store4((base + 6)<<2, asuint(bitangent)); - vertices.Store4((base + 10)<<2, asuint(frames[index].color)); - vertices.Store2((base + 14)<<2, asuint(float2(0, vCoord))); - - vertex.x = frames[index].position.x + bitangent.x * sectionThickness; - vertex.y = frames[index].position.y + bitangent.y * sectionThickness; - vertex.z = frames[index].position.z + bitangent.z * sectionThickness; - - base = (firstVertex + sectionIndex * 2 + 1) * 16; - vertices.Store3( base<<2, asuint(vertex)); - vertices.Store3((base + 3)<<2, asuint(-normal)); - vertices.Store4((base + 6)<<2, asuint(bitangent)); - vertices.Store4((base + 10)<<2, asuint(frames[index].color)); - vertices.Store2((base + 14)<<2, asuint(float2(1, vCoord))); - - if (f < frameCount - 1) - { - - int offset = firstTriangle * 3; - tris.Store((offset + tri++)<<2, asuint(firstVertex + sectionIndex * 2)); - tris.Store((offset + tri++)<<2, asuint(firstVertex + (sectionIndex + 1) * 2)); - tris.Store((offset + tri++)<<2, asuint(firstVertex + sectionIndex * 2 + 1)); - - tris.Store((offset + tri++)<<2, asuint(firstVertex + sectionIndex * 2 + 1)); - tris.Store((offset + tri++)<<2, asuint(firstVertex + (sectionIndex + 1) * 2)); - tris.Store((offset + tri++)<<2, asuint(firstVertex + (sectionIndex + 1) * 2 + 1)); - } - - sectionIndex++; - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/RopeLineRendering.compute.meta b/Assets/Obi/Resources/Compute/RopeLineRendering.compute.meta deleted file mode 100644 index 05e0afc7a..000000000 --- a/Assets/Obi/Resources/Compute/RopeLineRendering.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d9fce691efd9941a78e1e74355ec3d84 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/RopeMeshRendering.compute b/Assets/Obi/Resources/Compute/RopeMeshRendering.compute deleted file mode 100644 index f12fc2dcc..000000000 --- a/Assets/Obi/Resources/Compute/RopeMeshRendering.compute +++ /dev/null @@ -1,218 +0,0 @@ -#pragma kernel UpdateRopeMesh - -#include "PathFrame.cginc" - -struct ropeMeshData -{ - uint axis; - float volumeScaling; - uint stretchWithRope; - uint spanEntireLength; - uint instances; - float instanceSpacing; - float offset; - float meshSizeAlongAxis; - float4 scale; -}; - -struct smootherPathData -{ - uint smoothing; - float decimation; - float twist; - float restLength; - float smoothLength; - uint usesOrientedParticles; -}; - -struct MeshData -{ - int firstVertex; - int vertexCount; - - int firstTriangle; - int triangleCount; -}; - -StructuredBuffer pathSmootherIndices; -StructuredBuffer chunkOffsets; - -StructuredBuffer frames; -StructuredBuffer frameOffsets; -StructuredBuffer frameCounts; - -StructuredBuffer vertexOffsets; - -StructuredBuffer meshIndices; -StructuredBuffer meshData; - -StructuredBuffer sortedIndices; -StructuredBuffer sortedOffsets; - -StructuredBuffer rendererData; -StructuredBuffer pathData; - -StructuredBuffer positions; -StructuredBuffer normals; -StructuredBuffer tangents; -StructuredBuffer colors; - -RWByteAddressBuffer vertices; - -// Variables set from the CPU -uint firstRenderer; -uint rendererCount; - -pathFrame InterpolateFrames(pathFrame a, pathFrame b, float3 bOffset, float t) -{ - // this offset is used to displace a copy of the first and last frames of the path, - // to ensure meshes extrude correctly prior to the first or past the last frame. - b.position += bOffset; - pathFrame interp = addFrames(multiplyFrame(1 - t, a) ,multiplyFrame(t , b)); - - // (no need to renormalize tangent, since offsetFromCurve[axis] = 0) - interp.normal = normalize(interp.normal); - interp.binormal = normalize(interp.binormal); - return interp; -} - -[numthreads(16, 1, 1)] -void UpdateRopeMesh (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= rendererCount) return; - - int rendererIndex = firstRenderer + i; - int pathIndex = pathSmootherIndices[rendererIndex]; - ropeMeshData renderer = rendererData[rendererIndex]; - - // get mesh data: - MeshData mesh = meshData[meshIndices[rendererIndex]]; - int sortedOffset = sortedOffsets[rendererIndex]; - - // get index of first output vertex: - int firstOutputVertex = vertexOffsets[rendererIndex]; - - // get index of first chunk, ignore others (no support for tearing): - int chunkIndex = chunkOffsets[pathIndex]; - - // get first frame and frame count: - int firstFrame = frameOffsets[chunkIndex]; - int lastFrame = firstFrame + frameCounts[chunkIndex] - 1; - - // get mesh deform axis: - int axis = renderer.axis; - - // initialize scale vector: - float3 actualScale = renderer.scale.xyz; - - // calculate stretch ratio: - float stretchRatio = renderer.stretchWithRope == 1 ? pathData[chunkIndex].smoothLength / pathData[chunkIndex].restLength : 1; - - // squashing factor, makes mesh thinner when stretched and thicker when compresssed. - float squashing = clamp(1 + renderer.volumeScaling * (1 / max(stretchRatio, 0.01f) - 1), 0.01f, 2); - - // calculate scale along swept axis so that the mesh spans the entire lenght of the rope if required. - if (renderer.spanEntireLength == 1) - { - float totalMeshLength = renderer.meshSizeAlongAxis * renderer.instances; - float totalSpacing = renderer.instanceSpacing * (renderer.instances - 1); - float axisScale = pathData[chunkIndex].restLength / (totalMeshLength + totalSpacing); - - if (axis == 0) actualScale.x = axisScale; - else if (axis == 1) actualScale.y = axisScale; - else actualScale.z = axisScale; - } - - // init loop variables: - float lengthAlongAxis = renderer.offset; - int index = firstFrame; - int nextIndex = firstFrame + 1; - int prevIndex = firstFrame; - float nextMagnitude = distance(frames[index].position, frames[nextIndex].position); - float prevMagnitude = nextMagnitude; - - - for (int j = 0; j < mesh.vertexCount; ++j) - { - int base = (firstOutputVertex + sortedIndices[sortedOffset + j]) * 14; - vertices.Store3(base << 2, asuint(positions[mesh.firstVertex + sortedIndices[sortedOffset + j]] * float3(0.5,1,1))); - } - - for (int k = 0; k < (int)renderer.instances; ++k) - { - for (int j = 0; j < mesh.vertexCount; ++j) - { - int currVIndex = mesh.firstVertex + sortedIndices[sortedOffset + j]; - int prevVIndex = mesh.firstVertex + sortedIndices[sortedOffset + max(0,j - 1)]; - - // calculate how much we've advanced in the sort axis since the last vertex: - lengthAlongAxis += (positions[currVIndex][axis] - positions[prevVIndex][axis]) * actualScale[axis] * stretchRatio; - - // check if we have moved to a new section of the curve: - pathFrame frame; - if (lengthAlongAxis < 0) - { - while (-lengthAlongAxis > prevMagnitude && index > firstFrame) - { - lengthAlongAxis += prevMagnitude; - index = max(index - 1, firstFrame); - nextIndex = min(index + 1, lastFrame); - prevIndex = max(index - 1, firstFrame); - nextMagnitude = distance(frames[index].position, frames[nextIndex].position); - prevMagnitude = distance(frames[index].position, frames[prevIndex].position); - } - - float3 offset = float3(0,0,0); - if (index == prevIndex) - { - offset = frames[index].position - frames[nextIndex].position; - prevMagnitude = length(offset); - } - - frame = InterpolateFrames(frames[index], frames[prevIndex], offset, -lengthAlongAxis / prevMagnitude); - } - else - { - while (lengthAlongAxis > nextMagnitude && index < lastFrame) - { - lengthAlongAxis -= nextMagnitude; - index = min(index + 1, lastFrame); - nextIndex = min(index + 1, lastFrame); - prevIndex = max(index - 1, firstFrame); - nextMagnitude = distance(frames[index].position, frames[nextIndex].position); - prevMagnitude = distance(frames[index].position, frames[prevIndex].position); - } - - float3 offset = float3(0,0,0); - if (index == nextIndex) - { - offset = frames[index].position - frames[prevIndex].position; - nextMagnitude = length(offset); - } - - frame = InterpolateFrames(frames[index], frames[nextIndex], offset, lengthAlongAxis / nextMagnitude); - } - - // update basis matrix: - float3x3 basis = frame.ToMatrix(axis); - - // calculate vertex offset from curve: - float3 offsetFromCurve = positions[currVIndex] * actualScale * frame.thickness * squashing; - if (axis == 0) offsetFromCurve.x = 0; - else if (axis == 1) offsetFromCurve.y = 0; - else offsetFromCurve.z = 0; - - // write modified vertex data: - int base = (firstOutputVertex + sortedIndices[sortedOffset + j]) * 14; - vertices.Store3( base<<2, asuint(frame.position + mul(basis, offsetFromCurve))); - vertices.Store3((base + 3)<<2, asuint(mul(basis, normals[currVIndex]))); - vertices.Store4((base + 6)<<2, asuint(float4(mul(basis, tangents[currVIndex].xyz), tangents[currVIndex].w))); - vertices.Store4((base + 10)<<2, asuint(frames[index].color)); - } - - firstOutputVertex += mesh.vertexCount; - lengthAlongAxis += renderer.instanceSpacing * actualScale[axis] * stretchRatio; - } - -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/RopeMeshRendering.compute.meta b/Assets/Obi/Resources/Compute/RopeMeshRendering.compute.meta deleted file mode 100644 index fbe83db5c..000000000 --- a/Assets/Obi/Resources/Compute/RopeMeshRendering.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 68510b7d06c3544fba668628be450928 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/Scan.compute b/Assets/Obi/Resources/Compute/Scan.compute deleted file mode 100644 index dc961d991..000000000 --- a/Assets/Obi/Resources/Compute/Scan.compute +++ /dev/null @@ -1,78 +0,0 @@ -#pragma kernel ScanInBucketExclusive -#pragma kernel ScanAddBucketResult - -#define THREADS_PER_GROUP 512 // Ensure that this equals the 'threadsPerGroup' const in the host script. Must be an odd power of 2. - -// These must be a multiple of THREADS_PER_GROUP. -StructuredBuffer _Input; -RWStructuredBuffer _Result; -RWStructuredBuffer _BlockSum; -uint count; - -groupshared uint bucket[THREADS_PER_GROUP]; - -// Scan in each bucket. -[numthreads(THREADS_PER_GROUP, 1, 1)] -void ScanInBucketExclusive(uint DTid : SV_DispatchThreadID, uint Gid : SV_GroupID, uint GI : SV_GroupIndex) -{ - if (DTid < count) { - bucket[GI] = _Input[DTid]; - } else { - bucket[GI] = 0; - } - - GroupMemoryBarrierWithGroupSync(); - - uint stride; - - // up-sweep - [unroll] - for (stride = 2; stride <= THREADS_PER_GROUP; stride <<= 1) - { - GroupMemoryBarrierWithGroupSync(); - if (((GI + 1) % stride) == 0) - { - const uint half_stride = (stride >> 1); - bucket[GI] += bucket[GI - half_stride]; - } - } - - // Without this barrier, setting tg_mem[-1] to 0 may not be properly - // propagated across the entire threadgroup. - GroupMemoryBarrierWithGroupSync(); - if (GI == THREADS_PER_GROUP - 1) - { - // clear the last element - _BlockSum[Gid] = bucket[GI]; - bucket[GI] = 0; - } - - // down-sweep - [unroll] - for (stride = THREADS_PER_GROUP; stride > 1; stride >>= 1) - { - GroupMemoryBarrierWithGroupSync(); - - if (((GI + 1) % stride) == 0) - { - const uint half_stride = (stride >> 1); - const uint prev_idx = GI - half_stride; - const int tmp = bucket[prev_idx]; - bucket[prev_idx] = bucket[GI]; - bucket[GI] += tmp; - } - } - - GroupMemoryBarrierWithGroupSync(); - - if (DTid < count) - _Result[DTid] = bucket[GI]; -} - -// Add the bucket scanned result to each bucket to get the final result. -[numthreads(THREADS_PER_GROUP, 1, 1)] -void ScanAddBucketResult(uint DTid : SV_DispatchThreadID, uint Gid : SV_GroupID) -{ - if (DTid < count) - _Result[DTid] += _Input[Gid]; -} diff --git a/Assets/Obi/Resources/Compute/Scan.compute.meta b/Assets/Obi/Resources/Compute/Scan.compute.meta deleted file mode 100644 index 4b20551d8..000000000 --- a/Assets/Obi/Resources/Compute/Scan.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7124bb82b9af4476c8de8e82d7f8caba -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/ShapeMatchingConstraints.compute b/Assets/Obi/Resources/Compute/ShapeMatchingConstraints.compute deleted file mode 100644 index 79d671b37..000000000 --- a/Assets/Obi/Resources/Compute/ShapeMatchingConstraints.compute +++ /dev/null @@ -1,266 +0,0 @@ -#pragma kernel CalculateRestShapeMatching -#pragma kernel PlasticDeformation -#pragma kernel Project -#pragma kernel Apply - -#include "MathUtils.cginc" -#include "AtomicDeltas.cginc" - -StructuredBuffer particleIndices; -StructuredBuffer firstIndex; -StructuredBuffer numIndices; -StructuredBuffer explicitGroup; -StructuredBuffer shapeMaterialParameters; - -RWStructuredBuffer RW_restComs; -RWStructuredBuffer coms; -RWStructuredBuffer constraintOrientations; - -RWStructuredBuffer RW_Aqq; -RWStructuredBuffer RW_linearTransforms; -RWStructuredBuffer RW_deformation; - -RWStructuredBuffer RW_positions; -RWStructuredBuffer orientations; - -StructuredBuffer restComs; -StructuredBuffer Aqq; -StructuredBuffer linearTransforms; -StructuredBuffer deformation; - -StructuredBuffer positions; -StructuredBuffer restPositions; -StructuredBuffer restOrientations; -StructuredBuffer invMasses; -StructuredBuffer invRotationalMasses; -StructuredBuffer principalRadii; - -// Variables set from the CPU -uint activeConstraintCount; -float deltaTime; -float sorFactor; - -void RecalculateRestData(uint i) -{ - int k = 0; - float maximumMass = 10000; - - // initialize rest center of mass and shape matrix: - RW_restComs[i] = FLOAT4_ZERO; - RW_Aqq[i] = FLOAT4X4_ZERO; - - float4 restCom = FLOAT4_ZERO; - float4x4 _Aqq = FLOAT4X4_ZERO, _Rqq = FLOAT4X4_ZERO; - - // calculate rest center of mass, shape mass and RW_Aqq matrix. - for (int j = 0; j < numIndices[i]; ++j) - { - k = particleIndices[firstIndex[i] + j]; - - float mass = maximumMass; - if (invMasses[k] > 1.0f / maximumMass) - mass = 1.0f / invMasses[k]; - - restCom += restPositions[k] * mass; - - float4x4 particleR = q_toMatrix(restOrientations[k]); - particleR[3][3] = 0; - - _Rqq += mul(particleR, - mul(AsDiagonal(GetParticleInertiaTensor(principalRadii[k],invRotationalMasses[k])), - transpose(particleR)) - ); - - float4 restPosition = restPositions[k]; - restPosition[3] = 0; - - _Aqq += mass * multrnsp4(restPosition, restPosition); - } - - if (restCom[3] < EPSILON) - return; - - restCom.xyz /= restCom[3]; - RW_restComs[i] = restCom; - - restCom[3] = 0; - _Aqq -= RW_restComs[i][3] * multrnsp4(restCom, restCom); - _Aqq[3][3] = 1; // so that the determinant is never 0 due to all-zeros row/column. - - RW_Aqq[i] = Inverse(_Rqq + mul(RW_deformation[i], mul(_Aqq, transpose(RW_deformation[i])))); - -} - -[numthreads(128, 1, 1)] -void CalculateRestShapeMatching (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - RecalculateRestData(i); -} - -[numthreads(128, 1, 1)] -void Project (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int k; - float maximumMass = 10000; - - coms[i] = FLOAT4_ZERO; - float4x4 Apq = FLOAT4X4_ZERO, Rpq = FLOAT4X4_ZERO; - - // calculate shape mass, center of mass, and moment matrix: - int j; - for (j = 0; j < numIndices[i]; ++j) - { - k = particleIndices[firstIndex[i] + j]; - - float mass = maximumMass; - if (invMasses[k] > 1.0f / maximumMass) - mass = 1.0f / invMasses[k]; - - coms[i] += positions[k] * mass; - - float4x4 particleR = q_toMatrix(orientations[k]); - float4x4 particleRT = q_toMatrix(restOrientations[k]); - particleR[3][3] = 0; - particleRT[3][3] = 0; - - Rpq += mul(particleR, - mul(AsDiagonal(GetParticleInertiaTensor(principalRadii[k],invRotationalMasses[k])), - transpose(particleRT)) - ); - - float4 restPosition = restPositions[k]; - restPosition[3] = 0; - - Apq += mass * multrnsp4(positions[k], restPosition); - } - - if (restComs[i][3] < EPSILON) - return; - - coms[i] /= restComs[i][3]; - - // subtract global shape moment: - float4 restCom = restComs[i]; - restCom[3] = 0; - - Apq -= restComs[i][3] * multrnsp4(coms[i], restCom); - - // calculate optimal transform including plastic deformation: - float4x4 Apq_def = Rpq + mul(Apq, transpose(deformation[i])); - Apq_def[3][3] = 1; - - // reconstruct full best-matching linear transform: - RW_linearTransforms[i] = mul(Apq_def, Aqq[i]); - - // extract rotation from transform matrix, using warmstarting and few iterations: - constraintOrientations[i] = ExtractRotation(Apq_def, constraintOrientations[i], 5); - - // calculate particle orientations: - if (explicitGroup[i] > 0) - { - // if the group is explicit, set the orientation for all particles: - for (int j = 0; j < numIndices[i]; ++j) - { - k = particleIndices[firstIndex[i] + j]; - orientations[k] = qmul(constraintOrientations[i], restOrientations[k]); - } - } - else - { - // set orientation of center particle only: - int centerIndex = particleIndices[firstIndex[i]]; - orientations[centerIndex] = qmul(constraintOrientations[i], restOrientations[centerIndex]); - } - - // finally, obtain rotation matrix: - float4x4 R = q_toMatrix(constraintOrientations[i]); - R[3][3] = 0; - float4x4 transform = mul(R,deformation[i]); - - // calculate and accumulate particle goal positions: - float4 goal, delta; - for (j = 0; j < numIndices[i]; ++j) - { - k = particleIndices[firstIndex[i] + j]; - goal = coms[i] + mul(transform, restPositions[k] - restComs[i]); - delta = (goal - positions[k]) * shapeMaterialParameters[i * 5]; - - AddPositionDelta(k, delta); - } -} - -[numthreads(128, 1, 1)] -void PlasticDeformation (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= activeConstraintCount) return; - - // get plastic deformation parameters: - float plastic_yield = shapeMaterialParameters[i * 5 + 1]; - float plastic_creep = shapeMaterialParameters[i * 5 + 2]; - float plastic_recovery = shapeMaterialParameters[i * 5 + 3]; - float max_deform = shapeMaterialParameters[i * 5 + 4]; - - // if we are allowed to absorb deformation: - if (plastic_creep > 0) - { - //obtain rotation matrix: - float4x4 R = q_toMatrix(constraintOrientations[i]); - R[3][3] = 1; - - // get scale matrix (A = RS so S = Rt * A) and its deviation from the identity matrix: - float4x4 deform_matrix = mul(transpose(R), linearTransforms[i]) - FLOAT4X4_IDENTITY; - - // if the amount of deformation exceeds the yield threshold: - float norm = FrobeniusNorm(deform_matrix); - if (norm > plastic_yield) - { - // deform the shape permanently: - RW_deformation[i] = mul(FLOAT4X4_IDENTITY + plastic_creep * deform_matrix, RW_deformation[i]); - - // clamp deformation so that it does not exceed a percentage; - deform_matrix = RW_deformation[i] - FLOAT4X4_IDENTITY; - norm = FrobeniusNorm(deform_matrix); - if (norm > max_deform) - { - RW_deformation[i] = FLOAT4X4_IDENTITY + max_deform * deform_matrix / norm; - } - - // if we cannot recover from plastic deformation, recalculate rest shape now: - if (plastic_recovery == 0) - RecalculateRestData(i); - } - } - - // if we can recover from plastic deformation, lerp towards non-deformed shape and recalculate rest shape: - if (plastic_recovery > 0) - { - RW_deformation[i] += (FLOAT4X4_IDENTITY - RW_deformation[i]) * min(plastic_recovery * deltaTime, 1.0f); - RecalculateRestData(i); - } -} - -[numthreads(128, 1, 1)] -void Apply (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int first = firstIndex[i]; - int last = first + numIndices[i]; - - for (int k = first; k < last; ++k) - { - int p = particleIndices[k]; - ApplyPositionDelta(RW_positions, p, sorFactor); - } -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/ShapeMatchingConstraints.compute.meta b/Assets/Obi/Resources/Compute/ShapeMatchingConstraints.compute.meta deleted file mode 100644 index ea486ca81..000000000 --- a/Assets/Obi/Resources/Compute/ShapeMatchingConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 18ba9336feedf4902b78736cf9abdaa8 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/Simplex.cginc b/Assets/Obi/Resources/Compute/Simplex.cginc deleted file mode 100644 index 9fc762e39..000000000 --- a/Assets/Obi/Resources/Compute/Simplex.cginc +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef SIMPLEX_INCLUDE -#define SIMPLEX_INCLUDE - -#include "Optimization.cginc" - -uint pointCount; -uint edgeCount; -uint triangleCount; - -int GetSimplexStartAndSize(in uint index, out uint size) -{ - size = 0; - int start = 0; - - if (index < triangleCount) - { - size = 3; - start = index * 3; - } - else if (index < triangleCount + edgeCount) - { - size = 2; - start = triangleCount * 3 + (index - triangleCount) * 2; - } - else if (index < triangleCount + edgeCount + pointCount) - { - size = 1; - start = triangleCount * 3 + edgeCount * 2 + (index - triangleCount - edgeCount); - } - return start; -} - -float4 BarycenterForSimplexOfSize(in int simplexSize) -{ - switch(simplexSize) - { - case 1: return float4(1,0,0,0); - case 2: return float4(0.5,0.5,0,0); - case 3: return float4(1/3.0,1/3.0,1/3.0,0); - case 4: return float4(0.25,0.25,0.25,0.25); - default: return float4(1,0,0,0); - } -} - -struct Simplex : IDistanceFunction -{ - StructuredBuffer positions; - StructuredBuffer radii; - StructuredBuffer simplices; - - int simplexStart; - int simplexSize; - - void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) - { - switch (simplexSize) - { - case 1: - default: - { - float4 p1 = positions[simplices[simplexStart]]; p1.w = 0; - projectedPoint.bary = float4(1, 0, 0, 0); - projectedPoint.pos = p1; - } - break; - case 2: - { - float4 p1 = positions[simplices[simplexStart]]; p1.w = 0; - float4 p2 = positions[simplices[simplexStart + 1]]; p2.w = 0; - float mu; - NearestPointOnEdge(p1, p2, pos, mu); - projectedPoint.bary = float4(1 - mu, mu, 0, 0); - projectedPoint.pos = p1 * projectedPoint.bary[0] + p2 * projectedPoint.bary[1]; - - }break; - case 3: - { - CachedTri tri; - tri.Cache(float4(positions[simplices[simplexStart]].xyz,0), - float4(positions[simplices[simplexStart + 1]].xyz,0), - float4(positions[simplices[simplexStart + 2]].xyz,0)); - projectedPoint.pos = NearestPointOnTri(tri, pos, projectedPoint.bary); - }break; - } - projectedPoint.normal = normalizesafe(pos - projectedPoint.pos); - } - -}; -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/Simplex.cginc.meta b/Assets/Obi/Resources/Compute/Simplex.cginc.meta deleted file mode 100644 index a695ffd73..000000000 --- a/Assets/Obi/Resources/Compute/Simplex.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: d8eeb7300d95c4653a91d905aaaf5344 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/SkinConstraints.compute b/Assets/Obi/Resources/Compute/SkinConstraints.compute deleted file mode 100644 index c3714990c..000000000 --- a/Assets/Obi/Resources/Compute/SkinConstraints.compute +++ /dev/null @@ -1,71 +0,0 @@ -#pragma kernel Project -#pragma kernel Apply - -#include "MathUtils.cginc" -#include "AtomicDeltas.cginc" - -StructuredBuffer particleIndices; -StructuredBuffer skinPoints; -StructuredBuffer skinNormals; -StructuredBuffer skinRadiiBackstop; -StructuredBuffer skinCompliance; -RWStructuredBuffer lambdas; - -RWStructuredBuffer positions; -StructuredBuffer invMasses; - -// Variables set from the CPU -uint activeConstraintCount; -float deltaTime; -float sorFactor; - -[numthreads(128, 1, 1)] -void Project (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - float radius = skinRadiiBackstop[i].x; - float collisionRadius = skinRadiiBackstop[i].y; - float backstopDistance = collisionRadius + skinRadiiBackstop[i].z; - - float compliance = skinCompliance[i] / (deltaTime * deltaTime); - int p = particleIndices[i]; - - if (invMasses[p] > 0) - { - float4 toSkin = positions[p] - skinPoints[i]; - float4 toBackstop = positions[p] - (skinPoints[i] - skinNormals[i] * backstopDistance); - - // distance to skin and backstop sphere centers: - float d = length(toSkin); - float b = length(toBackstop); - - // constrain particle within skin radius. - // ignore mass in the equations (use 1), as we don't want particle mass to interfere with skin compliance. - // We should be able to adjust skin properties and particle mass (for collisions) independently. - float constraint = max(0,d - radius); - float dlambda = (-constraint - compliance * lambdas[i]) / (1 + compliance); - lambdas[i] += dlambda; - float4 skinCorrection = dlambda * toSkin / (d + EPSILON); - - // constrain particle outside the backstop sphere (0 compliance): - constraint = min(0, b - collisionRadius); - float4 backstopCorrection = - constraint * toBackstop / (b + EPSILON); - - AddPositionDelta(p, skinCorrection + backstopCorrection); - } -} - -[numthreads(128, 1, 1)] -void Apply (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int p1 = particleIndices[i]; - - ApplyPositionDelta(positions, p1, sorFactor); -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/SkinConstraints.compute.meta b/Assets/Obi/Resources/Compute/SkinConstraints.compute.meta deleted file mode 100644 index 92eeacff3..000000000 --- a/Assets/Obi/Resources/Compute/SkinConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2bec2152263654b08b1639ececa4ced6 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/SoftbodyRendering.compute b/Assets/Obi/Resources/Compute/SoftbodyRendering.compute deleted file mode 100644 index 1afb27c92..000000000 --- a/Assets/Obi/Resources/Compute/SoftbodyRendering.compute +++ /dev/null @@ -1,145 +0,0 @@ -#pragma kernel UpdateSoftbodyMesh - -#include "MathUtils.cginc" - -struct Influence -{ - int index; - float weight; -}; - -struct SkinmapData -{ - int firstInfluence; - int firstInfNumber; - int firstParticleBindPose; - - int firstSkinWeight; - int firstSkinWeightNumber; - int firstBoneBindPose; - - int bindPoseCount; -}; - -struct SkeletonData -{ - int firstBone; - int boneCount; -}; - -struct MeshData -{ - int firstVertex; - int vertexCount; - - int firstTriangle; - int triangleCount; -}; - -StructuredBuffer particleIndices; -StructuredBuffer rendererIndices; // for each vertex/particle, index of its renderer. - -StructuredBuffer renderablePositions; -StructuredBuffer renderableOrientations; - -StructuredBuffer restPositions; -StructuredBuffer restOrientations; -StructuredBuffer colors; - -StructuredBuffer skinConstraintOffsets; - -StructuredBuffer skinmapIndices; // for each renderer, index of its skinmap. -StructuredBuffer meshIndices; // for each renderer, index of its mesh. -StructuredBuffer skeletonIndices; // for each renderer, index of its skeleton. - -StructuredBuffer particleOffsets; // for each renderer, index of its first particle in the batch. -StructuredBuffer vertexOffsets; // for each renderer, index of its first vertex in the batch. - -StructuredBuffer skinData; -StructuredBuffer influences; -StructuredBuffer influenceOffsets; -StructuredBuffer bindPoses; - -StructuredBuffer skeletonData; -StructuredBuffer bonePos; -StructuredBuffer boneRot; -StructuredBuffer boneScl; - -StructuredBuffer meshData; -StructuredBuffer positions; -StructuredBuffer normals; -StructuredBuffer tangents; - -RWByteAddressBuffer vertices; - -// Variables set from the CPU -uint vertexCount; -float4x4 world2Solver; - -[numthreads(128, 1, 1)] -void UpdateSoftbodyMesh (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= vertexCount) return; - - int rendererIndex = rendererIndices[i]; - - // get skin map and mesh data: - SkinmapData skin = skinData[skinmapIndices[rendererIndex]]; - MeshData mesh = meshData[meshIndices[rendererIndex]]; - SkeletonData skel = skeletonData[skeletonIndices[rendererIndex]]; - - // get index of this vertex in its original mesh: - int originalVertexIndex = i - vertexOffsets[rendererIndex]; - - // get index of the vertex in the mesh batch: - int batchedVertexIndex = mesh.firstVertex + originalVertexIndex; - - // get first influence and amount of influences for this vertex: - int influenceStart = influenceOffsets[skin.firstInfNumber + originalVertexIndex]; - int influenceCount = influenceOffsets[skin.firstInfNumber + originalVertexIndex + 1] - influenceStart; - - float3 position = float3(0,0,0); - float3 normal = float3(0,0,0); - float4 tangent = FLOAT4_ZERO; - float4 color = FLOAT4_ZERO; - - for (int k = influenceStart; k < influenceStart + influenceCount; ++k) - { - Influence inf = influences[skin.firstInfluence + k]; - float4x4 trfm; - - if (inf.index < skin.bindPoseCount) // bone influence: - { - int boneIndex = skel.firstBone + inf.index; - int bindIndex = skin.firstParticleBindPose + inf.index; - - float4x4 bind = bindPoses[bindIndex]; - - float4x4 deform = inf.index < skel.boneCount ? TRS(bonePos[boneIndex], boneRot[boneIndex], boneScl[boneIndex]) : FLOAT4X4_IDENTITY; - - // bone skinning leaves vertices in world space, so convert to solver space afterwards: - trfm = mul(world2Solver, mul(deform, bind)); - } - else // particle influence - { - int p = particleIndices[particleOffsets[rendererIndex] + inf.index - skin.bindPoseCount]; - - float4x4 deform = mul(m_translate(FLOAT4X4_IDENTITY,renderablePositions[p].xyz), q_toMatrix(renderableOrientations[p])); - trfm = mul(deform, bindPoses[skin.firstParticleBindPose + inf.index]); - color += colors[p] * inf.weight; - } - - // update vertex/normal/tangent: - position += mul(trfm, float4(positions[batchedVertexIndex], 1)).xyz * inf.weight; - normal += mul(trfm, float4(normals[batchedVertexIndex], 0)).xyz * inf.weight; - tangent += float4(mul(trfm, float4(tangents[batchedVertexIndex].xyz, 0)).xyz, tangents[batchedVertexIndex].w) * inf.weight; - } - - int base = i * 14; - vertices.Store3( base<<2, asuint(position)); - vertices.Store3((base + 3)<<2, asuint(normal)); - vertices.Store4((base + 6)<<2, asuint(tangent)); - vertices.Store4((base + 10)<<2, asuint(color)); -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/SoftbodyRendering.compute.meta b/Assets/Obi/Resources/Compute/SoftbodyRendering.compute.meta deleted file mode 100644 index 4ae05f36c..000000000 --- a/Assets/Obi/Resources/Compute/SoftbodyRendering.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 805ca20f71b034180a1ab0ba707928be -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/Solver.compute b/Assets/Obi/Resources/Compute/Solver.compute deleted file mode 100644 index 2cb5d27cc..000000000 --- a/Assets/Obi/Resources/Compute/Solver.compute +++ /dev/null @@ -1,288 +0,0 @@ -#pragma kernel ApplyInertialForces -#pragma kernel ApplyRigidbodyDeltas -#pragma kernel PredictPositions -#pragma kernel UpdateVelocities -#pragma kernel UpdatePositions -#pragma kernel UpdateLifetimes -#pragma kernel EnforceLimits -#pragma kernel Interpolate - -#include "Bounds.cginc" -#include "Integration.cginc" -#include "CollisionMaterial.cginc" -#include "SolverParameters.cginc" -#include "MathUtils.cginc" -#include "Rigidbody.cginc" - -StructuredBuffer simplices; -StructuredBuffer activeParticles; -StructuredBuffer invMasses; -StructuredBuffer invRotationalMasses; -StructuredBuffer phases; -StructuredBuffer buoyancies; -StructuredBuffer fluidRadii; - -StructuredBuffer startPositions; -StructuredBuffer endPositions; -StructuredBuffer startOrientations; -StructuredBuffer endOrientations; - -RWStructuredBuffer positions; -RWStructuredBuffer orientations; -RWStructuredBuffer principalRadii; -RWStructuredBuffer renderablePositions; -RWStructuredBuffer renderableOrientations; -RWStructuredBuffer renderableRadii; -RWStructuredBuffer prevPositions; -RWStructuredBuffer prevOrientations; -RWStructuredBuffer velocities; -RWStructuredBuffer angularVelocities; -RWStructuredBuffer life; -RWStructuredBuffer wind; - -RWStructuredBuffer deadParticles; - -RWStructuredBuffer externalForces; -RWStructuredBuffer externalTorques; - -RWStructuredBuffer linearDeltas; -RWStructuredBuffer angularDeltas; - -StructuredBuffer inertialSolverFrame; - -// Variables set from the CPU -uint particleCount; - -float deltaTime; -float blendFactor; -float velocityScale; -bool killOffLimits; - -float4 angularVel; -float4 inertialAccel; -float4 eulerAccel; -float4 ambientWind; -bool inertialWind; - -float4 boundaryLimitsMin; -float4 boundaryLimitsMax; - -[numthreads(128, 1, 1)] -void ApplyInertialForces(uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= particleCount) return; - - int p = activeParticles[i]; - - if (invMasses[p] > 0) - { - float4 euler = float4(cross(eulerAccel.xyz, positions[p].xyz), 0); - float4 centrifugal = float4(cross(angularVel.xyz, cross(angularVel.xyz, positions[p].xyz)), 0); - float4 coriolis = 2 * float4(cross(angularVel.xyz, velocities[p].xyz), 0); - float4 angularAccel = euler + coriolis + centrifugal; - - velocities[p] -= (inertialAccel * worldLinearInertiaScale + angularAccel * worldAngularInertiaScale) * deltaTime; - } - - wind[p] = ambientWind; - - if (inertialWind) - { - float4 wsPos = inertialSolverFrame[0].frame.TransformPoint(positions[p]); - wind[p] -= inertialSolverFrame[0].frame.InverseTransformVector(inertialSolverFrame[0].velocityAtPoint(wsPos)); - } -} - -[numthreads(128, 1, 1)] -void ApplyRigidbodyDeltas (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= particleCount) return; - - linearDeltas[i].xyz = float3(asfloat(linearDeltasAsInt[i].x), - asfloat(linearDeltasAsInt[i].y), - asfloat(linearDeltasAsInt[i].z)); - - angularDeltas[i].xyz = float3(asfloat(angularDeltasAsInt[i].x), - asfloat(angularDeltasAsInt[i].y), - asfloat(angularDeltasAsInt[i].z)); -} - -[numthreads(128, 1, 1)] -void PredictPositions (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= particleCount) return; - - int p = activeParticles[i]; - - // the previous position/orientation is the current position/orientation at the start of the step. - prevPositions[p] = positions[p]; - prevOrientations[p] = orientations[p]; - - // predict positions: - if (invMasses[p] > 0) - { - float4 effectiveGravity = float4(gravity,0); - - // Adjust gravity for buoyant fluid particles: - if ((phases[p] & (int)PHASE_FLUID) != 0) - effectiveGravity *= -buoyancies[p].z; - - // apply external forces and gravity: - float4 vel = velocities[p] + (invMasses[p] * externalForces[p] + effectiveGravity) * deltaTime; - - // project velocity to 2D plane if needed: - if (mode == 1) - vel[3] = 0; - - velocities[p] = vel; - } - - if (invRotationalMasses[p] > 0) - { - // apply external torques (simplification: we don't use full inertia tensor here) - float3 angularVel = angularVelocities[p].xyz + invRotationalMasses[p] * externalTorques[p].xyz * deltaTime; - - // project angular velocity to 2D plane normal if needed: - if (mode == 1) - angularVel = Project(angularVel,float3(0, 0, 1)); - - angularVelocities[p] = float4(angularVel, angularVelocities[p].w); - } - - positions[p] = IntegrateLinear(positions[p], velocities[p], deltaTime); - orientations[p] = IntegrateAngular(orientations[p], angularVelocities[p], deltaTime); -} - -[numthreads(128, 1, 1)] -void UpdateVelocities (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= particleCount) return; - - int p = activeParticles[i]; - - // Project particles on the XY plane if we are in 2D mode: - if (mode == 1) - { - // restrict position to the 2D plane - float4 pos = positions[p]; - pos[2] = prevPositions[p][2]; - positions[p] = pos; - } - - if (invMasses[p] > 0) - velocities[p] = DifferentiateLinear(positions[p],prevPositions[p],deltaTime); - else - velocities[p] = FLOAT4_ZERO; - - if (invRotationalMasses[p] > 0) - angularVelocities[p].xyz = DifferentiateAngular(orientations[p], prevOrientations[p], deltaTime).xyz; - else - angularVelocities[p] = FLOAT4_ZERO; -} - -[numthreads(128, 1, 1)] -void UpdatePositions (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= particleCount) return; - - int p = activeParticles[i]; - - // damp velocities: - velocities[p] *= velocityScale; - angularVelocities[p].xyz *= velocityScale; - - // clamp velocities: - float velMagnitude = length(velocities[p]); - float angularVelMagnitude = length(angularVelocities[p].xyz); - - if (velMagnitude > EPSILON) - velocities[p] *= min(maxVelocity, velMagnitude) / velMagnitude; - - if (angularVelMagnitude > EPSILON) - angularVelocities[p].xyz *= min(maxAngularVelocity, angularVelMagnitude) / angularVelMagnitude; - - // if the kinetic energy is below the sleep threshold, keep the particle at its previous position. - if (velMagnitude * velMagnitude * 0.5f + angularVelMagnitude * angularVelMagnitude * 0.5f <= sleepThreshold) - { - positions[p] = prevPositions[p]; - orientations[p] = prevOrientations[p]; - velocities[p] = FLOAT4_ZERO; - angularVelocities[p].xyz = float3(0,0,0); - } -} - -[numthreads(128, 1, 1)] -void UpdateLifetimes (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= particleCount) return; - - int p = activeParticles[i]; - - life[p] -= deltaTime; - - // if particle is dead, append it to array. - if (life[p] <= 0) - { - // atomically increment dead particle counter: - uint count = deadParticles.IncrementCounter(); - - deadParticles[count] = p; - life[p] = 0; - } -} - -[numthreads(128, 1, 1)] -void EnforceLimits (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= particleCount) return; - - int p = activeParticles[i]; - - float4 pos = positions[p]; - float4 prevPos = prevPositions[p]; - - bool outside = any(step(pos, boundaryLimitsMin).xyz + step(boundaryLimitsMax, pos).xyz); - - if ((phases[p] & (int)PHASE_ISOLATED) != 0) - life[p] = killOffLimits && outside ? 0 : life[p]; - - pos.xyz = clamp(pos, boundaryLimitsMin, boundaryLimitsMax).xyz; - prevPos.xyz = clamp(prevPos, boundaryLimitsMin, boundaryLimitsMax).xyz; - - positions[p] = pos; - prevPositions[p] = prevPos; -} - -[numthreads(128, 1, 1)] -void Interpolate (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= particleCount) return; - - if (interpolation == 1) - { - renderablePositions[i] = lerp(startPositions[i], endPositions[i], blendFactor); - renderableOrientations[i] = normalize(q_slerp(startOrientations[i], endOrientations[i], blendFactor)); - renderableRadii[i] = principalRadii[i]; - } - else if (interpolation == 2) - { - renderablePositions[i] = lerp(endPositions[i], positions[i], blendFactor); - renderableOrientations[i] = normalize(q_slerp(endOrientations[i], orientations[i], blendFactor)); - renderableRadii[i] = principalRadii[i]; - } - else - { - renderablePositions[i] = endPositions[i]; - renderableOrientations[i] = normalize(endOrientations[i]); - renderableRadii[i] = principalRadii[i]; - } -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/Solver.compute.meta b/Assets/Obi/Resources/Compute/Solver.compute.meta deleted file mode 100644 index 5e9538951..000000000 --- a/Assets/Obi/Resources/Compute/Solver.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8f597cb6a5a9e45499d9fd0f6160e5b4 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/SolverParameters.cginc b/Assets/Obi/Resources/Compute/SolverParameters.cginc deleted file mode 100644 index 8de4762a4..000000000 --- a/Assets/Obi/Resources/Compute/SolverParameters.cginc +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef SOLVERPARAMS_INCLUDE -#define SOLVERPARAMS_INCLUDE - -int mode; -int interpolation; -float3 gravity; -float damping; -float worldLinearInertiaScale; -float worldAngularInertiaScale; -float maxAnisotropy; -float sleepThreshold; -float maxVelocity; -float maxAngularVelocity; -float collisionMargin; -float maxDepenetration; -float colliderCCD; -float particleCCD; -float shockPropagation; -int surfaceCollisionIterations; -float surfaceCollisionTolerance; -float4 diffusionMask; - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/SolverParameters.cginc.meta b/Assets/Obi/Resources/Compute/SolverParameters.cginc.meta deleted file mode 100644 index a591ec8ca..000000000 --- a/Assets/Obi/Resources/Compute/SolverParameters.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 57c61c65170924f0aa225156e164ceb8 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/SortParticleData.compute b/Assets/Obi/Resources/Compute/SortParticleData.compute deleted file mode 100644 index 80282cf6f..000000000 --- a/Assets/Obi/Resources/Compute/SortParticleData.compute +++ /dev/null @@ -1,30 +0,0 @@ -#pragma kernel SortData - -StructuredBuffer sortedToOriginal; - -StructuredBuffer positions; -StructuredBuffer prevPositions; -StructuredBuffer principalRadii; -StructuredBuffer userData; - -RWStructuredBuffer sortedPositions; -RWStructuredBuffer sortedPrevPositions; -RWStructuredBuffer sortedPrincipalRadii; -RWStructuredBuffer sortedUserData; - -StructuredBuffer dispatchBuffer; - -[numthreads(128, 1, 1)] -void SortData (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= dispatchBuffer[3]) return; - - int original = sortedToOriginal[i]; - - sortedPositions[i] = positions[original]; - sortedPrevPositions[i] = prevPositions[original]; - sortedPrincipalRadii[i] = principalRadii[original]; - sortedUserData[i] = userData[original]; -} - diff --git a/Assets/Obi/Resources/Compute/SortParticleData.compute.meta b/Assets/Obi/Resources/Compute/SortParticleData.compute.meta deleted file mode 100644 index 13aa550a1..000000000 --- a/Assets/Obi/Resources/Compute/SortParticleData.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9cd8eed4d0d6e45c18941232e855994f -ComputeShaderImporter: - externalObjects: {} - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/SpatialQueries.compute b/Assets/Obi/Resources/Compute/SpatialQueries.compute deleted file mode 100644 index b9db064d1..000000000 --- a/Assets/Obi/Resources/Compute/SpatialQueries.compute +++ /dev/null @@ -1,314 +0,0 @@ -#include "GridUtils.cginc" -#include "CollisionMaterial.cginc" -#include "ContactHandling.cginc" -#include "ColliderDefinitions.cginc" -#include "Rigidbody.cginc" -#include "Bounds.cginc" -#include "Simplex.cginc" -#include "SolverParameters.cginc" -#include "AtomicDeltas.cginc" -#include "Phases.cginc" -#include "QueryDefinitions.cginc" - -#define MAX_RESULTS_PER_SIMPLEX 32 - -#pragma kernel Clear -#pragma kernel BuildUnsortedList -#pragma kernel FindPopulatedLevels -#pragma kernel SortList -#pragma kernel BuildContactList -#pragma kernel PrefixSumColliderCounts -#pragma kernel SortContactPairs - -StructuredBuffer positions; -StructuredBuffer orientations; -StructuredBuffer principalRadii; - -StructuredBuffer activeParticles; -StructuredBuffer simplices; -StructuredBuffer filters; -RWStructuredBuffer simplexBounds; // bounding box of each simplex. - -StructuredBuffer transforms; -StructuredBuffer shapes; -RWStructuredBuffer sortedColliderIndices; - -RWStructuredBuffer colliderTypeCounts; -RWStructuredBuffer contactOffsetsPerType; -RWStructuredBuffer unsortedContactPairs; - -RWStructuredBuffer cellIndices; -RWStructuredBuffer cellOffsets; - -RWStructuredBuffer cellCounts; -RWStructuredBuffer offsetInCells; - -RWStructuredBuffer contacts; -RWStructuredBuffer contactPairs; -RWStructuredBuffer dispatchBuffer; - -StructuredBuffer solverToWorld; -StructuredBuffer worldToSolver; - -uint maxResults; -uint queryCount; // amount of colliders in the grid. -uint cellsPerShape; // max amount of cells a collider can be inserted into. Typically this is 8. -int shapeTypeCount; // number of different query shapes, ie: box, sphere, ray, etc. - -aabb CalculateShapeAABB(in queryShape shape) -{ - float offset = shape.contactOffset + shape.maxDistance; - - aabb bounds; - bounds.min_ = FLT_MAX; - bounds.max_ = FLT_MIN; - switch (shape.type) - { - case SPHERE_QUERY: - bounds.FromParticle(shape.center, shape.size.x + offset); break; - case BOX_QUERY: - bounds.FromEdge(shape.center - shape.size*0.5f, shape.center + shape.size * 0.5f, offset); break; - case RAY_QUERY: - bounds.FromEdge(shape.center, shape.center + shape.size, offset); break; - } - return bounds; -} - -[numthreads(128, 1, 1)] -void Clear (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i == 0) - { - for (int l = 0; l <= GRID_LEVELS; ++l) - levelPopulation[l] = 0; - } - - // clear all cell offsets to invalid, so that we can later use atomic minimum to calculate the offset. - if (i < maxCells) - { - cellOffsets[i] = INVALID; - cellCounts[i] = 0; - } - - // clear all cell indices to invalid. - if (i < queryCount) - { - for (uint j = 0; j < cellsPerShape; ++j) - cellIndices[i*cellsPerShape+j] = INVALID; - } -} - -[numthreads(128, 1, 1)] -void BuildUnsortedList (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - if (i >= queryCount) return; - - // get bounds in solver space: - aabb bounds = CalculateShapeAABB(shapes[i]).Transformed(worldToSolver[0].Multiply(transforms[i])); - - // calculate bounds size, grid level and cell size: - float4 size = bounds.max_ - bounds.min_; - float maxSize = max(max (size.x, size.y), size.z); - int level = GridLevelForSize(maxSize); - float cellSize = CellSizeOfLevel(level); - - // calculate max and min cell coordinates (force 4th component to zero, might not be after expanding) - int4 minCell = floor(bounds.min_ / cellSize); - int4 maxCell = floor(bounds.max_ / cellSize); - minCell[3] = 0; - maxCell[3] = 0; - - int4 cellSpan = maxCell - minCell; - - // insert collider in cells: - for (int x = 0; x <= cellSpan[0]; ++x) - { - for (int y = 0; y <= cellSpan[1]; ++y) - { - for (int z = 0; z <= cellSpan[2]; ++z) - { - int cellIndex = GridHash(minCell + int4(x, y, z, level)); - - // calculate flat index of this cell into arrays: - int k = x + y*2 + z*4 + i*cellsPerShape; - - cellIndices[k] = cellIndex; - InterlockedAdd(cellCounts[cellIndex],1,offsetInCells[k]); - } - } - } - - // atomically increase this level's population by one: - InterlockedAdd(levelPopulation[1 + level],1); -} - -[numthreads(128, 1, 1)] -void SortList (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - if (i >= queryCount * cellsPerShape) return; - - uint cellIndex = cellIndices[i]; - - if (cellIndex != INVALID) - { - // write shape to its sorted index: - uint sortedIndex = cellOffsets[cellIndex] + offsetInCells[i]; - sortedColliderIndices[sortedIndex] = i; - } -} - -[numthreads(128, 1, 1)] -void BuildContactList (uint3 id : SV_DispatchThreadID) -{ - unsigned int threadIndex = id.x; - - if (threadIndex >= pointCount + edgeCount + triangleCount) return; - - uint cellCount = queryCount * cellsPerShape; - int candidateCount = 0; - uint candidates[MAX_RESULTS_PER_SIMPLEX]; - - int simplexSize; - int simplexStart = GetSimplexStartAndSize(threadIndex, simplexSize); - - aabb b = simplexBounds[threadIndex]; - - // max size of the particle bounds in cells: - int4 maxSize = int4(10,10,10,10); - - // build a list of candidate colliders: - for (uint m = 1; m <= levelPopulation[0]; ++m) - { - uint l = levelPopulation[m]; - float cellSize = CellSizeOfLevel(l); - - int4 minCell = floor(b.min_ / cellSize); - int4 maxCell = floor(b.max_ / cellSize); - maxCell = minCell + min(maxCell - minCell, maxSize); - - for (int x = minCell[0]; x <= maxCell[0]; ++x) - { - for (int y = minCell[1]; y <= maxCell[1]; ++y) - { - for (int z = minCell[2]; z <= maxCell[2]; ++z) - { - uint flatCellIndex = GridHash(int4(x,y,z,l)); - uint cellStart = cellOffsets[flatCellIndex]; - uint cellCount = cellCounts[flatCellIndex]; - - // iterate through queries in the neighbour cell - for (uint n = cellStart; n < cellStart + cellCount; ++n) - { - if (candidateCount < MAX_RESULTS_PER_SIMPLEX) - candidates[candidateCount++] = sortedColliderIndices[n] / cellsPerShape; - } - - } - } - } - } - - //evaluate candidates and create contacts: - if (candidateCount > 0) - { - // insert sort: - for (int k = 1; k < candidateCount; ++k) - { - uint key = candidates[k]; - int j = k - 1; - - while (j >= 0 && candidates[j] > key) - candidates[j + 1] = candidates[j--]; - - candidates[j + 1] = key; - } - - // make sure each candidate only shows up once in the list: - int first = 0, contactCount = 0; - while(++first != candidateCount) - { - if (candidates[contactCount] != candidates[first]) - candidates[++contactCount] = candidates[first]; - } - contactCount++; - - // append contacts: - for (int i = 0; i < contactCount; i++) - { - int c = candidates[i]; - - // get shape bounds in solver space: - aabb colliderBoundsSS = CalculateShapeAABB(shapes[c]).Transformed(worldToSolver[0].Multiply(transforms[c])); - - // check if any simplex particle and the collider should collide: - bool shouldCollide = false; - int colliderCategory = shapes[c].filter & CategoryMask; - int colliderMask = (shapes[c].filter & MaskMask) >> 16; - for (int j = 0; j < simplexSize; ++j) - { - int simplexCategory = filters[simplices[simplexStart + j]] & CategoryMask; - int simplexMask = (filters[simplices[simplexStart + j]] & MaskMask) >> 16; - shouldCollide = shouldCollide || ((simplexCategory & colliderMask) != 0 && (simplexMask & colliderCategory) != 0); - } - - if (shouldCollide && b.IntersectsAabb(colliderBoundsSS)) - { - uint count; - InterlockedAdd(dispatchBuffer[7], 1, count); - - // technically incorrect, as number of pairs != number of contacts but - // we will ignore either excess pairs or contacts. - if (count < maxResults) - { - // increment the amount of contacts for this shape type: - InterlockedAdd(colliderTypeCounts[shapes[c].type],1); - - // enqueue a new contact pair: - unsortedContactPairs[count] = uint2(threadIndex,c); - - InterlockedMax(dispatchBuffer[4],(count + 1) / 128 + 1); - } - } - } - } -} - -[numthreads(1, 1, 1)] -void PrefixSumColliderCounts (uint3 id : SV_DispatchThreadID) -{ - contactOffsetsPerType[0] = 0; - int i; - - for (i = 0; i < shapeTypeCount; ++i) - { - contactOffsetsPerType[i+1] = contactOffsetsPerType[i] + colliderTypeCounts[i]; - - // write amount of pairs per collider type in the dispatch buffer: - dispatchBuffer[8 + i*4] = colliderTypeCounts[i] / 128 + 1; - dispatchBuffer[8 + i*4 + 3] = colliderTypeCounts[i]; - } -} - -[numthreads(128, 1, 1)] -void SortContactPairs (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - if (i >= dispatchBuffer[7] || i >= maxResults) return; - - uint2 pair = unsortedContactPairs[i]; - int shapeType = (int)shapes[pair.y].type; - - // decrement amount of pairs for the given collider type: - uint count; - InterlockedAdd(colliderTypeCounts[shapeType],-1, count); - - // write the pair directly at its position in the sorted array: - contactPairs[contactOffsetsPerType[shapeType] + count - 1] = pair; -} - - - diff --git a/Assets/Obi/Resources/Compute/SpatialQueries.compute.meta b/Assets/Obi/Resources/Compute/SpatialQueries.compute.meta deleted file mode 100644 index 69122c2b3..000000000 --- a/Assets/Obi/Resources/Compute/SpatialQueries.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: dbbb4eb0bd2fa43e08564bf661b00670 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/SphereShape.compute b/Assets/Obi/Resources/Compute/SphereShape.compute deleted file mode 100644 index d801dd95f..000000000 --- a/Assets/Obi/Resources/Compute/SphereShape.compute +++ /dev/null @@ -1,72 +0,0 @@ -#include "ColliderDefinitions.cginc" -#include "ContactHandling.cginc" -#include "DistanceFunctions.cginc" -#include "Simplex.cginc" -#include "Bounds.cginc" -#include "SolverParameters.cginc" -#include "Optimization.cginc" - -#pragma kernel GenerateContacts - -StructuredBuffer positions; -StructuredBuffer orientations; -StructuredBuffer principalRadii; -StructuredBuffer velocities; - -StructuredBuffer simplices; - -StructuredBuffer transforms; -StructuredBuffer shapes; - -StructuredBuffer contactPairs; -StructuredBuffer contactOffsetsPerType; - -RWStructuredBuffer contacts; -RWStructuredBuffer dispatchBuffer; - -StructuredBuffer worldToSolver; - -uint maxContacts; - -[numthreads(128, 1, 1)] -void GenerateContacts (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - - // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. - if (i >= dispatchBuffer[11 + 4*SPHERE_SHAPE]) return; - - uint count = contacts.IncrementCounter(); - if (count < maxContacts) - { - int firstPair = contactOffsetsPerType[SPHERE_SHAPE]; - int simplexIndex = contactPairs[firstPair + i].x; - int colliderIndex = contactPairs[firstPair + i].y; - - contact c = (contact)0; - - Sphere sphereShape; - sphereShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); - sphereShape.s = shapes[colliderIndex]; - - int simplexSize; - int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); - - float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); - float4 simplexPoint; - - SurfacePoint surfacePoint = Optimize(sphereShape, positions, orientations, principalRadii, - simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); - - c.pointB = surfacePoint.pos; - c.normal = surfacePoint.normal * sphereShape.s.isInverted(); - c.pointA = simplexBary; - c.bodyA = simplexIndex; - c.bodyB = colliderIndex; - - contacts[count] = c; - - InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); - InterlockedMax(dispatchBuffer[3], count + 1); - } -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/SphereShape.compute.meta b/Assets/Obi/Resources/Compute/SphereShape.compute.meta deleted file mode 100644 index 282bd67c2..000000000 --- a/Assets/Obi/Resources/Compute/SphereShape.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6bde4f5390fee479ba06d6691eb9450b -ComputeShaderImporter: - externalObjects: {} - preprocessorOverride: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/SphereShapeQuery.compute b/Assets/Obi/Resources/Compute/SphereShapeQuery.compute deleted file mode 100644 index cea2c12e3..000000000 --- a/Assets/Obi/Resources/Compute/SphereShapeQuery.compute +++ /dev/null @@ -1,107 +0,0 @@ -#include "ColliderDefinitions.cginc" -#include "QueryDefinitions.cginc" -#include "ContactHandling.cginc" -#include "Transform.cginc" -#include "Simplex.cginc" -#include "Bounds.cginc" -#include "SolverParameters.cginc" -#include "Optimization.cginc" - -#pragma kernel GenerateResults - -StructuredBuffer positions; -StructuredBuffer orientations; -StructuredBuffer principalRadii; -StructuredBuffer simplices; - -StructuredBuffer transforms; -StructuredBuffer shapes; - -StructuredBuffer contactPairs; -StructuredBuffer contactOffsetsPerType; - -RWStructuredBuffer results; -RWStructuredBuffer dispatchBuffer; - -StructuredBuffer worldToSolver; - -uint maxContacts; - -struct Sphere : IDistanceFunction -{ - queryShape s; - transform colliderToSolver; - - void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint) - { - float4 center = s.center * colliderToSolver.scale; - float4 pnt = colliderToSolver.InverseTransformPointUnscaled(pos) - center; - - float radius = s.size.x * cmax(colliderToSolver.scale.xyz); - float distanceToCenter = length(pnt); - - float4 normal = pnt / (distanceToCenter + EPSILON); - - projectedPoint.pos = colliderToSolver.TransformPointUnscaled(center + normal * (radius + s.contactOffset)); - projectedPoint.normal = colliderToSolver.TransformDirection(normal); - projectedPoint.bary = float4(1,0,0,0); - } -}; - -[numthreads(128, 1, 1)] -void GenerateResults (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - - // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. - if (i >= dispatchBuffer[11 + 4*SPHERE_QUERY]) return; - - int firstPair = contactOffsetsPerType[SPHERE_QUERY]; - int simplexIndex = contactPairs[firstPair + i].x; - int queryIndex = contactPairs[firstPair + i].y; - - queryResult c = (queryResult)0; - - Sphere sphereShape; - sphereShape.colliderToSolver = worldToSolver[0].Multiply(transforms[queryIndex]); - sphereShape.s = shapes[queryIndex]; - - int simplexSize; - int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); - - float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); - float4 simplexPoint; - - SurfacePoint surfacePoint = Optimize(sphereShape, positions, orientations, principalRadii, - simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); - - - float4 simplexPrevPosition = FLOAT4_ZERO; - float simplexRadius = 0; - for (int j = 0; j < simplexSize; ++j) - { - int particleIndex = simplices[simplexStart + j]; - simplexPrevPosition += positions[particleIndex] * simplexBary[j]; - simplexRadius += EllipsoidRadius(surfacePoint.normal, orientations[particleIndex], principalRadii[particleIndex].xyz) * simplexBary[j]; - } - - c.queryPoint = surfacePoint.pos; - c.normal = surfacePoint.normal; - c.simplexBary = simplexBary; - c.simplexIndex = simplexIndex; - c.queryIndex = queryIndex; - c.dist = dot(simplexPrevPosition - surfacePoint.pos,surfacePoint.normal) - simplexRadius; - - if (c.dist <= sphereShape.s.maxDistance) - { - uint count = results.IncrementCounter(); - if (count < maxContacts) - { - results[count] = c; - - InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); - InterlockedMax(dispatchBuffer[3], count + 1); - } - } - -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/SphereShapeQuery.compute.meta b/Assets/Obi/Resources/Compute/SphereShapeQuery.compute.meta deleted file mode 100644 index c8efb5a70..000000000 --- a/Assets/Obi/Resources/Compute/SphereShapeQuery.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1b86e67abd0f74accb1c47af5aa6ffbe -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/StitchConstraints.compute b/Assets/Obi/Resources/Compute/StitchConstraints.compute deleted file mode 100644 index e26a380fd..000000000 --- a/Assets/Obi/Resources/Compute/StitchConstraints.compute +++ /dev/null @@ -1,64 +0,0 @@ -#pragma kernel Project -#pragma kernel Apply - -#include "MathUtils.cginc" -#include "AtomicDeltas.cginc" - -StructuredBuffer particleIndices; -StructuredBuffer stiffnesses; -RWStructuredBuffer lambdas; - -RWStructuredBuffer positions; -StructuredBuffer invMasses; - -// Variables set from the CPU -uint activeConstraintCount; -float deltaTime; -float sorFactor; - -[numthreads(128, 1, 1)] -void Project (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int p1 = particleIndices[i * 2]; - int p2 = particleIndices[i * 2 + 1]; - - float w1 = invMasses[p1]; - float w2 = invMasses[p2]; - - // calculate time adjusted compliance - float compliance = stiffnesses[i] / (deltaTime * deltaTime); - - // calculate position and lambda deltas: - float4 dist = positions[p1] - positions[p2]; - float constraint = length(dist); - - // calculate lambda and position deltas: - float dlambda = (-constraint - compliance * lambdas[i]) / (w1 + w2 + compliance + EPSILON); - float4 delta = dlambda * dist / (constraint + EPSILON); - - lambdas[i] += dlambda; - - float4 delta1 = delta * w1; - float4 delta2 = -delta * w2; - - AddPositionDelta(p1, delta1); - AddPositionDelta(p2, delta2); -} - -[numthreads(128, 1, 1)] -void Apply (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int p1 = particleIndices[i * 2]; - int p2 = particleIndices[i * 2 + 1]; - - ApplyPositionDelta(positions, p1, sorFactor); - ApplyPositionDelta(positions, p2, sorFactor); -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/StitchConstraints.compute.meta b/Assets/Obi/Resources/Compute/StitchConstraints.compute.meta deleted file mode 100644 index bf07c4dc6..000000000 --- a/Assets/Obi/Resources/Compute/StitchConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9d8b905ab89234f6c9c7774317150282 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/StretchShearConstraints.compute b/Assets/Obi/Resources/Compute/StretchShearConstraints.compute deleted file mode 100644 index 5da22d7e1..000000000 --- a/Assets/Obi/Resources/Compute/StretchShearConstraints.compute +++ /dev/null @@ -1,86 +0,0 @@ -#pragma kernel Project -#pragma kernel Apply - -#include "MathUtils.cginc" -#include "AtomicDeltas.cginc" - -StructuredBuffer particleIndices; -StructuredBuffer orientationIndices; -StructuredBuffer restLengths; -StructuredBuffer restOrientations; -StructuredBuffer stiffnesses; -RWStructuredBuffer lambdas; - -RWStructuredBuffer positions; -RWStructuredBuffer orientations; -StructuredBuffer invMasses; -StructuredBuffer invRotationalMasses; - -// Variables set from the CPU -uint activeConstraintCount; -float deltaTime; -float sorFactor; - -[numthreads(128, 1, 1)] -void Project (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int p1 = particleIndices[i * 2]; - int p2 = particleIndices[i * 2 + 1]; - int q = orientationIndices[i]; - - float w1 = invMasses[p1]; - float w2 = invMasses[p2]; - - // calculate time adjusted compliance - float3 compliances = stiffnesses[i] / (deltaTime * deltaTime); - - float3 e = rotate_vector(restOrientations[i], float3(0, 0, 1)); - quaternion basis = qmul(orientations[q],restOrientations[i]); - - // calculate rod vector in local element space: - float3 gamma = rotate_vector(q_conj(basis), (positions[p2] - positions[p1]).xyz) / (restLengths[i] + EPSILON); - - // subtract third director vector (0,0,1): - gamma[2] -= 1; - - float W = (w1 + w2) / (restLengths[i] + EPSILON) + invRotationalMasses[q] * 4.0f * restLengths[i]; - float3 dlambda = (gamma - compliances * lambdas[i]) / (W + compliances + EPSILON); - lambdas[i] += dlambda; - - // convert lambda delta lambda back to world space: - dlambda = rotate_vector(basis, dlambda); - - float4 delta1 = float4(dlambda, 0) * w1; - float4 delta2 = -float4(dlambda, 0) * w2; - - quaternion e_3 = quaternion(e.x,e.y,e.z,0); - quaternion q_e_3_bar = qmul(orientations[q],q_conj(e_3)); - - // calculate rotation delta: - quaternion rotDelta = qmul(quaternion(dlambda[0], dlambda[1], dlambda[2], 0.0f),q_e_3_bar); - rotDelta *= 2.0f * invRotationalMasses[q] * restLengths[i]; - - AddPositionDelta(p1, delta1); - AddPositionDelta(p2, delta2); - AddOrientationDelta(q, rotDelta); -} - -[numthreads(128, 1, 1)] -void Apply (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int p1 = particleIndices[i * 2]; - int p2 = particleIndices[i * 2 + 1]; - int q = orientationIndices[i]; - - ApplyPositionDelta(positions, p1, sorFactor); - ApplyPositionDelta(positions, p2, sorFactor); - ApplyOrientationDelta(orientations, q, sorFactor); -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/StretchShearConstraints.compute.meta b/Assets/Obi/Resources/Compute/StretchShearConstraints.compute.meta deleted file mode 100644 index 99b251aff..000000000 --- a/Assets/Obi/Resources/Compute/StretchShearConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 09e95e8821fe445bf87f0d434d789822 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/SurfacePoint.cginc b/Assets/Obi/Resources/Compute/SurfacePoint.cginc deleted file mode 100644 index e9d25466a..000000000 --- a/Assets/Obi/Resources/Compute/SurfacePoint.cginc +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef SURFACEPOINT_INCLUDE -#define SURFACEPOINT_INCLUDE - -/** - * point in the surface of a signed distance field. - */ -struct SurfacePoint -{ - float4 bary; - float4 pos; - float4 normal; -}; - -interface IDistanceFunction -{ - void Evaluate(in float4 pos, in float4 radii, in quaternion orientation, inout SurfacePoint projectedPoint); -}; - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/SurfacePoint.cginc.meta b/Assets/Obi/Resources/Compute/SurfacePoint.cginc.meta deleted file mode 100644 index f7b123e22..000000000 --- a/Assets/Obi/Resources/Compute/SurfacePoint.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: b54db800f0f884467b02edb24ca317d4 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/TetherConstraints.compute b/Assets/Obi/Resources/Compute/TetherConstraints.compute deleted file mode 100644 index cd99220ff..000000000 --- a/Assets/Obi/Resources/Compute/TetherConstraints.compute +++ /dev/null @@ -1,64 +0,0 @@ -#pragma kernel Project -#pragma kernel Apply - -#include "MathUtils.cginc" -#include "AtomicDeltas.cginc" - -StructuredBuffer particleIndices; -StructuredBuffer maxLengthScale; -StructuredBuffer stiffnesses; -RWStructuredBuffer lambdas; - -RWStructuredBuffer positions; -StructuredBuffer invMasses; - -// Variables set from the CPU -uint activeConstraintCount; -float deltaTime; -float sorFactor; - -[numthreads(128, 1, 1)] -void Project (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int p1 = particleIndices[i * 2]; - int p2 = particleIndices[i * 2 + 1]; - - float w1 = invMasses[p1]; - float w2 = invMasses[p2]; - - // calculate time adjusted compliance - float compliance = stiffnesses[i] / (deltaTime * deltaTime); - - // calculate position and lambda deltas: - float4 dist = positions[p1] - positions[p2]; - float d = length(dist); - - // calculate constraint value (distance - rest length) - float constraint = d - (maxLengthScale[i].x * maxLengthScale[i].y); - - if (constraint > 0) - { - // calculate lambda and position deltas: - float dlambda = (-constraint - compliance * lambdas[i]) / (w1 + w2 + compliance + EPSILON); - float4 delta = dlambda * dist / (d + EPSILON); - lambdas[i] += dlambda; - - AddPositionDelta(p1, delta * w1); - } -} - -[numthreads(128, 1, 1)] -void Apply (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - int p = particleIndices[i * 2]; - - ApplyPositionDelta(positions, p, sorFactor); -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/TetherConstraints.compute.meta b/Assets/Obi/Resources/Compute/TetherConstraints.compute.meta deleted file mode 100644 index 280042e3c..000000000 --- a/Assets/Obi/Resources/Compute/TetherConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: dcd2ea33ecfcb4fb0ac44c5a66ea69f8 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/Transform.cginc b/Assets/Obi/Resources/Compute/Transform.cginc deleted file mode 100644 index 039279a43..000000000 --- a/Assets/Obi/Resources/Compute/Transform.cginc +++ /dev/null @@ -1,98 +0,0 @@ -#ifndef TRANSFORM_INCLUDE -#define TRANSFORM_INCLUDE - -#include "Quaternion.cginc" -#include "Integration.cginc" - -struct transform -{ - float4 translation; - float4 scale; - quaternion rotation; - - transform Transform(float4 translation_, quaternion rotation_, float4 scale_) - { - // make sure there are good values in the 4th component: - translation_[3] = 0; - scale_[3] = 1; - - transform t; - t.translation = translation_; - t.rotation = rotation_; - t.scale = scale_; - return t; - } - - transform Inverse() - { - return Transform(float4(rotate_vector(q_conj(rotation),(translation / -scale).xyz),0), - q_conj(rotation), - 1 / scale); - } - - transform Interpolate(transform other, float translationalMu, float rotationalMu, float scaleMu) - { - return Transform(lerp(translation, other.translation, translationalMu), - q_slerp(rotation, other.rotation, rotationalMu), - lerp(scale, other.scale, scaleMu)); - } - - transform Integrate(float4 linearVelocity, float4 angularVelocity, float dt) - { - return Transform(IntegrateLinear(translation, linearVelocity, dt), - IntegrateAngular(rotation, angularVelocity, dt), - scale); - } - - float4 TransformPoint(float4 pnt) - { - return float4(translation.xyz + rotate_vector(rotation, (pnt * scale).xyz),0); - } - - float4 InverseTransformPoint(float4 pnt) - { - return float4(rotate_vector(q_conj(rotation),(pnt - translation).xyz) / scale.xyz , 0); - } - - float4 TransformPointUnscaled(float4 pnt) - { - return float4(translation.xyz + rotate_vector(rotation,pnt.xyz), 0); - } - - float4 InverseTransformPointUnscaled(float4 pnt) - { - return float4(rotate_vector(q_conj(rotation), (pnt - translation).xyz), 0); - } - - float4 TransformDirection(float4 dir) - { - return float4(rotate_vector(rotation, dir.xyz), 0); - } - - float4 InverseTransformDirection(float4 dir) - { - return float4(rotate_vector(q_conj(rotation), dir.xyz), 0); - } - - float4 TransformVector(float4 vect) - { - return float4(rotate_vector(rotation, (vect * scale).xyz), 0); - } - - float4 InverseTransformVector(float4 vect) - { - return float4(rotate_vector(q_conj(rotation),vect.xyz) / scale.xyz, 0); - } - - transform Multiply(transform b) - { - return Transform(this.TransformPoint(b.translation), - qmul(this.rotation,b.rotation), - this.scale * b.scale); - } -}; - - - - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/Transform.cginc.meta b/Assets/Obi/Resources/Compute/Transform.cginc.meta deleted file mode 100644 index f749fcd8d..000000000 --- a/Assets/Obi/Resources/Compute/Transform.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 7e54b6c6b777643958abffa4510e0518 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/TriangleMeshShape.compute b/Assets/Obi/Resources/Compute/TriangleMeshShape.compute deleted file mode 100644 index f5ea3f0d3..000000000 --- a/Assets/Obi/Resources/Compute/TriangleMeshShape.compute +++ /dev/null @@ -1,154 +0,0 @@ -#include "ColliderDefinitions.cginc" -#include "ContactHandling.cginc" -#include "DistanceFunctions.cginc" -#include "Simplex.cginc" -#include "Bounds.cginc" -#include "SolverParameters.cginc" -#include "Optimization.cginc" - -#pragma kernel GenerateContacts - -StructuredBuffer positions; -StructuredBuffer orientations; -StructuredBuffer principalRadii; -StructuredBuffer velocities; - -StructuredBuffer simplices; -StructuredBuffer simplexBounds; // bounding box of each simplex. - -StructuredBuffer transforms; -StructuredBuffer shapes; - -// triangle mesh data: -StructuredBuffer triangleMeshHeaders; -StructuredBuffer bihNodes; -StructuredBuffer triangles; -StructuredBuffer vertices; - -StructuredBuffer contactPairs; -StructuredBuffer contactOffsetsPerType; - -RWStructuredBuffer contacts; -RWStructuredBuffer dispatchBuffer; - -StructuredBuffer worldToSolver; - -uint maxContacts; -float deltaTime; - - -[numthreads(128, 1, 1)] -void GenerateContacts (uint3 id : SV_DispatchThreadID) -{ - uint i = id.x; - - // entry #11 in the dispatch buffer is the amount of pairs for the first shape type. - if (i >= dispatchBuffer[11 + 4 * TRIANGLE_MESH_SHAPE]) return; - - int firstPair = contactOffsetsPerType[TRIANGLE_MESH_SHAPE]; - int simplexIndex = contactPairs[firstPair + i].x; - int colliderIndex = contactPairs[firstPair + i].y; - shape s = shapes[colliderIndex]; - - if (s.dataIndex < 0) return; - - TriangleMeshHeader header = triangleMeshHeaders[s.dataIndex]; - - TriangleMesh meshShape; - meshShape.colliderToSolver = worldToSolver[0].Multiply(transforms[colliderIndex]); - meshShape.s = s; - - // invert a full matrix here to accurately represent collider bounds scale. - float4x4 solverToCollider = Inverse(TRS(meshShape.colliderToSolver.translation.xyz, meshShape.colliderToSolver.rotation, meshShape.colliderToSolver.scale.xyz)); - aabb simplexBound = simplexBounds[simplexIndex].Transformed(solverToCollider); - - float4 marginCS = float4((s.contactOffset + collisionMargin) / meshShape.colliderToSolver.scale.xyz, 0); - - int simplexSize; - int simplexStart = GetSimplexStartAndSize(simplexIndex, simplexSize); - - int stack[12]; - int stackTop = 0; - - stack[stackTop++] = 0; - - while (stackTop > 0) - { - // pop node index from the stack: - int nodeIndex = stack[--stackTop]; - - BIHNode node = bihNodes[header.firstNode + nodeIndex]; - - // leaf node: - if (node.firstChild < 0) - { - // check for contact against all triangles: - for (int dataOffset = node.start; dataOffset < node.start + node.count; ++dataOffset) - { - Triangle t = triangles[header.firstTriangle + dataOffset]; - float4 v1 = float4(vertices[header.firstVertex + t.i1], 0); - float4 v2 = float4(vertices[header.firstVertex + t.i2], 0); - float4 v3 = float4(vertices[header.firstVertex + t.i3], 0); - aabb triangleBounds; - triangleBounds.FromTriangle(v1, v2, v3, marginCS); - - if (triangleBounds.IntersectsAabb(simplexBound, s.is2D())) - { - float4 simplexBary = BarycenterForSimplexOfSize(simplexSize); - float4 simplexPoint; - - meshShape.tri.Cache(v1 * meshShape.colliderToSolver.scale, v2 * meshShape.colliderToSolver.scale, v3 * meshShape.colliderToSolver.scale); - - SurfacePoint surfacePoint = Optimize(meshShape, positions, orientations, principalRadii, - simplices, simplexStart, simplexSize, simplexBary, simplexPoint, surfaceCollisionIterations, surfaceCollisionTolerance); - - float4 velocity = FLOAT4_ZERO; - float simplexRadius = 0; - for (int j = 0; j < simplexSize; ++j) - { - int particleIndex = simplices[simplexStart + j]; - simplexRadius += principalRadii[particleIndex].x * simplexBary[j]; - velocity += velocities[particleIndex] * simplexBary[j]; - } - - /*float4 rbVelocity = float4.zero; - if (rigidbodyIndex >= 0) - rbVelocity = BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, colliderPoint.point, rigidbodies, solverToWorld);*/ - - float dAB = dot(simplexPoint - surfacePoint.pos, surfacePoint.normal); - float vel = dot(velocity /*- rbVelocity*/, surfacePoint.normal); - - if (vel * deltaTime + dAB <= simplexRadius + s.contactOffset + collisionMargin) - { - uint count = contacts.IncrementCounter(); - if (count < maxContacts) - { - contact c = (contact)0; - - c.pointB = surfacePoint.pos; - c.normal = surfacePoint.normal * meshShape.s.isInverted(); - c.pointA = simplexBary; - c.bodyA = simplexIndex; - c.bodyB = colliderIndex; - - contacts[count] = c; - - InterlockedMax(dispatchBuffer[0],(count + 1) / 128 + 1); - InterlockedMax(dispatchBuffer[3], count + 1); - } - } - } - } - } - else // check min and/or max children: - { - // visit min node: - if (simplexBound.min_[node.axis] <= node.min_) - stack[stackTop++] = node.firstChild; - - // visit max node: - if (simplexBound.max_[node.axis] >= node.max_) - stack[stackTop++] = node.firstChild + 1; - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Resources/Compute/TriangleMeshShape.compute.meta b/Assets/Obi/Resources/Compute/TriangleMeshShape.compute.meta deleted file mode 100644 index a677721aa..000000000 --- a/Assets/Obi/Resources/Compute/TriangleMeshShape.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a5454af20f9614aa79e51a90271093e3 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/Compute/VolumeConstraints.compute b/Assets/Obi/Resources/Compute/VolumeConstraints.compute deleted file mode 100644 index 4f6e3d71b..000000000 --- a/Assets/Obi/Resources/Compute/VolumeConstraints.compute +++ /dev/null @@ -1,153 +0,0 @@ -#pragma kernel Gradients -#pragma kernel CalculateVolume -#pragma kernel Denominators -#pragma kernel Constraint -#pragma kernel AccumulateDeltas -#pragma kernel Apply - -//#pragma kernel Project -//#pragma kernel Apply - -#include "MathUtils.cginc" -#include "AtomicDeltas.cginc" - -StructuredBuffer triangles; -StructuredBuffer firstTriangle; -StructuredBuffer numTriangles; -StructuredBuffer restVolumes; -StructuredBuffer pressureStiffness; -RWStructuredBuffer lambdas; - -RWStructuredBuffer denominators; -RWStructuredBuffer volumes; -RWStructuredBuffer gradients; - -StructuredBuffer particles; -StructuredBuffer particleConstraintIndex; -StructuredBuffer triangleConstraintIndex; - -RWStructuredBuffer positions; -StructuredBuffer invMasses; - -// Variables set from the CPU -uint activeConstraintCount; -uint trianglesCount; -uint particlesCount; - -float deltaTime; -float sorFactor; - - -void AccumulateGradient(in int index, in float3 grad) -{ - InterlockedAddFloat(gradients, index, 0, grad.x); - InterlockedAddFloat(gradients, index, 1, grad.y); - InterlockedAddFloat(gradients, index, 2, grad.z); -} - -[numthreads(128, 1, 1)] -void Gradients (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= trianglesCount) return; - - int v = i * 3; - int i1 = triangles[v]; - int i2 = triangles[v + 1]; - int i3 = triangles[v + 2]; - - //accumulate gradient for each particle in the triangle: - AccumulateGradient(i1,cross(positions[i2].xyz, positions[i3].xyz)); - AccumulateGradient(i2,cross(positions[i3].xyz, positions[i1].xyz)); - AccumulateGradient(i3,cross(positions[i1].xyz, positions[i2].xyz)); -} - -[numthreads(128, 1, 1)] -void CalculateVolume (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= trianglesCount) return; - - int constraintIndex = triangleConstraintIndex[i]; - - int v = i * 3; - int i1 = triangles[v]; - int i2 = triangles[v + 1]; - int i3 = triangles[v + 2]; - - float vol = dot(cross(positions[i1].xyz, positions[i2].xyz), positions[i3].xyz) / 6.0f; - InterlockedAddFloat(volumes, triangleConstraintIndex[i],vol); -} - -// One denominator per constraint -// each particle in the constraint contributes only once. - -[numthreads(128, 1, 1)] -void Denominators (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= particlesCount) return; - - int p = particles[i]; - - float3 grad = asfloat(gradients[p]).xyz; - float denom = invMasses[p] * dot(grad, grad); - InterlockedAddFloat(denominators, particleConstraintIndex[i], denom); -} - -[numthreads(128, 1, 1)] -void Constraint (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - float compliance = pressureStiffness[i].y / (deltaTime * deltaTime); - - // equality constraint: volume - pressure * rest volume = 0 - float constraint = asfloat(volumes[i]) - pressureStiffness[i].x * restVolumes[i]; - - // calculate lagrange multiplier delta: - float dlambda = (-constraint - compliance * 0) / (asfloat(denominators[i]) + compliance + EPSILON); - lambdas[i] = dlambda;//+= dlambda; - - volumes[i] = asuint(0); - denominators[i] = asuint(0); -} - -[numthreads(128, 1, 1)] -void AccumulateDeltas (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= particlesCount) return; - - int p = particles[i]; - int c = particleConstraintIndex[i]; - - AddPositionDelta(p, lambdas[c] * invMasses[p] * asfloat(gradients[p])); - gradients[p] = asuint(FLOAT4_ZERO); -} - -[numthreads(128, 1, 1)] -void Apply (uint3 id : SV_DispatchThreadID) -{ - unsigned int i = id.x; - - if (i >= activeConstraintCount) return; - - for (int j = 0; j < numTriangles[i]; ++j) - { - int v = (firstTriangle[i] + j) * 3; - int p1 = triangles[v]; - int p2 = triangles[v + 1]; - int p3 = triangles[v + 2]; - - ApplyPositionDelta(positions, p1, sorFactor); - ApplyPositionDelta(positions, p2, sorFactor); - ApplyPositionDelta(positions, p3, sorFactor); - } -} diff --git a/Assets/Obi/Resources/Compute/VolumeConstraints.compute.meta b/Assets/Obi/Resources/Compute/VolumeConstraints.compute.meta deleted file mode 100644 index 33f05bbe2..000000000 --- a/Assets/Obi/Resources/Compute/VolumeConstraints.compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: fef3adb748a41466696a32b41ecc8831 -ComputeShaderImporter: - externalObjects: {} - currentAPIMask: 65536 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/DefaultRopeSection.asset b/Assets/Obi/Resources/DefaultRopeSection.asset deleted file mode 100644 index 981ecd81e..000000000 Binary files a/Assets/Obi/Resources/DefaultRopeSection.asset and /dev/null differ diff --git a/Assets/Obi/Resources/DefaultRopeSection.asset.meta b/Assets/Obi/Resources/DefaultRopeSection.asset.meta deleted file mode 100644 index 989bd9ac5..000000000 --- a/Assets/Obi/Resources/DefaultRopeSection.asset.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: a0bc36a59515f413e90e10895929c938 -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/GUI.meta b/Assets/Obi/Resources/GUI.meta deleted file mode 100644 index 63fee6bd7..000000000 --- a/Assets/Obi/Resources/GUI.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: bd46757354fbf4182af57f2913e20fc1 -folderAsset: yes -timeCreated: 1474532461 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/GUI/ProfilerSkin.guiskin b/Assets/Obi/Resources/GUI/ProfilerSkin.guiskin deleted file mode 100644 index d87dd8b91..000000000 Binary files a/Assets/Obi/Resources/GUI/ProfilerSkin.guiskin and /dev/null differ diff --git a/Assets/Obi/Resources/GUI/ProfilerSkin.guiskin.meta b/Assets/Obi/Resources/GUI/ProfilerSkin.guiskin.meta deleted file mode 100644 index d8811ce61..000000000 --- a/Assets/Obi/Resources/GUI/ProfilerSkin.guiskin.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b90d3c214c99743b0865fc0e0d1f1a15 -timeCreated: 1474532476 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/GUI/profiler_bck.png b/Assets/Obi/Resources/GUI/profiler_bck.png deleted file mode 100644 index ac91069b7..000000000 Binary files a/Assets/Obi/Resources/GUI/profiler_bck.png and /dev/null differ diff --git a/Assets/Obi/Resources/GUI/profiler_bck.png.meta b/Assets/Obi/Resources/GUI/profiler_bck.png.meta deleted file mode 100644 index b9bd3b48c..000000000 --- a/Assets/Obi/Resources/GUI/profiler_bck.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Resources/GUI/profiler_toolbar.png b/Assets/Obi/Resources/GUI/profiler_toolbar.png deleted file mode 100644 index 6c68d6a9b..000000000 Binary files a/Assets/Obi/Resources/GUI/profiler_toolbar.png and /dev/null differ diff --git a/Assets/Obi/Resources/GUI/profiler_toolbar.png.meta b/Assets/Obi/Resources/GUI/profiler_toolbar.png.meta deleted file mode 100644 index eb51c56c5..000000000 --- a/Assets/Obi/Resources/GUI/profiler_toolbar.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Resources/GUI/scroll_peg.png b/Assets/Obi/Resources/GUI/scroll_peg.png deleted file mode 100644 index 2dcfb17ec..000000000 Binary files a/Assets/Obi/Resources/GUI/scroll_peg.png and /dev/null differ diff --git a/Assets/Obi/Resources/GUI/scroll_peg.png.meta b/Assets/Obi/Resources/GUI/scroll_peg.png.meta deleted file mode 100644 index 2a15c9f9a..000000000 --- a/Assets/Obi/Resources/GUI/scroll_peg.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Resources/GUI/task_bck.png b/Assets/Obi/Resources/GUI/task_bck.png deleted file mode 100644 index 2c57a8414..000000000 Binary files a/Assets/Obi/Resources/GUI/task_bck.png and /dev/null differ diff --git a/Assets/Obi/Resources/GUI/task_bck.png.meta b/Assets/Obi/Resources/GUI/task_bck.png.meta deleted file mode 100644 index 8800f14f8..000000000 --- a/Assets/Obi/Resources/GUI/task_bck.png.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Resources/GUI/thread_bck.png b/Assets/Obi/Resources/GUI/thread_bck.png deleted file mode 100644 index 8aa68f9ae..000000000 Binary files a/Assets/Obi/Resources/GUI/thread_bck.png and /dev/null differ diff --git a/Assets/Obi/Resources/GUI/thread_bck.png.meta b/Assets/Obi/Resources/GUI/thread_bck.png.meta deleted file mode 100644 index 839edd899..000000000 --- a/Assets/Obi/Resources/GUI/thread_bck.png.meta +++ /dev/null @@ -1,92 +0,0 @@ -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/Assets/Obi/Resources/ObiMaterials.meta b/Assets/Obi/Resources/ObiMaterials.meta deleted file mode 100644 index 9f7ccf092..000000000 --- a/Assets/Obi/Resources/ObiMaterials.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 40f10b6d47dcf4fe5a4851bad844fa57 -folderAsset: yes -timeCreated: 1445286974 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces.meta b/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces.meta deleted file mode 100644 index 4f530cfdd..000000000 --- a/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 63dbef444f58449a5b4786567ee38655 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces/StandardVertexColors.shader b/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces/StandardVertexColors.shader deleted file mode 100644 index 346c696cf..000000000 --- a/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces/StandardVertexColors.shader +++ /dev/null @@ -1,51 +0,0 @@ -// 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/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces/StandardVertexColors.shader.meta b/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces/StandardVertexColors.shader.meta deleted file mode 100644 index c15af5724..000000000 --- a/Assets/Obi/Resources/ObiMaterials/BuiltInStandardBackfaces/StandardVertexColors.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 96c602bba0bc94471862812f91285c9a -timeCreated: 1505116095 -licenseType: Store -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/ObiMaterials/Common.meta b/Assets/Obi/Resources/ObiMaterials/Common.meta deleted file mode 100644 index dd79e2da0..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f31685c4cf95048ceb543a69d4f84ff4 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/ObiMaterials/Common/Instanced.meta b/Assets/Obi/Resources/ObiMaterials/Common/Instanced.meta deleted file mode 100644 index 71d0305c0..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/Instanced.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b8d28b0e0918140d8b8ee3388bff5ec2 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Burst.meta b/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Burst.meta deleted file mode 100644 index 3bd5233dc..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Burst.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1a08e3a8d3c4f4d3b90eb00e408b5f5d -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat b/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat deleted file mode 100644 index 8c47c7aa8..000000000 Binary files a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat and /dev/null differ diff --git a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat.meta b/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat.meta deleted file mode 100644 index dd8a2a104..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Burst/Instanced.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6380c47a989d54146bef5f3bac933a56 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute.meta b/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute.meta deleted file mode 100644 index 90994bc6b..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5741e12d1b7644a1ea6e9239027b476b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.mat b/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.mat deleted file mode 100644 index d8e7da70c..000000000 Binary files a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.mat and /dev/null differ diff --git a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.mat.meta b/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.mat.meta deleted file mode 100644 index 4264b30d3..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2b7dfa8ebb76247318ce5b7df4b97484 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.shadergraph b/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.shadergraph deleted file mode 100644 index e1cf98f7d..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.shadergraph +++ /dev/null @@ -1,1049 +0,0 @@ -{ - "m_SGVersion": 3, - "m_Type": "UnityEditor.ShaderGraph.GraphData", - "m_ObjectId": "4d9b84394d46483a8d82779f77202fc2", - "m_Properties": [], - "m_Keywords": [], - "m_Dropdowns": [], - "m_CategoryData": [ - { - "m_Id": "b8a9b963dec346b0a74188d7b6b0cbd5" - } - ], - "m_Nodes": [ - { - "m_Id": "f21b73915f984c11ae68788fc0ea87b5" - }, - { - "m_Id": "57ace758bfb94f7e8df57dc9e52d30e0" - }, - { - "m_Id": "f9361dfcb9af4dc7aa432a4c6703d796" - }, - { - "m_Id": "1a1b6499baff4672a53921e75ddaa5fc" - }, - { - "m_Id": "dce68951c9714e9788d94c3f8d2b91f5" - }, - { - "m_Id": "9081e58b798945758e693a26c3ebd8f5" - }, - { - "m_Id": "b123e3fa488745408e3fbf602a25daf3" - }, - { - "m_Id": "2c50baddc9b84aa8afb710be8e070875" - }, - { - "m_Id": "589e3cd2f09646a5a13738ee59e9ba67" - }, - { - "m_Id": "3c6527cfc4f6489bb7b4a2363bb7eb6d" - }, - { - "m_Id": "f2a0e5496350488fa545f78531eb1ec1" - }, - { - "m_Id": "141eeae6827640a3a61aeb2fe17525be" - }, - { - "m_Id": "1a26996b23904b9f86115e7a3a1217d4" - } - ], - "m_GroupDatas": [], - "m_StickyNoteDatas": [], - "m_Edges": [ - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "2c50baddc9b84aa8afb710be8e070875" - }, - "m_SlotId": 2 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "1a1b6499baff4672a53921e75ddaa5fc" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "2c50baddc9b84aa8afb710be8e070875" - }, - "m_SlotId": 4 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "dce68951c9714e9788d94c3f8d2b91f5" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "9081e58b798945758e693a26c3ebd8f5" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "2c50baddc9b84aa8afb710be8e070875" - }, - "m_SlotId": 3 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "b123e3fa488745408e3fbf602a25daf3" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "2c50baddc9b84aa8afb710be8e070875" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "dce68951c9714e9788d94c3f8d2b91f5" - }, - "m_SlotId": 1 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "f21b73915f984c11ae68788fc0ea87b5" - }, - "m_SlotId": 0 - } - } - ], - "m_VertexContext": { - "m_Position": { - "x": -217.00001525878907, - "y": -224.0 - }, - "m_Blocks": [ - { - "m_Id": "f21b73915f984c11ae68788fc0ea87b5" - }, - { - "m_Id": "57ace758bfb94f7e8df57dc9e52d30e0" - }, - { - "m_Id": "f9361dfcb9af4dc7aa432a4c6703d796" - } - ] - }, - "m_FragmentContext": { - "m_Position": { - "x": -216.99998474121095, - "y": 20.0 - }, - "m_Blocks": [ - { - "m_Id": "1a1b6499baff4672a53921e75ddaa5fc" - }, - { - "m_Id": "589e3cd2f09646a5a13738ee59e9ba67" - }, - { - "m_Id": "3c6527cfc4f6489bb7b4a2363bb7eb6d" - }, - { - "m_Id": "f2a0e5496350488fa545f78531eb1ec1" - }, - { - "m_Id": "141eeae6827640a3a61aeb2fe17525be" - }, - { - "m_Id": "1a26996b23904b9f86115e7a3a1217d4" - } - ] - }, - "m_PreviewData": { - "serializedMesh": { - "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", - "m_Guid": "" - }, - "preventRotation": false - }, - "m_Path": "Shader Graphs", - "m_GraphPrecision": 1, - "m_PreviewMode": 2, - "m_OutputNode": { - "m_Id": "" - }, - "m_ActiveTargets": [ - { - "m_Id": "7338c42471074b8186f44d81129cb741" - } - ] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", - "m_ObjectId": "0a05b15df7ce451c80d16da630598a05", - "m_Id": 0, - "m_DisplayName": "Position", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "Position", - "m_StageCapability": 1, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [], - "m_Space": 0 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "0f629d2105bb44b7af198990fb5e0e3a", - "m_Id": 0, - "m_DisplayName": "Metallic", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "Metallic", - "m_StageCapability": 2, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", - "m_ObjectId": "10e91cfc92e2437989b0fcafaa1b04e2", - "m_Id": 0, - "m_DisplayName": "Base Color", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "BaseColor", - "m_StageCapability": 2, - "m_Value": { - "x": 0.5, - "y": 0.5, - "z": 0.5 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [], - "m_ColorMode": 0, - "m_DefaultColor": { - "r": 0.5, - "g": 0.5, - "b": 0.5, - "a": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "141eeae6827640a3a61aeb2fe17525be", - "m_Group": { - "m_Id": "" - }, - "m_Name": "SurfaceDescription.Occlusion", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 0.0, - "y": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "m_Slots": [ - { - "m_Id": "a08911364fef4ff9a88b383f6a943b8f" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "SurfaceDescription.Occlusion" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "1a1b6499baff4672a53921e75ddaa5fc", - "m_Group": { - "m_Id": "" - }, - "m_Name": "SurfaceDescription.BaseColor", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 0.0, - "y": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "m_Slots": [ - { - "m_Id": "10e91cfc92e2437989b0fcafaa1b04e2" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "SurfaceDescription.BaseColor" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "1a26996b23904b9f86115e7a3a1217d4", - "m_Group": { - "m_Id": "" - }, - "m_Name": "SurfaceDescription.Metallic", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 0.0, - "y": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "m_Slots": [ - { - "m_Id": "0f629d2105bb44b7af198990fb5e0e3a" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "SurfaceDescription.Metallic" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "1fe2b168153e4be0aaf2bf6d9a61e25e", - "m_Id": 3, - "m_DisplayName": "Pos", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "Pos", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 1, - "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", - "m_ObjectId": "2c50baddc9b84aa8afb710be8e070875", - "m_Group": { - "m_Id": "" - }, - "m_Name": "GetInstanceData (Custom Function)", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -923.0, - "y": 19.999998092651368, - "width": 250.0, - "height": 118.00003051757813 - } - }, - "m_Slots": [ - { - "m_Id": "a2a2e4fd908444d4b04556ecd31ca4a1" - }, - { - "m_Id": "1fe2b168153e4be0aaf2bf6d9a61e25e" - }, - { - "m_Id": "37ecf6c8b3124fb88f0c94ed94b29b1f" - }, - { - "m_Id": "2c56cb67b3594192821def9e2c1f6e25" - } - ], - "synonyms": [ - "code", - "HLSL" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SourceType": 0, - "m_FunctionName": "GetInstanceData", - "m_FunctionSource": "9d77a2f1bd0624d4aa045916cb0955c9", - "m_FunctionBody": "Enter function body here..." -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", - "m_ObjectId": "2c56cb67b3594192821def9e2c1f6e25", - "m_Id": 2, - "m_DisplayName": "Color", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Color", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "37ecf6c8b3124fb88f0c94ed94b29b1f", - "m_Id": 4, - "m_DisplayName": "OutPos", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "OutPos", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "3b467b9abac74f6680f029acc0fe9962", - "m_Id": 1, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "3c6527cfc4f6489bb7b4a2363bb7eb6d", - "m_Group": { - "m_Id": "" - }, - "m_Name": "SurfaceDescription.NormalTS", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 0.0, - "y": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "m_Slots": [ - { - "m_Id": "f5027c09c73c476da7ed59558d84434c" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "SurfaceDescription.NormalTS" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "506261c1d36144a997b4e1d83f9e50ed", - "m_Id": 0, - "m_DisplayName": "Smoothness", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "Smoothness", - "m_StageCapability": 2, - "m_Value": 0.5, - "m_DefaultValue": 0.5, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "57ace758bfb94f7e8df57dc9e52d30e0", - "m_Group": { - "m_Id": "" - }, - "m_Name": "VertexDescription.Normal", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 0.0, - "y": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "m_Slots": [ - { - "m_Id": "bbf8165ffd154394a2a8816930eddf76" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "VertexDescription.Normal" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "589e3cd2f09646a5a13738ee59e9ba67", - "m_Group": { - "m_Id": "" - }, - "m_Name": "SurfaceDescription.Smoothness", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 0.0, - "y": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "m_Slots": [ - { - "m_Id": "506261c1d36144a997b4e1d83f9e50ed" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "SurfaceDescription.Smoothness" -} - -{ - "m_SGVersion": 2, - "m_Type": "UnityEditor.Rendering.BuiltIn.ShaderGraph.BuiltInTarget", - "m_ObjectId": "7338c42471074b8186f44d81129cb741", - "m_ActiveSubTarget": { - "m_Id": "8c851f9258de4ef494985580b1531932" - }, - "m_AllowMaterialOverride": false, - "m_SurfaceType": 0, - "m_ZWriteControl": 0, - "m_ZTestMode": 4, - "m_AlphaMode": 0, - "m_RenderFace": 2, - "m_AlphaClip": false, - "m_CustomEditorGUI": "" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "76eb4fd0181147b9ba1c126d0b50b4c8", - "m_Id": 0, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.Rendering.BuiltIn.ShaderGraph.BuiltInLitSubTarget", - "m_ObjectId": "8c851f9258de4ef494985580b1531932", - "m_WorkflowMode": 1, - "m_NormalDropOffSpace": 0 -} - -{ - "m_SGVersion": 1, - "m_Type": "UnityEditor.ShaderGraph.PositionNode", - "m_ObjectId": "9081e58b798945758e693a26c3ebd8f5", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Position", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -1202.5, - "y": 73.0000228881836, - "width": 205.99993896484376, - "height": 130.5 - } - }, - "m_Slots": [ - { - "m_Id": "c9308b0d0e9a4b2eacfd32a0defa35ba" - } - ], - "synonyms": [ - "location" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 2, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_Space": 0, - "m_PositionSource": 0 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "95e168ba774041c59d5e045b2ee33f3c", - "m_Id": 0, - "m_DisplayName": "In", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "In", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "a08911364fef4ff9a88b383f6a943b8f", - "m_Id": 0, - "m_DisplayName": "Ambient Occlusion", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "Occlusion", - "m_StageCapability": 2, - "m_Value": 1.0, - "m_DefaultValue": 1.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "a2a2e4fd908444d4b04556ecd31ca4a1", - "m_Id": 0, - "m_DisplayName": "InstanceID", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "InstanceID", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.InstanceIDNode", - "m_ObjectId": "b123e3fa488745408e3fbf602a25daf3", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Instance ID", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -1099.5001220703125, - "y": -21.500003814697267, - "width": 109.5, - "height": 77.00001525878906 - } - }, - "m_Slots": [ - { - "m_Id": "76eb4fd0181147b9ba1c126d0b50b4c8" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.CategoryData", - "m_ObjectId": "b8a9b963dec346b0a74188d7b6b0cbd5", - "m_Name": "", - "m_ChildObjectList": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", - "m_ObjectId": "bbf8165ffd154394a2a8816930eddf76", - "m_Id": 0, - "m_DisplayName": "Normal", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "Normal", - "m_StageCapability": 1, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [], - "m_Space": 0 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "c9308b0d0e9a4b2eacfd32a0defa35ba", - "m_Id": 0, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", - "m_ObjectId": "dcc60507b5a34b6e8fba60b6787a5774", - "m_Id": 0, - "m_DisplayName": "Emission", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "Emission", - "m_StageCapability": 2, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [], - "m_ColorMode": 1, - "m_DefaultColor": { - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 1.0 - } -} - -{ - "m_SGVersion": 1, - "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", - "m_ObjectId": "dce68951c9714e9788d94c3f8d2b91f5", - "m_Group": { - "m_Id": "" - }, - "m_Name": "vertInstancingSetup (Custom Function)", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -615.0, - "y": -224.00003051757813, - "width": 269.0, - "height": 94.00001525878906 - } - }, - "m_Slots": [ - { - "m_Id": "95e168ba774041c59d5e045b2ee33f3c" - }, - { - "m_Id": "3b467b9abac74f6680f029acc0fe9962" - } - ], - "synonyms": [ - "code", - "HLSL" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SourceType": 1, - "m_FunctionName": "vertInstancingSetup", - "m_FunctionSource": "", - "m_FunctionBody": "Out = In;\n}\n\n#pragma multi_compile_instancing\n#pragma instancing_options renderinglayer procedural:vertInstancingSetup\n\nvoid dummy(){" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", - "m_ObjectId": "f219385ccac248649c14265dcc45cdbd", - "m_Id": 0, - "m_DisplayName": "Tangent", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "Tangent", - "m_StageCapability": 1, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [], - "m_Space": 0 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "f21b73915f984c11ae68788fc0ea87b5", - "m_Group": { - "m_Id": "" - }, - "m_Name": "VertexDescription.Position", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 47.999996185302737, - "y": -60.00000762939453, - "width": 199.9999237060547, - "height": 41.0 - } - }, - "m_Slots": [ - { - "m_Id": "0a05b15df7ce451c80d16da630598a05" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "VertexDescription.Position" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "f2a0e5496350488fa545f78531eb1ec1", - "m_Group": { - "m_Id": "" - }, - "m_Name": "SurfaceDescription.Emission", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 0.0, - "y": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "m_Slots": [ - { - "m_Id": "dcc60507b5a34b6e8fba60b6787a5774" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "SurfaceDescription.Emission" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", - "m_ObjectId": "f5027c09c73c476da7ed59558d84434c", - "m_Id": 0, - "m_DisplayName": "Normal (Tangent Space)", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "NormalTS", - "m_StageCapability": 2, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [], - "m_Space": 3 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "f9361dfcb9af4dc7aa432a4c6703d796", - "m_Group": { - "m_Id": "" - }, - "m_Name": "VertexDescription.Tangent", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 0.0, - "y": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "m_Slots": [ - { - "m_Id": "f219385ccac248649c14265dcc45cdbd" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "VertexDescription.Tangent" -} - diff --git a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.shadergraph.meta b/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.shadergraph.meta deleted file mode 100644 index 299e52000..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstanced.shadergraph.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 4df17ed533d3349a194f3bb8c89dcf5d -ScriptedImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 2 - userData: - assetBundleName: - assetBundleVariant: - script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} diff --git a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstancing.cginc b/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstancing.cginc deleted file mode 100644 index 44c796b32..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstancing.cginc +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef PROCEDURAL_INCLUDED -#define PROCEDURAL_INCLUDED - -#define UNITY_INDIRECT_DRAW_ARGS IndirectDrawIndexedArgs -#include "UnityIndirect.cginc" - -StructuredBuffer _InstanceTransforms; -StructuredBuffer _InvInstanceTransforms; -StructuredBuffer _Colors; - -#if UNITY_ANY_INSTANCING_ENABLED - // Based on : - // https://github.com/Unity-Technologies/Graphics/blob/master/com.unity.shadergraph/Editor/Generation/Targets/BuiltIn/ShaderLibrary/ParticlesInstancing.hlsl - // and/or - // https://github.com/TwoTailsGames/Unity-Built-in-Shaders/blob/master/CGIncludes/UnityStandardParticleInstancing.cginc - - void vertInstancingSetup() { - } -#endif - -void GetInstanceData_float(uint svInstanceID, float3 pos, out float3 outPos, out float4 color) -{ - InitIndirectDrawArgs(0); - uint instanceID = GetIndirectInstanceID_Base(svInstanceID); - - unity_ObjectToWorld = _InstanceTransforms[instanceID]; - unity_WorldToObject = _InvInstanceTransforms[instanceID]; - color = _Colors[instanceID]; - - outPos = pos; -} - -#endif \ No newline at end of file diff --git a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstancing.cginc.meta b/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstancing.cginc.meta deleted file mode 100644 index 68b2e76df..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/Instanced/Compute/ProceduralInstancing.cginc.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 9d77a2f1bd0624d4aa045916cb0955c9 -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoids.cginc b/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoids.cginc deleted file mode 100644 index 63513cb9c..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoids.cginc +++ /dev/null @@ -1,103 +0,0 @@ -#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/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoids.cginc.meta b/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoids.cginc.meta deleted file mode 100644 index f4ed8219d..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoids.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 083c49fc96643477889bfd68e70cf998 -timeCreated: 1445285630 -licenseType: Store -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc b/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc deleted file mode 100644 index af6982158..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc +++ /dev/null @@ -1,106 +0,0 @@ -#ifndef OBIELLIPSOIDS_INCLUDED -#define OBIELLIPSOIDS_INCLUDED - -// Eye ray origin in world space. -// Works both for orthographic and perspective cameras. -float3 WorldEye(float3 worldPos){ - if ((UNITY_MATRIX_P[3].x == 0.0) && (UNITY_MATRIX_P[3].y == 0.0) && (UNITY_MATRIX_P[3].z == 0.0)){ - return mul(UNITY_MATRIX_I_V,float4(mul(UNITY_MATRIX_V, float4(worldPos,1)).xy,0,1)).xyz; - }else - return _WorldSpaceCameraPos; -} - -// Returns visible ellipsoid radius and offset from center, given the eye position in parameter space. -// Works both for orthographic and perspective cameras. -float VisibleEllipsoidCircleRadius(float3 eye, out float3 m){ - if ((UNITY_MATRIX_P[3].x == 0.0) && (UNITY_MATRIX_P[3].y == 0.0) && (UNITY_MATRIX_P[3].z == 0.0)){ - m = float3(0,0,0); - return 1; - }else{ - float t = 1/dot(eye,eye); - m = t * eye; - return sqrt(1-t); - } -} - -// Performs accurate raycasting of a spherical impostor. -// Works both for orthographic and perspective cameras. -void IntersectEllipsoid_float(float3 v, float4 mapping, float3 a2, float3 a3, out float3 eyePos, out float3 eyeNormal, out float thickness, out float clipThreshold) -{ - float r2 = dot(mapping.xy, mapping.xy); - - // clip if the ray does not intersect the sphere. - clipThreshold = r2/mapping.w; - float iq = 1 - clipThreshold; - - float sqrtiq = sqrt(iq); - float lambda = 1/(1 + mapping.z * sqrtiq); - - eyePos = lambda * v; - eyeNormal = normalize(a2 + lambda * a3); - - // return gaussian-falloff thickness. - thickness = 2 * sqrtiq * exp(-r2*2.0f); - - clipThreshold = (1 - clipThreshold > 0) ? 0 : 1.01; -} - -void BuildVelocityStretchedBasis_float(float3 velocity, float stretchIntensity, float radius, out float4 t0, out float4 t1, out float4 t2) -{ - t0 = float4(UNITY_MATRIX_V[0].xyz, radius); // camera right vector - t2 = float4(UNITY_MATRIX_V[2].xyz, radius); // camera forward vector - - float3 eyeVel = velocity - dot(velocity, t2.xyz) * t2.xyz; - float velNorm = length(eyeVel); - float stretchAmount = velNorm * stretchIntensity; - - // use it to lerp between velocity vector and camera right: - t0 = float4(velNorm > 0.00001 ? eyeVel / velNorm : t0.xyz, radius * (1 + stretchAmount)); - t1 = float4(normalize(cross(t0.xyz,t2.xyz)), radius); -} - -void BuildParameterSpaceMatrices_float(float4 t0, float4 t1, float4 t2, float radiusScale, out float3x3 P, out float3x3 IP) -{ - // build 3x3 orientation matrix and its inverse; - float3x3 IO = float3x3(t0.xyz,t1.xyz,t2.xyz); - float3x3 O = transpose(IO); - - // build 3x3 scaling matrix and its inverse: - float3x3 S = float3x3(radiusScale*t0.w,0,0,0,radiusScale*t1.w,0,0,0,radiusScale*t2.w); - float3x3 IS = float3x3(1/(radiusScale*t0.w),0,0,0,1/(radiusScale*t1.w),0,0,0,1/(radiusScale*t2.w)); - - // build 3x3 transformation matrix and its inverse: - P = mul((float3x3)UNITY_MATRIX_M, mul(O,mul(S,IO)) ); - IP = mul(mul(mul(O,IS),IO), (float3x3)UNITY_MATRIX_I_M); -} - -void BuildEllipsoidBillboard_float(float3 center, float3 corner, float3x3 P, float3x3 IP, out float3 worldPos, out float3 view, out float3 eye, out float radius) -{ - // eye position and quad vectors in parameter space: - eye = mul(IP,WorldEye(center) - center); - float3 u = normalize(cross(-eye,UNITY_MATRIX_V[1].xyz)); - float3 k = normalize(cross(-eye,u)); - - // visible circle radius and offset from center in the direction of the view ray: - float3 m; - radius = VisibleEllipsoidCircleRadius(eye,m); - - // world position of the billboard corner, and view vector to it: - worldPos = center + mul(P, m) + radius * (mul(P,u)* corner.x + mul(P,k)* corner.y); - view = worldPos - WorldEye(worldPos); -} - -void BuildAuxiliaryNormalVectors_float(float3 center, float3 worldPos, float3 view, float3x3 P, float3x3 IP, out float3 a2, out float3 a3) -{ - // calculate T^-2 in object space, then multiply by - // inverse transpose of modelview to rotate normal from object to eye. - // This way the normal calculated in IntersectEllipsoid() is already in view space. - IP = mul((float3x3)UNITY_MATRIX_M,IP); - float3x3 IT_MV = transpose(mul((float3x3)UNITY_MATRIX_I_V, (float3x3)UNITY_MATRIX_I_M)); - float3x3 IP2 = mul(IT_MV, mul((float3x3)UNITY_MATRIX_I_M,mul (IP, IP))); // UNITY_MATRIX_IT_MV - - a2 = mul(IP2,WorldEye(worldPos) - center); //T^-2 * (eye - center) - a3 = mul(IP2,view); //T^-2 * A[0] -} - -#endif diff --git a/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc.meta b/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc.meta deleted file mode 100644 index 62b298766..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/ObiEllipsoidsHDRP.cginc.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: bc807595df1f54350ac0027aaf7cb91b -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/ObiMaterials/Common/ObiUtils.cginc b/Assets/Obi/Resources/ObiMaterials/Common/ObiUtils.cginc deleted file mode 100644 index bd161f27c..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/ObiUtils.cginc +++ /dev/null @@ -1,28 +0,0 @@ -#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/Assets/Obi/Resources/ObiMaterials/Common/ObiUtils.cginc.meta b/Assets/Obi/Resources/ObiMaterials/Common/ObiUtils.cginc.meta deleted file mode 100644 index d7668afa6..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/ObiUtils.cginc.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: fe1b10a99f88a45a09abf1a13d62b63f -timeCreated: 1445285630 -licenseType: Store -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/ObiMaterials/Common/ParticleShader.shadergraph b/Assets/Obi/Resources/ObiMaterials/Common/ParticleShader.shadergraph deleted file mode 100644 index 4b61fbcdf..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/ParticleShader.shadergraph +++ /dev/null @@ -1,5867 +0,0 @@ -{ - "m_SGVersion": 3, - "m_Type": "UnityEditor.ShaderGraph.GraphData", - "m_ObjectId": "78d72b84620c4d40bd076ace556c78f8", - "m_Properties": [ - { - "m_Id": "1f4b884eb7a5494fa0a4c6b1726ae6e9" - }, - { - "m_Id": "22b23a850ca345f6b5b35205f12039ae" - }, - { - "m_Id": "ac709b9b0cc14e26a2611422b499ba45" - } - ], - "m_Keywords": [], - "m_Dropdowns": [], - "m_CategoryData": [ - { - "m_Id": "4c99293183f94afb9e94b8936dbbcc14" - } - ], - "m_Nodes": [ - { - "m_Id": "1fdb294276af4309848652e8d2e07def" - }, - { - "m_Id": "5ff456959eca4fbd934a5aac0280d67f" - }, - { - "m_Id": "d11f8fd02e364ad5b8eadd3550fa2851" - }, - { - "m_Id": "cf2c0d4033c24443b7c21cb036226b3f" - }, - { - "m_Id": "dffaa900d1d04a7db60ef0ccab276839" - }, - { - "m_Id": "0dcd4dbbd33e4365be4d2cdfdc121036" - }, - { - "m_Id": "84cbbe352286486abb8cf0a951e3e458" - }, - { - "m_Id": "2ece075db2b3411a80af471816c4e871" - }, - { - "m_Id": "4f921bef2597498da8ae8c75e3007b37" - }, - { - "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" - }, - { - "m_Id": "5ee2f7c86c814012bd5eba803e4b36ea" - }, - { - "m_Id": "79ee34ad93234f7880a9f2680b904beb" - }, - { - "m_Id": "44656ed842a54a34b956fc57e356de21" - }, - { - "m_Id": "18eff50f7a64480385a1ad3698dc0a1d" - }, - { - "m_Id": "7c1b54d0ae564cce9fee0e3b18b0f945" - }, - { - "m_Id": "9a540fa4d7fd41edb663c20d392cc937" - }, - { - "m_Id": "b585fdf2c7ce438b8a72c6f452ff31ab" - }, - { - "m_Id": "b397b42dfd5342b0b6291c60e22ae6d4" - }, - { - "m_Id": "e185f6e703b749569fec95035ae86e44" - }, - { - "m_Id": "7e7b6ef93c414bec8d608482fc837fb3" - }, - { - "m_Id": "b35a3765628d49f69d75dfc77df38114" - }, - { - "m_Id": "29c676f6f7fc4d2dbb627a099736baaa" - }, - { - "m_Id": "32c989810b8e4fe7b964240b81ea9def" - }, - { - "m_Id": "a5babea545924715b0ba888ac6373f66" - }, - { - "m_Id": "babccae7634a4d2090f45aa9e154b2ca" - }, - { - "m_Id": "2ed72e60304c47509002fc1b2c204a99" - }, - { - "m_Id": "6f0ad27166324e6fbc829bc0e4076d27" - }, - { - "m_Id": "7650578a1434466faec6ab2d3fe8f0a6" - }, - { - "m_Id": "69d4f0ec92ff4182be437caf84eafb72" - }, - { - "m_Id": "af8c0d42edcd4eda8e6e86de937dbadf" - }, - { - "m_Id": "4c900e907c5340d88caa515b644c0a70" - }, - { - "m_Id": "97bd7a4169c641a59a7012a029b44964" - }, - { - "m_Id": "3b5798f4b422481bb94c97f7014cd7b9" - }, - { - "m_Id": "ee946d6d4c7c4cb1b920e447bb01d580" - }, - { - "m_Id": "f5da1c6b4af04e169c2dce3319f17d13" - }, - { - "m_Id": "675f1b67f80444599ddf4ba675419f8d" - }, - { - "m_Id": "4959d2015a38402881b6fec5e5a518a6" - }, - { - "m_Id": "463beca994a14896865c0978dffaa08b" - }, - { - "m_Id": "e445db0b154846179887a9470ff3aa66" - }, - { - "m_Id": "e94b4e133a134411aa01241421f711cb" - }, - { - "m_Id": "dfd25b2a19df42beba356ef0e5e0b3be" - }, - { - "m_Id": "23a24fff90ba43ab9e3d17e24ec85ad7" - }, - { - "m_Id": "c6116508eb7246469fe9c6ae81460410" - }, - { - "m_Id": "186ed2ae0dbb4487a943f3930c952fc4" - }, - { - "m_Id": "26e1af9d3ae14f71adf1a395a49b937e" - }, - { - "m_Id": "51ff74a2115b4f07940322b02e8b9806" - }, - { - "m_Id": "115b4d546e6b497dae56cf2a084bb730" - }, - { - "m_Id": "4142867127cb4a21bfa771e4c5b504bc" - }, - { - "m_Id": "e17c109ffbe942c89e40ff95cd1cfd7a" - }, - { - "m_Id": "7be03ef72fc946ff81de225831947baf" - } - ], - "m_GroupDatas": [], - "m_StickyNoteDatas": [], - "m_Edges": [ - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "115b4d546e6b497dae56cf2a084bb730" - }, - "m_SlotId": 1 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "af8c0d42edcd4eda8e6e86de937dbadf" - }, - "m_SlotId": 1 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "186ed2ae0dbb4487a943f3930c952fc4" - }, - "m_SlotId": 1 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "5ee2f7c86c814012bd5eba803e4b36ea" - }, - "m_SlotId": 3 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "18eff50f7a64480385a1ad3698dc0a1d" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "4f921bef2597498da8ae8c75e3007b37" - }, - "m_SlotId": 3 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" - }, - "m_SlotId": 4 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "23a24fff90ba43ab9e3d17e24ec85ad7" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" - }, - "m_SlotId": 4 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "5ee2f7c86c814012bd5eba803e4b36ea" - }, - "m_SlotId": 1 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" - }, - "m_SlotId": 5 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "6f0ad27166324e6fbc829bc0e4076d27" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" - }, - "m_SlotId": 6 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "115b4d546e6b497dae56cf2a084bb730" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" - }, - "m_SlotId": 6 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "5ee2f7c86c814012bd5eba803e4b36ea" - }, - "m_SlotId": 2 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" - }, - "m_SlotId": 7 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "babccae7634a4d2090f45aa9e154b2ca" - }, - "m_SlotId": 3 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "23a24fff90ba43ab9e3d17e24ec85ad7" - }, - "m_SlotId": 1 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "1fdb294276af4309848652e8d2e07def" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "26e1af9d3ae14f71adf1a395a49b937e" - }, - "m_SlotId": 1 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "5ee2f7c86c814012bd5eba803e4b36ea" - }, - "m_SlotId": 4 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "29c676f6f7fc4d2dbb627a099736baaa" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "7c1b54d0ae564cce9fee0e3b18b0f945" - }, - "m_SlotId": 2 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "2ece075db2b3411a80af471816c4e871" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "2ece075db2b3411a80af471816c4e871" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "5ee2f7c86c814012bd5eba803e4b36ea" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "2ed72e60304c47509002fc1b2c204a99" - }, - "m_SlotId": 1 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "babccae7634a4d2090f45aa9e154b2ca" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "2ed72e60304c47509002fc1b2c204a99" - }, - "m_SlotId": 2 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "babccae7634a4d2090f45aa9e154b2ca" - }, - "m_SlotId": 1 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "32c989810b8e4fe7b964240b81ea9def" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "7c1b54d0ae564cce9fee0e3b18b0f945" - }, - "m_SlotId": 3 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "3b5798f4b422481bb94c97f7014cd7b9" - }, - "m_SlotId": 2 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "5ff456959eca4fbd934a5aac0280d67f" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "44656ed842a54a34b956fc57e356de21" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "4f921bef2597498da8ae8c75e3007b37" - }, - "m_SlotId": 2 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "4959d2015a38402881b6fec5e5a518a6" - }, - "m_SlotId": 3 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "f5da1c6b4af04e169c2dce3319f17d13" - }, - "m_SlotId": 1 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "4c900e907c5340d88caa515b644c0a70" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "3b5798f4b422481bb94c97f7014cd7b9" - }, - "m_SlotId": 1 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "4f921bef2597498da8ae8c75e3007b37" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "186ed2ae0dbb4487a943f3930c952fc4" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "4f921bef2597498da8ae8c75e3007b37" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" - }, - "m_SlotId": 2 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "4f921bef2597498da8ae8c75e3007b37" - }, - "m_SlotId": 4 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" - }, - "m_SlotId": 3 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "4f921bef2597498da8ae8c75e3007b37" - }, - "m_SlotId": 4 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "26e1af9d3ae14f71adf1a395a49b937e" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "51ff74a2115b4f07940322b02e8b9806" - }, - "m_SlotId": 1 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "2ed72e60304c47509002fc1b2c204a99" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "5ee2f7c86c814012bd5eba803e4b36ea" - }, - "m_SlotId": 5 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "7e7b6ef93c414bec8d608482fc837fb3" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "5ee2f7c86c814012bd5eba803e4b36ea" - }, - "m_SlotId": 6 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "b35a3765628d49f69d75dfc77df38114" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "675f1b67f80444599ddf4ba675419f8d" - }, - "m_SlotId": 3 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "f5da1c6b4af04e169c2dce3319f17d13" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "69d4f0ec92ff4182be437caf84eafb72" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "af8c0d42edcd4eda8e6e86de937dbadf" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "6f0ad27166324e6fbc829bc0e4076d27" - }, - "m_SlotId": 1 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "7650578a1434466faec6ab2d3fe8f0a6" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "7650578a1434466faec6ab2d3fe8f0a6" - }, - "m_SlotId": 1 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "babccae7634a4d2090f45aa9e154b2ca" - }, - "m_SlotId": 2 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "79ee34ad93234f7880a9f2680b904beb" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "4f921bef2597498da8ae8c75e3007b37" - }, - "m_SlotId": 1 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "7be03ef72fc946ff81de225831947baf" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "dffaa900d1d04a7db60ef0ccab276839" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "7c1b54d0ae564cce9fee0e3b18b0f945" - }, - "m_SlotId": 4 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "4959d2015a38402881b6fec5e5a518a6" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "7c1b54d0ae564cce9fee0e3b18b0f945" - }, - "m_SlotId": 5 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "a5babea545924715b0ba888ac6373f66" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "7c1b54d0ae564cce9fee0e3b18b0f945" - }, - "m_SlotId": 7 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "dfd25b2a19df42beba356ef0e5e0b3be" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "84cbbe352286486abb8cf0a951e3e458" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "1a63d9f74e5943368bfe7e3f9bba296a" - }, - "m_SlotId": 1 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "84cbbe352286486abb8cf0a951e3e458" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "51ff74a2115b4f07940322b02e8b9806" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "97bd7a4169c641a59a7012a029b44964" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "3b5798f4b422481bb94c97f7014cd7b9" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "a5babea545924715b0ba888ac6373f66" - }, - "m_SlotId": 1 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "463beca994a14896865c0978dffaa08b" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "af8c0d42edcd4eda8e6e86de937dbadf" - }, - "m_SlotId": 2 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "b585fdf2c7ce438b8a72c6f452ff31ab" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "b397b42dfd5342b0b6291c60e22ae6d4" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "7c1b54d0ae564cce9fee0e3b18b0f945" - }, - "m_SlotId": 1 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "babccae7634a4d2090f45aa9e154b2ca" - }, - "m_SlotId": 4 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "9a540fa4d7fd41edb663c20d392cc937" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "c6116508eb7246469fe9c6ae81460410" - }, - "m_SlotId": 1 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "675f1b67f80444599ddf4ba675419f8d" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "e185f6e703b749569fec95035ae86e44" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "7c1b54d0ae564cce9fee0e3b18b0f945" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "e185f6e703b749569fec95035ae86e44" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "c6116508eb7246469fe9c6ae81460410" - }, - "m_SlotId": 0 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "e445db0b154846179887a9470ff3aa66" - }, - "m_SlotId": 0 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "4f921bef2597498da8ae8c75e3007b37" - }, - "m_SlotId": 5 - } - }, - { - "m_OutputSlot": { - "m_Node": { - "m_Id": "f5da1c6b4af04e169c2dce3319f17d13" - }, - "m_SlotId": 2 - }, - "m_InputSlot": { - "m_Node": { - "m_Id": "ee946d6d4c7c4cb1b920e447bb01d580" - }, - "m_SlotId": 0 - } - } - ], - "m_VertexContext": { - "m_Position": { - "x": 535.0, - "y": 29.9999942779541 - }, - "m_Blocks": [ - { - "m_Id": "7e7b6ef93c414bec8d608482fc837fb3" - }, - { - "m_Id": "b35a3765628d49f69d75dfc77df38114" - }, - { - "m_Id": "1fdb294276af4309848652e8d2e07def" - }, - { - "m_Id": "b585fdf2c7ce438b8a72c6f452ff31ab" - }, - { - "m_Id": "9a540fa4d7fd41edb663c20d392cc937" - }, - { - "m_Id": "4142867127cb4a21bfa771e4c5b504bc" - }, - { - "m_Id": "e17c109ffbe942c89e40ff95cd1cfd7a" - } - ] - }, - "m_FragmentContext": { - "m_Position": { - "x": 535.0000610351563, - "y": 411.0000305175781 - }, - "m_Blocks": [ - { - "m_Id": "5ff456959eca4fbd934a5aac0280d67f" - }, - { - "m_Id": "463beca994a14896865c0978dffaa08b" - }, - { - "m_Id": "d11f8fd02e364ad5b8eadd3550fa2851" - }, - { - "m_Id": "cf2c0d4033c24443b7c21cb036226b3f" - }, - { - "m_Id": "dffaa900d1d04a7db60ef0ccab276839" - }, - { - "m_Id": "0dcd4dbbd33e4365be4d2cdfdc121036" - }, - { - "m_Id": "ee946d6d4c7c4cb1b920e447bb01d580" - }, - { - "m_Id": "e94b4e133a134411aa01241421f711cb" - }, - { - "m_Id": "dfd25b2a19df42beba356ef0e5e0b3be" - } - ] - }, - "m_PreviewData": { - "serializedMesh": { - "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", - "m_Guid": "" - }, - "preventRotation": false - }, - "m_Path": "Shader Graphs", - "m_GraphPrecision": 1, - "m_PreviewMode": 2, - "m_OutputNode": { - "m_Id": "" - }, - "m_ActiveTargets": [ - { - "m_Id": "5915510c968749209ff6f351ddb9a96e" - }, - { - "m_Id": "4790e9cb06234cefa4390fb194e36e9d" - }, - { - "m_Id": "9f0ab621b28741df9e2a65a37837af56" - } - ] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", - "m_ObjectId": "02661c44bbcb4c2f9ba17e80d7961c8b", - "m_Id": 1, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.LightingData", - "m_ObjectId": "0302a9604b3f4175835f2fe805babd5b", - "m_NormalDropOffSpace": 0, - "m_BlendPreserveSpecular": true, - "m_ReceiveDecals": false, - "m_ReceiveSSR": true, - "m_ReceiveSSRTransparent": false, - "m_SpecularAA": false, - "m_SpecularOcclusionMode": 1, - "m_OverrideBakedGI": false -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Matrix3MaterialSlot", - "m_ObjectId": "036bc09f36e2448f81db41a6ae1e8190", - "m_Id": 2, - "m_DisplayName": "P", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "P", - "m_StageCapability": 3, - "m_Value": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - }, - "m_DefaultValue": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicMatrixMaterialSlot", - "m_ObjectId": "0486de2ab41b4463853f8b70b1c609d6", - "m_Id": 0, - "m_DisplayName": "", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "", - "m_StageCapability": 3, - "m_Value": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - }, - "m_DefaultValue": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "0631b78f49ed4369abc26bddeecd8c71", - "m_Id": 2, - "m_DisplayName": "view", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "view", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "06a2fcfa697b4e19af278e2c539b8d2d", - "m_Id": 0, - "m_DisplayName": "Ambient Occlusion", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "Occlusion", - "m_StageCapability": 2, - "m_Value": 1.0, - "m_DefaultValue": 1.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "08351f97eeea4b6485b39a61a65a3fe8", - "m_Id": 5, - "m_DisplayName": "RGB", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "RGB", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "09069b51882f444b840aabb69c7c506f", - "m_Id": 0, - "m_DisplayName": "In", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "In", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.BuiltinData", - "m_ObjectId": "094b0804cd0a4e33920a4abe743454a6", - "m_Distortion": false, - "m_DistortionMode": 0, - "m_DistortionDepthTest": true, - "m_AddPrecomputedVelocity": false, - "m_TransparentWritesMotionVec": false, - "m_AlphaToMask": false, - "m_DepthOffset": true, - "m_ConservativeDepthOffset": false, - "m_TransparencyFog": true, - "m_AlphaTestShadow": false, - "m_BackThenFrontRendering": false, - "m_TransparentDepthPrepass": false, - "m_TransparentDepthPostpass": false, - "m_SupportLodCrossFade": false -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "09cd01e9020d48e1bda65b06c6a71b16", - "m_Id": 0, - "m_DisplayName": "_Smoothness", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "0a65b1a8a9cc4d26aa3d5676905379a0", - "m_Id": 0, - "m_DisplayName": "Depth Offset", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "DepthOffset", - "m_StageCapability": 2, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", - "m_ObjectId": "0ba2bd333a584e04a0f559269a5cb217", - "m_Id": 0, - "m_DisplayName": "Base Color", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "BaseColor", - "m_StageCapability": 2, - "m_Value": { - "x": 0.5, - "y": 0.5, - "z": 0.5 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [], - "m_ColorMode": 0, - "m_DefaultColor": { - "r": 0.5, - "g": 0.5, - "b": 0.5, - "a": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "0bed110901394810986b7c46885c2dbb", - "m_Id": 3, - "m_DisplayName": "a3", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "a3", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "0c6df044f18e4fca8e0602ab941e36b3", - "m_Id": 5, - "m_DisplayName": "a2", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "a2", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "0dcd4dbbd33e4365be4d2cdfdc121036", - "m_Group": { - "m_Id": "" - }, - "m_Name": "SurfaceDescription.Occlusion", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 0.0, - "y": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "m_Slots": [ - { - "m_Id": "06a2fcfa697b4e19af278e2c539b8d2d" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "SurfaceDescription.Occlusion" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.RedirectNodeData", - "m_ObjectId": "115b4d546e6b497dae56cf2a084bb730", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Redirect Node", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -215.00003051757813, - "y": 216.00003051757813, - "width": 56.00001525878906, - "height": 24.0 - } - }, - "m_Slots": [ - { - "m_Id": "34b089445d94443bae321419aba92376" - }, - { - "m_Id": "ef8a1c0804ec4253ad73c319031bec6e" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.RedirectNodeData", - "m_ObjectId": "186ed2ae0dbb4487a943f3930c952fc4", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Redirect Node", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -1105.0, - "y": -97.00000762939453, - "width": 56.0, - "height": 24.000015258789064 - } - }, - "m_Slots": [ - { - "m_Id": "0486de2ab41b4463853f8b70b1c609d6" - }, - { - "m_Id": "3cdefcef62e446c6820185746a0ec7a1" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.UVNode", - "m_ObjectId": "18eff50f7a64480385a1ad3698dc0a1d", - "m_Group": { - "m_Id": "" - }, - "m_Name": "UV", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -1908.0, - "y": 196.0000457763672, - "width": 145.0, - "height": 128.99998474121095 - } - }, - "m_Slots": [ - { - "m_Id": "9d04c3fa0c6848bd908018475a5ec9cf" - } - ], - "synonyms": [ - "texcoords", - "coords", - "coordinates" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_OutputChannel": 2 -} - -{ - "m_SGVersion": 1, - "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", - "m_ObjectId": "1a63d9f74e5943368bfe7e3f9bba296a", - "m_Group": { - "m_Id": "" - }, - "m_Name": "BuildEllipsoidBillboard (Custom Function)", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -1105.0, - "y": -20.999990463256837, - "width": 279.0, - "height": 165.99998474121095 - } - }, - "m_Slots": [ - { - "m_Id": "24cc20330a6746e78f01f178e5c0ee25" - }, - { - "m_Id": "54c2e40c04ab4fa88a6d13a3467a46bd" - }, - { - "m_Id": "036bc09f36e2448f81db41a6ae1e8190" - }, - { - "m_Id": "48d6d267a6b6420c974cd75196394443" - }, - { - "m_Id": "436f317395f24909887811586c2f866e" - }, - { - "m_Id": "5861051e6958489e94681625dec6c335" - }, - { - "m_Id": "6fe22af4b335449785d1591830c50ad8" - }, - { - "m_Id": "5649099a965447e4a907f5c05f14dbbd" - } - ], - "synonyms": [ - "code", - "HLSL" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SourceType": 0, - "m_FunctionName": "BuildEllipsoidBillboard", - "m_FunctionSource": "bc807595df1f54350ac0027aaf7cb91b", - "m_FunctionBody": "Enter function body here..." -} - -{ - "m_SGVersion": 3, - "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", - "m_ObjectId": "1f4b884eb7a5494fa0a4c6b1726ae6e9", - "m_Guid": { - "m_GuidSerialized": "763834f5-9d1d-4816-ab86-2702663f61f8" - }, - "m_Name": "_ParticleColor", - "m_DefaultRefNameVersion": 1, - "m_RefNameGeneratedByDisplayName": "_ParticleColor", - "m_DefaultReferenceName": "_ParticleColor", - "m_OverrideReferenceName": "", - "m_GeneratePropertyBlock": true, - "m_UseCustomSlotLabel": false, - "m_CustomSlotLabel": "", - "m_Precision": 0, - "overrideHLSLDeclaration": false, - "hlslDeclarationOverride": 0, - "m_Hidden": false, - "m_Value": { - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "isMainColor": false, - "m_ColorMode": 0 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "1f4c9820a5b244deb7bd8e2bf0aa5270", - "m_Id": 0, - "m_DisplayName": "Metallic", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "Metallic", - "m_StageCapability": 2, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "1fdb294276af4309848652e8d2e07def", - "m_Group": { - "m_Id": "" - }, - "m_Name": "VertexDescription.Position", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 549.0, - "y": 56.99999237060547, - "width": 200.0, - "height": 41.000022888183597 - } - }, - "m_Slots": [ - { - "m_Id": "7e16c891692f43b1951da51f4eb47500" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "VertexDescription.Position" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", - "m_ObjectId": "202b523ecf9e4573829b429baf158c79", - "m_Id": 0, - "m_DisplayName": "", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Matrix3MaterialSlot", - "m_ObjectId": "212c4e3679184df4b049b834fa8b8426", - "m_Id": 4, - "m_DisplayName": "IP", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "IP", - "m_StageCapability": 3, - "m_Value": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - }, - "m_DefaultValue": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - } -} - -{ - "m_SGVersion": 1, - "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", - "m_ObjectId": "22b23a850ca345f6b5b35205f12039ae", - "m_Guid": { - "m_GuidSerialized": "50e8f452-c4bb-469f-bc6d-d232542d1f49" - }, - "m_Name": "_RadiusScale", - "m_DefaultRefNameVersion": 1, - "m_RefNameGeneratedByDisplayName": "_RadiusScale", - "m_DefaultReferenceName": "_RadiusScale", - "m_OverrideReferenceName": "", - "m_GeneratePropertyBlock": true, - "m_UseCustomSlotLabel": false, - "m_CustomSlotLabel": "", - "m_Precision": 0, - "overrideHLSLDeclaration": false, - "hlslDeclarationOverride": 0, - "m_Hidden": false, - "m_Value": 1.0, - "m_FloatType": 0, - "m_RangeValues": { - "x": 0.0, - "y": 1.0 - } -} - -{ - "m_SGVersion": 1, - "m_Type": "UnityEditor.ShaderGraph.TransformNode", - "m_ObjectId": "23a24fff90ba43ab9e3d17e24ec85ad7", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Transform", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -426.00006103515627, - "y": -20.999967575073243, - "width": 211.00003051757813, - "height": 156.99998474121095 - } - }, - "m_Slots": [ - { - "m_Id": "09069b51882f444b840aabb69c7c506f" - }, - { - "m_Id": "2bd336d88e8e4c18a43bb2689820da8b" - } - ], - "synonyms": [ - "world", - "tangent", - "object", - "view", - "screen", - "convert" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_Conversion": { - "from": 2, - "to": 0 - }, - "m_ConversionType": 0 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "24cc20330a6746e78f01f178e5c0ee25", - "m_Id": 0, - "m_DisplayName": "center", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "center", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.RedirectNodeData", - "m_ObjectId": "26e1af9d3ae14f71adf1a395a49b937e", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Redirect Node", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -1105.0, - "y": -72.99999237060547, - "width": 56.0, - "height": 24.00000762939453 - } - }, - "m_Slots": [ - { - "m_Id": "f66158b6241342c88d2a4991233e93a8" - }, - { - "m_Id": "bfadf92d913d48b88b7911b3bf4952ba" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.CustomInterpolatorNode", - "m_ObjectId": "29c676f6f7fc4d2dbb627a099736baaa", - "m_Group": { - "m_Id": "" - }, - "m_Name": "a2 (Custom Interpolator)", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -757.0000610351563, - "y": 766.0, - "width": 186.0, - "height": 94.0 - } - }, - "m_Slots": [ - { - "m_Id": "c1114c7b3db74f0da0e27c4938d3b793" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "customBlockNodeName": "a2", - "serializedType": 4 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", - "m_ObjectId": "2b95d6ad64994e1b81cadbf3a7869b7f", - "m_Id": 0, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "2bd336d88e8e4c18a43bb2689820da8b", - "m_Id": 1, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", - "m_ObjectId": "2c02d7c314a54cb8bed120d81563a87f", - "m_Id": 0, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 2, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 1, - "m_Type": "UnityEditor.ShaderGraph.PositionNode", - "m_ObjectId": "2ece075db2b3411a80af471816c4e871", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Position", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -1571.0001220703125, - "y": -238.0, - "width": 206.0001220703125, - "height": 131.0 - } - }, - "m_Slots": [ - { - "m_Id": "719c4a0aa83440f1abe407eb97fe03d1" - } - ], - "synonyms": [ - "location" - ], - "m_Precision": 1, - "m_PreviewExpanded": false, - "m_PreviewMode": 2, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_Space": 2, - "m_PositionSource": 0 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.SplitNode", - "m_ObjectId": "2ed72e60304c47509002fc1b2c204a99", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Split", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -534.0, - "y": 266.0, - "width": 119.99993896484375, - "height": 149.00003051757813 - } - }, - "m_Slots": [ - { - "m_Id": "d9e1566528a04795a93b9222cfe9b841" - }, - { - "m_Id": "feae803029f141b7b77576f65de3f361" - }, - { - "m_Id": "9932077343944e9ea934ada791a438e8" - }, - { - "m_Id": "b61bc63901084fca9804abee48abddfd" - }, - { - "m_Id": "ae35ddc362bb47d9831f62b11095e69c" - } - ], - "synonyms": [ - "separate" - ], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.CustomInterpolatorNode", - "m_ObjectId": "32c989810b8e4fe7b964240b81ea9def", - "m_Group": { - "m_Id": "" - }, - "m_Name": "a3 (Custom Interpolator)", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -757.0000610351563, - "y": 865.0, - "width": 186.0, - "height": 94.0 - } - }, - "m_Slots": [ - { - "m_Id": "2c02d7c314a54cb8bed120d81563a87f" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "customBlockNodeName": "a3", - "serializedType": 4 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "32c9f709646841e6b3d5d2ecf3b88217", - "m_Id": 3, - "m_DisplayName": "B", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "B", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", - "m_ObjectId": "333055955acb46f7b454539413c183b0", - "m_Id": 0, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": { - "x": 1.0, - "y": 1.0, - "z": 1.0, - "w": 1.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", - "m_ObjectId": "34b089445d94443bae321419aba92376", - "m_Id": 0, - "m_DisplayName": "", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", - "m_ObjectId": "3b5798f4b422481bb94c97f7014cd7b9", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Multiply", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 245.99986267089845, - "y": 410.9999694824219, - "width": 129.9999542236328, - "height": 118.00003051757813 - } - }, - "m_Slots": [ - { - "m_Id": "9d0a9a76df624baebeb40acbf1676a05" - }, - { - "m_Id": "6706229ffa8a452fb31f3e611a4e969f" - }, - { - "m_Id": "e27b00a5d6b8496e888b33ff61e843e3" - } - ], - "synonyms": [ - "multiplication", - "times", - "x" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicMatrixMaterialSlot", - "m_ObjectId": "3cdefcef62e446c6820185746a0ec7a1", - "m_Id": 1, - "m_DisplayName": "", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "", - "m_StageCapability": 3, - "m_Value": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - }, - "m_DefaultValue": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "3e0e2d1e47374294b5539e85bc63baf7", - "m_Id": 6, - "m_DisplayName": "a3", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "a3", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "3f7e82d473a94fab86903e3875520da8", - "m_Id": 4, - "m_DisplayName": "A", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "A", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "4142867127cb4a21bfa771e4c5b504bc", - "m_Group": { - "m_Id": "" - }, - "m_Name": "VertexDescription.Normal", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 0.0, - "y": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "m_Slots": [ - { - "m_Id": "b456d184e007428eb74e555e1d369069" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "VertexDescription.Normal" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", - "m_ObjectId": "41c7519efb9a45fb85dcded2b16d584d", - "m_Id": 0, - "m_DisplayName": "Tangent", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "Tangent", - "m_StageCapability": 1, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [], - "m_Space": 0 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "436f317395f24909887811586c2f866e", - "m_Id": 4, - "m_DisplayName": "worldPos", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "worldPos", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.UVNode", - "m_ObjectId": "44656ed842a54a34b956fc57e356de21", - "m_Group": { - "m_Id": "" - }, - "m_Name": "UV", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -1908.0, - "y": 62.000003814697269, - "width": 145.0, - "height": 129.0 - } - }, - "m_Slots": [ - { - "m_Id": "2b95d6ad64994e1b81cadbf3a7869b7f" - } - ], - "synonyms": [ - "texcoords", - "coords", - "coordinates" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_OutputChannel": 1 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "463beca994a14896865c0978dffaa08b", - "m_Group": { - "m_Id": "" - }, - "m_Name": "SurfaceDescription.NormalWS", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 541.0000610351563, - "y": 518.0, - "width": 199.99993896484376, - "height": 41.0 - } - }, - "m_Slots": [ - { - "m_Id": "d08d226deab44224a9c127e0838da1ec" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "SurfaceDescription.NormalWS" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDTarget", - "m_ObjectId": "4790e9cb06234cefa4390fb194e36e9d", - "m_ActiveSubTarget": { - "m_Id": "f63f238dcaed45b9859faec9503ae798" - }, - "m_Datas": [ - { - "m_Id": "de8e93dbd1744203a66905de95755eec" - }, - { - "m_Id": "094b0804cd0a4e33920a4abe743454a6" - }, - { - "m_Id": "0302a9604b3f4175835f2fe805babd5b" - }, - { - "m_Id": "91a6a3e7575d45f9ad4d9f157973bc76" - } - ], - "m_CustomEditorGUI": "", - "m_SupportVFX": false -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Matrix3MaterialSlot", - "m_ObjectId": "48d6d267a6b6420c974cd75196394443", - "m_Id": 3, - "m_DisplayName": "IP", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "IP", - "m_StageCapability": 3, - "m_Value": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - }, - "m_DefaultValue": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.SplitNode", - "m_ObjectId": "4959d2015a38402881b6fec5e5a518a6", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Split", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -100.99998474121094, - "y": 973.0, - "width": 120.0, - "height": 149.0 - } - }, - "m_Slots": [ - { - "m_Id": "aa904b9834494fefae0603bbf51a46ae" - }, - { - "m_Id": "a04bfc2e0f9748878673606fffc20b60" - }, - { - "m_Id": "d5ab07535b904d6c95b72aefdd4d8ccd" - }, - { - "m_Id": "7e1b86be59204bddbf54c850cfe7f7fd" - }, - { - "m_Id": "ea691d98931f4db5b57fa9074c8ac113" - } - ], - "synonyms": [ - "separate" - ], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.PropertyNode", - "m_ObjectId": "4c900e907c5340d88caa515b644c0a70", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Property", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 49.99992752075195, - "y": 511.9999694824219, - "width": 148.99998474121095, - "height": 34.000030517578128 - } - }, - "m_Slots": [ - { - "m_Id": "ec49096fac914af0a3faddf1feb3953c" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_Property": { - "m_Id": "1f4b884eb7a5494fa0a4c6b1726ae6e9" - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.CategoryData", - "m_ObjectId": "4c99293183f94afb9e94b8936dbbcc14", - "m_Name": "", - "m_ChildObjectList": [ - { - "m_Id": "1f4b884eb7a5494fa0a4c6b1726ae6e9" - }, - { - "m_Id": "22b23a850ca345f6b5b35205f12039ae" - }, - { - "m_Id": "ac709b9b0cc14e26a2611422b499ba45" - } - ] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", - "m_ObjectId": "4d1be359822e42259ed2488d64051ddd", - "m_Id": 2, - "m_DisplayName": "t1", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "t1", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 1, - "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", - "m_ObjectId": "4f921bef2597498da8ae8c75e3007b37", - "m_Group": { - "m_Id": "" - }, - "m_Name": "BuildParameterSpaceMatrices (Custom Function)", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -1690.999755859375, - "y": 29.999990463256837, - "width": 326.0, - "height": 166.00001525878907 - } - }, - "m_Slots": [ - { - "m_Id": "6de4193c77c443cf829c0b9051349796" - }, - { - "m_Id": "4d1be359822e42259ed2488d64051ddd" - }, - { - "m_Id": "67fa16b6c3424083aaed5ff9d043584a" - }, - { - "m_Id": "d3003457079944b499113867ead39439" - }, - { - "m_Id": "cd294f26621f499cb86c60132cc4143c" - }, - { - "m_Id": "774879720fdb4a149503b61c37ca1170" - } - ], - "synonyms": [ - "code", - "HLSL" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SourceType": 0, - "m_FunctionName": "BuildParameterSpaceMatrices", - "m_FunctionSource": "bc807595df1f54350ac0027aaf7cb91b", - "m_FunctionBody": "Enter function body here..." -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", - "m_ObjectId": "51b895e1b64e43529095cc44fc769771", - "m_Id": 2, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.RedirectNodeData", - "m_ObjectId": "51ff74a2115b4f07940322b02e8b9806", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Redirect Node", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -1005.9999389648438, - "y": 304.0, - "width": 56.0, - "height": 24.0 - } - }, - "m_Slots": [ - { - "m_Id": "202b523ecf9e4573829b429baf158c79" - }, - { - "m_Id": "7597891277e54542b0e496704bf8a7f6" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", - "m_ObjectId": "53f213ac70a7461ab7fb3813e00bb7f6", - "m_Id": 0, - "m_DisplayName": "", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "54c2e40c04ab4fa88a6d13a3467a46bd", - "m_Id": 1, - "m_DisplayName": "corner", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "corner", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "5649099a965447e4a907f5c05f14dbbd", - "m_Id": 7, - "m_DisplayName": "radius", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "radius", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "5861051e6958489e94681625dec6c335", - "m_Id": 6, - "m_DisplayName": "view", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "view", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 2, - "m_Type": "UnityEditor.Rendering.BuiltIn.ShaderGraph.BuiltInTarget", - "m_ObjectId": "5915510c968749209ff6f351ddb9a96e", - "m_ActiveSubTarget": { - "m_Id": "64c04874fef94dbaa74657a68a9696db" - }, - "m_AllowMaterialOverride": false, - "m_SurfaceType": 0, - "m_ZWriteControl": 0, - "m_ZTestMode": 4, - "m_AlphaMode": 0, - "m_RenderFace": 2, - "m_AlphaClip": true, - "m_CustomEditorGUI": "" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", - "m_ObjectId": "5cb55dd043474b2ca931483a70806fb7", - "m_Id": 0, - "m_DisplayName": "In", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "In", - "m_StageCapability": 3, - "m_Value": { - "x": 1.0, - "y": 1.0, - "z": 1.0, - "w": 1.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - } -} - -{ - "m_SGVersion": 1, - "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", - "m_ObjectId": "5ee2f7c86c814012bd5eba803e4b36ea", - "m_Group": { - "m_Id": "" - }, - "m_Name": "BuildAuxiliaryNormalVectors (Custom Function)", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -533.9999389648438, - "y": -262.9999694824219, - "width": 316.00006103515627, - "height": 189.99996948242188 - } - }, - "m_Slots": [ - { - "m_Id": "855a9ade904b45bcac021a0c28779459" - }, - { - "m_Id": "60093ed6facb41ca9cb2a1c011469dfd" - }, - { - "m_Id": "0631b78f49ed4369abc26bddeecd8c71" - }, - { - "m_Id": "e3ffd102837b43d98258c9830c869bff" - }, - { - "m_Id": "212c4e3679184df4b049b834fa8b8426" - }, - { - "m_Id": "0c6df044f18e4fca8e0602ab941e36b3" - }, - { - "m_Id": "3e0e2d1e47374294b5539e85bc63baf7" - } - ], - "synonyms": [ - "code", - "HLSL" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SourceType": 0, - "m_FunctionName": "BuildAuxiliaryNormalVectors", - "m_FunctionSource": "bc807595df1f54350ac0027aaf7cb91b", - "m_FunctionBody": "Enter function body here..." -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "5ff456959eca4fbd934a5aac0280d67f", - "m_Group": { - "m_Id": "" - }, - "m_Name": "SurfaceDescription.BaseColor", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 0.0, - "y": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "m_Slots": [ - { - "m_Id": "0ba2bd333a584e04a0f559269a5cb217" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "SurfaceDescription.BaseColor" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "60093ed6facb41ca9cb2a1c011469dfd", - "m_Id": 1, - "m_DisplayName": "worldPos", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "worldPos", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", - "m_ObjectId": "619732196dbf41f6a0e7b1174688f54c", - "m_Id": 6, - "m_DisplayName": "RG", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "RG", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", - "m_ObjectId": "61c80ef969694adf838815d13bc5cd67", - "m_Id": 0, - "m_DisplayName": "Emission", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "Emission", - "m_StageCapability": 2, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [], - "m_ColorMode": 1, - "m_DefaultColor": { - "r": 0.0, - "g": 0.0, - "b": 0.0, - "a": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.Rendering.BuiltIn.ShaderGraph.BuiltInLitSubTarget", - "m_ObjectId": "64c04874fef94dbaa74657a68a9696db", - "m_WorkflowMode": 1, - "m_NormalDropOffSpace": 2 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", - "m_ObjectId": "6706229ffa8a452fb31f3e611a4e969f", - "m_Id": 1, - "m_DisplayName": "B", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "B", - "m_StageCapability": 3, - "m_Value": { - "e00": 2.0, - "e01": 2.0, - "e02": 2.0, - "e03": 2.0, - "e10": 2.0, - "e11": 2.0, - "e12": 2.0, - "e13": 2.0, - "e20": 2.0, - "e21": 2.0, - "e22": 2.0, - "e23": 2.0, - "e30": 2.0, - "e31": 2.0, - "e32": 2.0, - "e33": 2.0 - }, - "m_DefaultValue": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.SplitNode", - "m_ObjectId": "675f1b67f80444599ddf4ba675419f8d", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Split", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -101.00003814697266, - "y": 815.0, - "width": 120.00003814697266, - "height": 149.0 - } - }, - "m_Slots": [ - { - "m_Id": "9dcc637f334c4ca6bf1c804405d3a006" - }, - { - "m_Id": "80b7c010fc9449a6be2b2971c67263b6" - }, - { - "m_Id": "b7ad4b8143794b239501e5624069fe3e" - }, - { - "m_Id": "32c9f709646841e6b3d5d2ecf3b88217" - }, - { - "m_Id": "3f7e82d473a94fab86903e3875520da8" - } - ], - "synonyms": [ - "separate" - ], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", - "m_ObjectId": "67fa16b6c3424083aaed5ff9d043584a", - "m_Id": 3, - "m_DisplayName": "t2", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "t2", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Matrix4MaterialSlot", - "m_ObjectId": "6938d733952943ab93dd81dd0cee899e", - "m_Id": 0, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - }, - "m_DefaultValue": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.TransformationMatrixNode", - "m_ObjectId": "69d4f0ec92ff4182be437caf84eafb72", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Transformation Matrix", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -214.9999237060547, - "y": 89.0, - "width": 171.99996948242188, - "height": 111.99996948242188 - } - }, - "m_Slots": [ - { - "m_Id": "6938d733952943ab93dd81dd0cee899e" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_matrix": -1, - "m_MatrixType": 2 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "6ad20bbbd1074108a572a177504cb6ea", - "m_Id": 0, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 1.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", - "m_ObjectId": "6de4193c77c443cf829c0b9051349796", - "m_Id": 1, - "m_DisplayName": "t0", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "t0", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "6f08d1c6b86e499681f60f1f6a7f9196", - "m_Id": 6, - "m_DisplayName": "thickness", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "thickness", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.LengthNode", - "m_ObjectId": "6f0ad27166324e6fbc829bc0e4076d27", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Length", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -663.9999389648438, - "y": 368.0000305175781, - "width": 129.99993896484376, - "height": 93.99993896484375 - } - }, - "m_Slots": [ - { - "m_Id": "8b53ecbd13194b99a498b327fe512e93" - }, - { - "m_Id": "e716e7c9ae6e45278a7d746d0a1da856" - } - ], - "synonyms": [ - "measure" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "6fe22af4b335449785d1591830c50ad8", - "m_Id": 5, - "m_DisplayName": "eye", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "eye", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "719c4a0aa83440f1abe407eb97fe03d1", - "m_Id": 0, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", - "m_ObjectId": "74076c4a517f4a9bb9273882b00b51a6", - "m_Id": 1, - "m_DisplayName": "", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", - "m_ObjectId": "748d29134b584213abde74716f79052b", - "m_Id": 0, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", - "m_ObjectId": "7597891277e54542b0e496704bf8a7f6", - "m_Id": 1, - "m_DisplayName": "", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.ReciprocalNode", - "m_ObjectId": "7650578a1434466faec6ab2d3fe8f0a6", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Reciprocal", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -414.00006103515627, - "y": 368.0000305175781, - "width": 145.0, - "height": 128.99996948242188 - } - }, - "m_Slots": [ - { - "m_Id": "5cb55dd043474b2ca931483a70806fb7" - }, - { - "m_Id": "02661c44bbcb4c2f9ba17e80d7961c8b" - } - ], - "synonyms": [ - "rcp" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_ReciprocalMethod": 0 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalLitSubTarget", - "m_ObjectId": "773994bbd21543a0aefb333735078a53", - "m_WorkflowMode": 1, - "m_NormalDropOffSpace": 2, - "m_ClearCoat": false -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Matrix3MaterialSlot", - "m_ObjectId": "774879720fdb4a149503b61c37ca1170", - "m_Id": 4, - "m_DisplayName": "IP", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "IP", - "m_StageCapability": 3, - "m_Value": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - }, - "m_DefaultValue": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "789d3c4acdee4777a68a43567cc7de51", - "m_Id": 0, - "m_DisplayName": "In", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "In", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "79ab31681e3e419183510b2fa4f09f6a", - "m_Id": 2, - "m_DisplayName": "B", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "B", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.UVNode", - "m_ObjectId": "79ee34ad93234f7880a9f2680b904beb", - "m_Group": { - "m_Id": "" - }, - "m_Name": "UV", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -1908.0, - "y": -73.0, - "width": 145.0, - "height": 129.0 - } - }, - "m_Slots": [ - { - "m_Id": "748d29134b584213abde74716f79052b" - } - ], - "synonyms": [ - "texcoords", - "coords", - "coordinates" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_OutputChannel": 0 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.PropertyNode", - "m_ObjectId": "7be03ef72fc946ff81de225831947baf", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Property", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 362.0, - "y": 616.0, - "width": 145.0, - "height": 34.0 - } - }, - "m_Slots": [ - { - "m_Id": "09cd01e9020d48e1bda65b06c6a71b16" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_Property": { - "m_Id": "ac709b9b0cc14e26a2611422b499ba45" - } -} - -{ - "m_SGVersion": 1, - "m_Type": "UnityEditor.ShaderGraph.CustomFunctionNode", - "m_ObjectId": "7c1b54d0ae564cce9fee0e3b18b0f945", - "m_Group": { - "m_Id": "" - }, - "m_Name": "IntersectEllipsoid (Custom Function)", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -425.99981689453127, - "y": 599.9999389648438, - "width": 251.99984741210938, - "height": 166.0 - } - }, - "m_Slots": [ - { - "m_Id": "afbbb64c9a7b4d16963c20b5f2af4154" - }, - { - "m_Id": "f30fd08bbcc74a6198fb279d65f82696" - }, - { - "m_Id": "b9f263f81f814659b65ba7c8965c6b7e" - }, - { - "m_Id": "0bed110901394810986b7c46885c2dbb" - }, - { - "m_Id": "d068f1207b3340f6a006284eb45ddb8b" - }, - { - "m_Id": "ce9414174ca54d1293c032bb45fac6a3" - }, - { - "m_Id": "6f08d1c6b86e499681f60f1f6a7f9196" - }, - { - "m_Id": "f50f51a906cb44dcbc8403263a8cfa32" - } - ], - "synonyms": [ - "code", - "HLSL" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SourceType": 0, - "m_FunctionName": "IntersectEllipsoid", - "m_FunctionSource": "bc807595df1f54350ac0027aaf7cb91b", - "m_FunctionBody": "Enter function body here..." -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", - "m_ObjectId": "7e16c891692f43b1951da51f4eb47500", - "m_Id": 0, - "m_DisplayName": "Position", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "Position", - "m_StageCapability": 1, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [], - "m_Space": 0 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "7e1b86be59204bddbf54c850cfe7f7fd", - "m_Id": 3, - "m_DisplayName": "B", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "B", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "7e7b6ef93c414bec8d608482fc837fb3", - "m_Group": { - "m_Id": "" - }, - "m_Name": "VertexDescription.CustomInterpolator", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 540.0000610351563, - "y": 51.99999237060547, - "width": 199.99993896484376, - "height": 41.00001525878906 - } - }, - "m_Slots": [ - { - "m_Id": "9d1228b7470642dd9a33ba2fb5148690" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "VertexDescription.a2#4" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "8053f38f7ace4f8c9ae0b53fca131228", - "m_Id": 1, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "80b7c010fc9449a6be2b2971c67263b6", - "m_Id": 1, - "m_DisplayName": "R", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "R", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.NormalVectorNode", - "m_ObjectId": "84cbbe352286486abb8cf0a951e3e458", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Normal Vector", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -1570.9998779296875, - "y": -106.99996948242188, - "width": 206.0, - "height": 131.0 - } - }, - "m_Slots": [ - { - "m_Id": "6ad20bbbd1074108a572a177504cb6ea" - } - ], - "synonyms": [ - "surface direction" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 2, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_Space": 0 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "855a9ade904b45bcac021a0c28779459", - "m_Id": 0, - "m_DisplayName": "center", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "center", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", - "m_ObjectId": "8b53ecbd13194b99a498b327fe512e93", - "m_Id": 0, - "m_DisplayName": "In", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "In", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.SystemData", - "m_ObjectId": "91a6a3e7575d45f9ad4d9f157973bc76", - "m_MaterialNeedsUpdateHash": 529, - "m_SurfaceType": 0, - "m_RenderingPass": 1, - "m_BlendMode": 0, - "m_ZTest": 4, - "m_ZWrite": false, - "m_TransparentCullMode": 2, - "m_OpaqueCullMode": 2, - "m_SortPriority": 0, - "m_AlphaTest": false, - "m_TransparentDepthPrepass": false, - "m_TransparentDepthPostpass": false, - "m_SupportLodCrossFade": false, - "m_DoubleSidedMode": 0, - "m_DOTSInstancing": false, - "m_CustomVelocity": false, - "m_Tessellation": false, - "m_TessellationMode": 0, - "m_TessellationFactorMinDistance": 20.0, - "m_TessellationFactorMaxDistance": 50.0, - "m_TessellationFactorTriangleSize": 100.0, - "m_TessellationShapeFactor": 0.75, - "m_TessellationBackFaceCullEpsilon": -0.25, - "m_TessellationMaxDisplacement": 0.009999999776482582, - "m_Version": 1, - "inspectorFoldoutMask": 9 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", - "m_ObjectId": "94d8bef9ca4146a9bc8013782aa27188", - "m_Id": 0, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 2, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.VertexColorNode", - "m_ObjectId": "97bd7a4169c641a59a7012a029b44964", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Vertex Color", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 81.0, - "y": 391.0, - "width": 118.00001525878906, - "height": 93.99990844726563 - } - }, - "m_Slots": [ - { - "m_Id": "333055955acb46f7b454539413c183b0" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 2, - "m_CustomColors": { - "m_SerializableColors": [] - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "9932077343944e9ea934ada791a438e8", - "m_Id": 2, - "m_DisplayName": "G", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "G", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "9a540fa4d7fd41edb663c20d392cc937", - "m_Group": { - "m_Id": "" - }, - "m_Name": "VertexDescription.CustomInterpolator", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 557.0, - "y": 316.0, - "width": 200.0001220703125, - "height": 40.999969482421878 - } - }, - "m_Slots": [ - { - "m_Id": "f14b3173a44b48f1a3ab3e787ab15403" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "VertexDescription.mapping#4" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", - "m_ObjectId": "9d04c3fa0c6848bd908018475a5ec9cf", - "m_Id": 0, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", - "m_ObjectId": "9d0a9a76df624baebeb40acbf1676a05", - "m_Id": 0, - "m_DisplayName": "A", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "A", - "m_StageCapability": 3, - "m_Value": { - "e00": 0.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 0.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 0.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 0.0 - }, - "m_DefaultValue": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", - "m_ObjectId": "9d1228b7470642dd9a33ba2fb5148690", - "m_Id": 0, - "m_DisplayName": "a2", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "a2", - "m_StageCapability": 1, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", - "m_ObjectId": "9dcc637f334c4ca6bf1c804405d3a006", - "m_Id": 0, - "m_DisplayName": "In", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "In", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - } -} - -{ - "m_SGVersion": 1, - "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalTarget", - "m_ObjectId": "9f0ab621b28741df9e2a65a37837af56", - "m_ActiveSubTarget": { - "m_Id": "773994bbd21543a0aefb333735078a53" - }, - "m_AllowMaterialOverride": false, - "m_SurfaceType": 0, - "m_ZTestMode": 4, - "m_ZWriteControl": 0, - "m_AlphaMode": 0, - "m_RenderFace": 2, - "m_AlphaClip": true, - "m_CastShadows": true, - "m_ReceiveShadows": true, - "m_CustomEditorGUI": "", - "m_SupportVFX": false -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "a04bfc2e0f9748878673606fffc20b60", - "m_Id": 1, - "m_DisplayName": "R", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "R", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 1, - "m_Type": "UnityEditor.ShaderGraph.TransformNode", - "m_ObjectId": "a5babea545924715b0ba888ac6373f66", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Transform", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -24.000009536743165, - "y": 594.0, - "width": 211.00003051757813, - "height": 157.0 - } - }, - "m_Slots": [ - { - "m_Id": "789d3c4acdee4777a68a43567cc7de51" - }, - { - "m_Id": "8053f38f7ace4f8c9ae0b53fca131228" - } - ], - "synonyms": [ - "world", - "tangent", - "object", - "view", - "screen", - "convert" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_Conversion": { - "from": 1, - "to": 2 - }, - "m_ConversionType": 1 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", - "m_ObjectId": "a7a558d25384460e8b0995dc9f89165a", - "m_Id": 0, - "m_DisplayName": "A", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "A", - "m_StageCapability": 3, - "m_Value": { - "x": 1.0, - "y": 1.0, - "z": 1.0, - "w": 1.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", - "m_ObjectId": "aa904b9834494fefae0603bbf51a46ae", - "m_Id": 0, - "m_DisplayName": "In", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "In", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "ac5ddd82d3a84a4cbf509ddfe1beb229", - "m_Id": 3, - "m_DisplayName": "A", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "A", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 1, - "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", - "m_ObjectId": "ac709b9b0cc14e26a2611422b499ba45", - "m_Guid": { - "m_GuidSerialized": "fd0f61ba-fe9f-4b6c-a0ab-7f54fec438ab" - }, - "m_Name": "_Smoothness", - "m_DefaultRefNameVersion": 1, - "m_RefNameGeneratedByDisplayName": "_Smoothness", - "m_DefaultReferenceName": "_Smoothness", - "m_OverrideReferenceName": "", - "m_GeneratePropertyBlock": true, - "m_UseCustomSlotLabel": false, - "m_CustomSlotLabel": "", - "m_Precision": 0, - "overrideHLSLDeclaration": false, - "hlslDeclarationOverride": 0, - "m_Hidden": false, - "m_Value": 0.5, - "m_FloatType": 1, - "m_RangeValues": { - "x": 0.0, - "y": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", - "m_ObjectId": "acddb4312eae4453829ee3b01c3b96e1", - "m_Id": 2, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": { - "e00": 0.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 0.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 0.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 0.0 - }, - "m_DefaultValue": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "ae35ddc362bb47d9831f62b11095e69c", - "m_Id": 4, - "m_DisplayName": "A", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "A", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", - "m_ObjectId": "af8c0d42edcd4eda8e6e86de937dbadf", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Multiply", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -5.000051021575928, - "y": 145.00003051757813, - "width": 143.00003051757813, - "height": 117.99993896484375 - } - }, - "m_Slots": [ - { - "m_Id": "eefaca546df646d9bab0a7e8ead8fe9f" - }, - { - "m_Id": "e82eba05d3404e81a4d1193cf676653b" - }, - { - "m_Id": "acddb4312eae4453829ee3b01c3b96e1" - } - ], - "synonyms": [ - "multiplication", - "times", - "x" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "afbbb64c9a7b4d16963c20b5f2af4154", - "m_Id": 0, - "m_DisplayName": "v", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "v", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "b35a3765628d49f69d75dfc77df38114", - "m_Group": { - "m_Id": "" - }, - "m_Name": "VertexDescription.CustomInterpolator", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 547.0, - "y": 88.00001525878906, - "width": 200.0001220703125, - "height": 40.999969482421878 - } - }, - "m_Slots": [ - { - "m_Id": "c81b0a23ef5c4e1bbc194418c1316342" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "VertexDescription.a3#4" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.CustomInterpolatorNode", - "m_ObjectId": "b397b42dfd5342b0b6291c60e22ae6d4", - "m_Group": { - "m_Id": "" - }, - "m_Name": "mapping (Custom Interpolator)", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -787.0000610351563, - "y": 672.0, - "width": 221.0, - "height": 94.0 - } - }, - "m_Slots": [ - { - "m_Id": "94d8bef9ca4146a9bc8013782aa27188" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "customBlockNodeName": "mapping", - "serializedType": 4 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", - "m_ObjectId": "b456d184e007428eb74e555e1d369069", - "m_Id": 0, - "m_DisplayName": "Normal", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "Normal", - "m_StageCapability": 1, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [], - "m_Space": 0 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "b585fdf2c7ce438b8a72c6f452ff31ab", - "m_Group": { - "m_Id": "" - }, - "m_Name": "VertexDescription.CustomInterpolator", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 235.00001525878907, - "y": 189.0, - "width": 199.99989318847657, - "height": 40.99998474121094 - } - }, - "m_Slots": [ - { - "m_Id": "e5ebb82ec44c4baf91e6301f7c8864a9" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "VertexDescription.viewRay#3" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "b61bc63901084fca9804abee48abddfd", - "m_Id": 3, - "m_DisplayName": "B", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "B", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "b7ad4b8143794b239501e5624069fe3e", - "m_Id": 2, - "m_DisplayName": "G", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "G", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "b97286e6cc284c43a67b57f07ce0539b", - "m_Id": 0, - "m_DisplayName": "Alpha", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "Alpha", - "m_StageCapability": 2, - "m_Value": 1.0, - "m_DefaultValue": 1.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "b9f263f81f814659b65ba7c8965c6b7e", - "m_Id": 2, - "m_DisplayName": "a2", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "a2", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.CombineNode", - "m_ObjectId": "babccae7634a4d2090f45aa9e154b2ca", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Combine", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -215.00001525878907, - "y": 266.0, - "width": 140.00001525878907, - "height": 166.0 - } - }, - "m_Slots": [ - { - "m_Id": "f4036022b00d4f13bf8f03f2b55d5b41" - }, - { - "m_Id": "d49b15aa5cf746cf954a2b46e033e76d" - }, - { - "m_Id": "79ab31681e3e419183510b2fa4f09f6a" - }, - { - "m_Id": "ac5ddd82d3a84a4cbf509ddfe1beb229" - }, - { - "m_Id": "c6fd8c5c8cf744a58bb4efca3dab998f" - }, - { - "m_Id": "08351f97eeea4b6485b39a61a65a3fe8" - }, - { - "m_Id": "619732196dbf41f6a0e7b1174688f54c" - } - ], - "synonyms": [ - "append" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicMatrixMaterialSlot", - "m_ObjectId": "bfadf92d913d48b88b7911b3bf4952ba", - "m_Id": 1, - "m_DisplayName": "", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "", - "m_StageCapability": 3, - "m_Value": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - }, - "m_DefaultValue": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", - "m_ObjectId": "c1114c7b3db74f0da0e27c4938d3b793", - "m_Id": 0, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 2, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.RedirectNodeData", - "m_ObjectId": "c6116508eb7246469fe9c6ae81460410", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Redirect Node", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -426.00006103515627, - "y": 864.9999389648438, - "width": 56.000030517578128, - "height": 24.00006103515625 - } - }, - "m_Slots": [ - { - "m_Id": "53f213ac70a7461ab7fb3813e00bb7f6" - }, - { - "m_Id": "74076c4a517f4a9bb9273882b00b51a6" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", - "m_ObjectId": "c6fd8c5c8cf744a58bb4efca3dab998f", - "m_Id": 4, - "m_DisplayName": "RGBA", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "RGBA", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", - "m_ObjectId": "c81b0a23ef5c4e1bbc194418c1316342", - "m_Id": 0, - "m_DisplayName": "a3", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "a3", - "m_StageCapability": 1, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Matrix3MaterialSlot", - "m_ObjectId": "cd294f26621f499cb86c60132cc4143c", - "m_Id": 0, - "m_DisplayName": "P", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "P", - "m_StageCapability": 3, - "m_Value": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - }, - "m_DefaultValue": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", - "m_ObjectId": "ce61c417fb924d9098ede6f08e533041", - "m_Id": 1, - "m_DisplayName": "B", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "B", - "m_StageCapability": 3, - "m_Value": { - "x": 1.0, - "y": 1.0, - "z": 1.0, - "w": 1.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "ce9414174ca54d1293c032bb45fac6a3", - "m_Id": 5, - "m_DisplayName": "eyeNormal", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "eyeNormal", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "cf2c0d4033c24443b7c21cb036226b3f", - "m_Group": { - "m_Id": "" - }, - "m_Name": "SurfaceDescription.Emission", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 0.0, - "y": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "m_Slots": [ - { - "m_Id": "61c80ef969694adf838815d13bc5cd67" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "SurfaceDescription.Emission" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "d068f1207b3340f6a006284eb45ddb8b", - "m_Id": 4, - "m_DisplayName": "eyePos", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "eyePos", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", - "m_ObjectId": "d08d226deab44224a9c127e0838da1ec", - "m_Id": 0, - "m_DisplayName": "Normal (World Space)", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "NormalWS", - "m_StageCapability": 2, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [], - "m_Space": 2 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "d11f8fd02e364ad5b8eadd3550fa2851", - "m_Group": { - "m_Id": "" - }, - "m_Name": "SurfaceDescription.Metallic", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 0.0, - "y": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "m_Slots": [ - { - "m_Id": "1f4c9820a5b244deb7bd8e2bf0aa5270" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "SurfaceDescription.Metallic" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "d3003457079944b499113867ead39439", - "m_Id": 5, - "m_DisplayName": "radiusScale", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "radiusScale", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "d49b15aa5cf746cf954a2b46e033e76d", - "m_Id": 1, - "m_DisplayName": "G", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "G", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "d5ab07535b904d6c95b72aefdd4d8ccd", - "m_Id": 2, - "m_DisplayName": "G", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "G", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", - "m_ObjectId": "d9e1566528a04795a93b9222cfe9b841", - "m_Id": 0, - "m_DisplayName": "In", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "In", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "db6f119a98ed4aee872e15302095fbfb", - "m_Id": 0, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 2, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "dba07545e112449c9e6450b20a948fe0", - "m_Id": 0, - "m_DisplayName": "Smoothness", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "Smoothness", - "m_StageCapability": 2, - "m_Value": 0.0, - "m_DefaultValue": 0.5, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDLitData", - "m_ObjectId": "de8e93dbd1744203a66905de95755eec", - "m_RayTracing": false, - "m_MaterialType": 0, - "m_RefractionModel": 0, - "m_SSSTransmission": true, - "m_EnergyConservingSpecular": true, - "m_ClearCoat": false -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "dfd25b2a19df42beba356ef0e5e0b3be", - "m_Group": { - "m_Id": "" - }, - "m_Name": "SurfaceDescription.AlphaClipThreshold", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 0.0, - "y": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "m_Slots": [ - { - "m_Id": "f73cd7a7841243ac96286fd2afaf7862" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "SurfaceDescription.AlphaClipThreshold" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "dffaa900d1d04a7db60ef0ccab276839", - "m_Group": { - "m_Id": "" - }, - "m_Name": "SurfaceDescription.Smoothness", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 0.0, - "y": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "m_Slots": [ - { - "m_Id": "dba07545e112449c9e6450b20a948fe0" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "SurfaceDescription.Smoothness" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "e09a4f7448b74893a9745d1625d39a19", - "m_Id": 0, - "m_DisplayName": "_RadiusScale", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "e17c109ffbe942c89e40ff95cd1cfd7a", - "m_Group": { - "m_Id": "" - }, - "m_Name": "VertexDescription.Tangent", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 0.0, - "y": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "m_Slots": [ - { - "m_Id": "41c7519efb9a45fb85dcded2b16d584d" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "VertexDescription.Tangent" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.CustomInterpolatorNode", - "m_ObjectId": "e185f6e703b749569fec95035ae86e44", - "m_Group": { - "m_Id": "" - }, - "m_Name": "viewRay (Custom Interpolator)", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -790.0000610351563, - "y": 576.0, - "width": 219.0, - "height": 94.0 - } - }, - "m_Slots": [ - { - "m_Id": "db6f119a98ed4aee872e15302095fbfb" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "customBlockNodeName": "viewRay", - "serializedType": 3 -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", - "m_ObjectId": "e27b00a5d6b8496e888b33ff61e843e3", - "m_Id": 2, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": { - "e00": 0.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 0.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 0.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 0.0 - }, - "m_DefaultValue": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Matrix3MaterialSlot", - "m_ObjectId": "e3ffd102837b43d98258c9830c869bff", - "m_Id": 3, - "m_DisplayName": "P", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "P", - "m_StageCapability": 3, - "m_Value": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - }, - "m_DefaultValue": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.PropertyNode", - "m_ObjectId": "e445db0b154846179887a9470ff3aa66", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Property", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": -1906.9998779296875, - "y": 331.0, - "width": 143.9998779296875, - "height": 33.999969482421878 - } - }, - "m_Slots": [ - { - "m_Id": "e09a4f7448b74893a9745d1625d39a19" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_Property": { - "m_Id": "22b23a850ca345f6b5b35205f12039ae" - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot", - "m_ObjectId": "e5ebb82ec44c4baf91e6301f7c8864a9", - "m_Id": 0, - "m_DisplayName": "viewRay", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "viewRay", - "m_StageCapability": 1, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "e716e7c9ae6e45278a7d746d0a1da856", - "m_Id": 1, - "m_DisplayName": "Out", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", - "m_ObjectId": "e82eba05d3404e81a4d1193cf676653b", - "m_Id": 1, - "m_DisplayName": "B", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "B", - "m_StageCapability": 3, - "m_Value": { - "e00": 2.0, - "e01": 2.0, - "e02": 2.0, - "e03": 2.0, - "e10": 2.0, - "e11": 2.0, - "e12": 2.0, - "e13": 2.0, - "e20": 2.0, - "e21": 2.0, - "e22": 2.0, - "e23": 2.0, - "e30": 2.0, - "e31": 2.0, - "e32": 2.0, - "e33": 2.0 - }, - "m_DefaultValue": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "e94b4e133a134411aa01241421f711cb", - "m_Group": { - "m_Id": "" - }, - "m_Name": "SurfaceDescription.Alpha", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 0.0, - "y": 0.0, - "width": 0.0, - "height": 0.0 - } - }, - "m_Slots": [ - { - "m_Id": "b97286e6cc284c43a67b57f07ce0539b" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "SurfaceDescription.Alpha" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "ea691d98931f4db5b57fa9074c8ac113", - "m_Id": 4, - "m_DisplayName": "A", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "A", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", - "m_ObjectId": "ec49096fac914af0a3faddf1feb3953c", - "m_Id": 0, - "m_DisplayName": "_ParticleColor", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "Out", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.BlockNode", - "m_ObjectId": "ee946d6d4c7c4cb1b920e447bb01d580", - "m_Group": { - "m_Id": "" - }, - "m_Name": "SurfaceDescription.DepthOffset", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 546.0, - "y": 732.0, - "width": 200.0, - "height": 41.0 - } - }, - "m_Slots": [ - { - "m_Id": "0a65b1a8a9cc4d26aa3d5676905379a0" - } - ], - "synonyms": [], - "m_Precision": 0, - "m_PreviewExpanded": true, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - }, - "m_SerializedDescriptor": "SurfaceDescription.DepthOffset" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", - "m_ObjectId": "eefaca546df646d9bab0a7e8ead8fe9f", - "m_Id": 0, - "m_DisplayName": "A", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "A", - "m_StageCapability": 3, - "m_Value": { - "e00": 0.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 0.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 0.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 0.0 - }, - "m_DefaultValue": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", - "m_ObjectId": "ef8a1c0804ec4253ad73c319031bec6e", - "m_Id": 1, - "m_DisplayName": "", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", - "m_ObjectId": "f14b3173a44b48f1a3ab3e787ab15403", - "m_Id": 0, - "m_DisplayName": "mapping", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "mapping", - "m_StageCapability": 1, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", - "m_ObjectId": "f30fd08bbcc74a6198fb279d65f82696", - "m_Id": 1, - "m_DisplayName": "mapping", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "mapping", - "m_StageCapability": 3, - "m_Value": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_DefaultValue": { - "x": 0.0, - "y": 0.0, - "z": 0.0, - "w": 0.0 - }, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "f4036022b00d4f13bf8f03f2b55d5b41", - "m_Id": 0, - "m_DisplayName": "R", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "R", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "f50f51a906cb44dcbc8403263a8cfa32", - "m_Id": 7, - "m_DisplayName": "clipThreshold", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "clipThreshold", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.SubtractNode", - "m_ObjectId": "f5da1c6b4af04e169c2dce3319f17d13", - "m_Group": { - "m_Id": "" - }, - "m_Name": "Subtract", - "m_DrawState": { - "m_Expanded": true, - "m_Position": { - "serializedVersion": "2", - "x": 63.999977111816409, - "y": 877.0, - "width": 126.00000762939453, - "height": 118.00006103515625 - } - }, - "m_Slots": [ - { - "m_Id": "a7a558d25384460e8b0995dc9f89165a" - }, - { - "m_Id": "ce61c417fb924d9098ede6f08e533041" - }, - { - "m_Id": "51b895e1b64e43529095cc44fc769771" - } - ], - "synonyms": [ - "subtraction", - "remove", - "minus", - "take away" - ], - "m_Precision": 0, - "m_PreviewExpanded": false, - "m_PreviewMode": 0, - "m_CustomColors": { - "m_SerializableColors": [] - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDLitSubTarget", - "m_ObjectId": "f63f238dcaed45b9859faec9503ae798" -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.DynamicMatrixMaterialSlot", - "m_ObjectId": "f66158b6241342c88d2a4991233e93a8", - "m_Id": 0, - "m_DisplayName": "", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "", - "m_StageCapability": 3, - "m_Value": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - }, - "m_DefaultValue": { - "e00": 1.0, - "e01": 0.0, - "e02": 0.0, - "e03": 0.0, - "e10": 0.0, - "e11": 1.0, - "e12": 0.0, - "e13": 0.0, - "e20": 0.0, - "e21": 0.0, - "e22": 1.0, - "e23": 0.0, - "e30": 0.0, - "e31": 0.0, - "e32": 0.0, - "e33": 1.0 - } -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "f73cd7a7841243ac96286fd2afaf7862", - "m_Id": 0, - "m_DisplayName": "Alpha Clip Threshold", - "m_SlotType": 0, - "m_Hidden": false, - "m_ShaderOutputName": "AlphaClipThreshold", - "m_StageCapability": 2, - "m_Value": 0.5, - "m_DefaultValue": 0.5, - "m_Labels": [] -} - -{ - "m_SGVersion": 0, - "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", - "m_ObjectId": "feae803029f141b7b77576f65de3f361", - "m_Id": 1, - "m_DisplayName": "R", - "m_SlotType": 1, - "m_Hidden": false, - "m_ShaderOutputName": "R", - "m_StageCapability": 3, - "m_Value": 0.0, - "m_DefaultValue": 0.0, - "m_Labels": [] -} - diff --git a/Assets/Obi/Resources/ObiMaterials/Common/ParticleShader.shadergraph.meta b/Assets/Obi/Resources/ObiMaterials/Common/ParticleShader.shadergraph.meta deleted file mode 100644 index 59a0a5bc9..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/ParticleShader.shadergraph.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 99a2f8857960c44ca980d85023572447 -ScriptedImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 2 - userData: - assetBundleName: - assetBundleVariant: - script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} diff --git a/Assets/Obi/Resources/ObiMaterials/Common/Particles.mat b/Assets/Obi/Resources/ObiMaterials/Common/Particles.mat deleted file mode 100644 index 36b8a4cce..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/Particles.mat +++ /dev/null @@ -1,204 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &-5466045192948715276 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 639247ca83abc874e893eb93af2b5e44, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 0 ---- !u!114 &-4382110247035737841 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 10 ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: Particles - m_Shader: {fileID: -6465566751694194690, guid: 99a2f8857960c44ca980d85023572447, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - _DEPTHOFFSET_ON - - _DISABLE_DECALS - - _DISABLE_SSR_TRANSPARENT - m_InvalidKeywords: - - _EMISSION - m_LightmapFlags: 3 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2000 - stringTagMap: - MotionVector: User - disabledShaderPasses: - - MOTIONVECTORS - - TransparentDepthPrepass - - TransparentDepthPostpass - - TransparentBackface - - RayTracingPrepass - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 10300, guid: 0000000000000000f000000000000000, type: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaCutoffEnable: 0 - - _AlphaDstBlend: 0 - - _AlphaSrcBlend: 1 - - _BUILTIN_QueueControl: 0 - - _BUILTIN_QueueOffset: 0 - - _BlendMode: 0 - - _BumpScale: 1 - - _ConservativeDepthOffsetEnable: 0 - - _CullMode: 2 - - _CullModeForward: 2 - - _Cutoff: 0.5 - - _DepthOffsetEnable: 1 - - _DetailNormalMapScale: 1 - - _DoubleSidedEnable: 0 - - _DoubleSidedGIMode: 0 - - _DoubleSidedNormalMode: 2 - - _DstBlend: 0 - - _DstBlend2: 0 - - _EnableBlendModePreserveSpecularLighting: 1 - - _EnableFogOnTransparent: 1 - - _ExcludeFromTUAndAA: 0 - - _Glossiness: 0.5 - - _InvFade: 1 - - _MaterialID: 1 - - _MaterialTypeMask: 2 - - _Metallic: 0 - - _Mode: 0 - - _OcclusionStrength: 1 - - _OpaqueCullMode: 2 - - _Parallax: 0.02 - - _PerPixelSorting: 0 - - _QueueControl: 0 - - _QueueOffset: 0 - - _RadiusScale: 1 - - _RayTracing: 0 - - _ReceivesSSR: 1 - - _ReceivesSSRTransparent: 0 - - _RefractionModel: 0 - - _RenderQueueType: 1 - - _RequireSplitLighting: 0 - - _Smoothness: 0.6 - - _SrcBlend: 1 - - _StencilRef: 0 - - _StencilRefDepth: 8 - - _StencilRefDistortionVec: 4 - - _StencilRefGBuffer: 10 - - _StencilRefMV: 40 - - _StencilWriteMask: 6 - - _StencilWriteMaskDepth: 9 - - _StencilWriteMaskDistortionVec: 4 - - _StencilWriteMaskGBuffer: 15 - - _StencilWriteMaskMV: 41 - - _SupportDecals: 0 - - _SurfaceType: 0 - - _TransmissionEnable: 1 - - _TransparentBackfaceEnable: 0 - - _TransparentCullMode: 2 - - _TransparentDepthPostpassEnable: 0 - - _TransparentDepthPrepassEnable: 0 - - _TransparentSortPriority: 0 - - _TransparentWritingMotionVec: 0 - - _TransparentZWrite: 0 - - _UVSec: 0 - - _UseShadowThreshold: 0 - - _ZTestDepthEqualForOpaque: 3 - - _ZTestGBuffer: 4 - - _ZTestTransparent: 4 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} - - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} - - _ParticleColor: {r: 1, g: 1, b: 1, a: 0} - - _TintColor: {r: 0.5, g: 0.5, b: 0.5, a: 0.5} - m_BuildTextureStacks: [] - m_AllowLocking: 1 ---- !u!114 &6540803106207709527 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.RenderPipelines.HighDefinition.Editor::UnityEditor.Rendering.HighDefinition.AssetVersion - version: 13 - hdPluginSubTargetMaterialVersions: - m_Keys: [] - m_Values: diff --git a/Assets/Obi/Resources/ObiMaterials/Common/Particles.mat.meta b/Assets/Obi/Resources/ObiMaterials/Common/Particles.mat.meta deleted file mode 100644 index c30f265c0..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/Particles.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: fb88690dea2394644849cde5abd037f9 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/ObiMaterials/Common/particle.png b/Assets/Obi/Resources/ObiMaterials/Common/particle.png deleted file mode 100644 index 1eea413c7..000000000 Binary files a/Assets/Obi/Resources/ObiMaterials/Common/particle.png and /dev/null differ diff --git a/Assets/Obi/Resources/ObiMaterials/Common/particle.png.meta b/Assets/Obi/Resources/ObiMaterials/Common/particle.png.meta deleted file mode 100644 index 7fc10cacb..000000000 --- a/Assets/Obi/Resources/ObiMaterials/Common/particle.png.meta +++ /dev/null @@ -1,59 +0,0 @@ -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/Assets/Obi/Resources/ObiMaterials/DistanceFields.meta b/Assets/Obi/Resources/ObiMaterials/DistanceFields.meta deleted file mode 100644 index bbfbc4174..000000000 --- a/Assets/Obi/Resources/ObiMaterials/DistanceFields.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: aacd9fe47bf4d416d883fd99066cf37e -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldRendering.mat b/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldRendering.mat deleted file mode 100644 index 5ba513509..000000000 Binary files a/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldRendering.mat and /dev/null differ diff --git a/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldRendering.mat.meta b/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldRendering.mat.meta deleted file mode 100644 index 51f5da284..000000000 --- a/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldRendering.mat.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: f6bf1245292ed43c78875db43ca1aad3 -timeCreated: 1515780549 -licenseType: Store -NativeFormatImporter: - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldSlice.shader b/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldSlice.shader deleted file mode 100644 index cbcc6f961..000000000 --- a/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldSlice.shader +++ /dev/null @@ -1,66 +0,0 @@ -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/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldSlice.shader.meta b/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldSlice.shader.meta deleted file mode 100644 index e48de3bb9..000000000 --- a/Assets/Obi/Resources/ObiMaterials/DistanceFields/DistanceFieldSlice.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 8447096d1e8064b37939be221dd9afb5 -timeCreated: 1515783007 -licenseType: Store -ShaderImporter: - defaultTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples.meta b/Assets/Obi/Samples.meta deleted file mode 100644 index 086e2007c..000000000 --- a/Assets/Obi/Samples.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 3a2242974391642bcb80ee2090380780 -folderAsset: yes -timeCreated: 1435569439 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common.meta b/Assets/Obi/Samples/Common.meta deleted file mode 100644 index 7f1f79bf4..000000000 --- a/Assets/Obi/Samples/Common.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: db16dd818bde540c6a87fa0d2863c26a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources.meta b/Assets/Obi/Samples/Common/SampleResources.meta deleted file mode 100644 index 34abbc2c8..000000000 --- a/Assets/Obi/Samples/Common/SampleResources.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: dbcc2a84318854b0096382cb83b32e9f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations.meta b/Assets/Obi/Samples/Common/SampleResources/Animations.meta deleted file mode 100644 index 9ccfd3f01..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Animations.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 00e8d42e857fb4adcb53914d0948b16c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim b/Assets/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim deleted file mode 100644 index c85c9599d..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim.meta b/Assets/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim.meta deleted file mode 100644 index af40a9d24..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Animations/FanHorizontal.anim.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8e33f749f1d024f159aa5cae7a502d72 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 7400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/FanRoot.controller b/Assets/Obi/Samples/Common/SampleResources/Animations/FanRoot.controller deleted file mode 100644 index 614923daa..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Animations/FanRoot.controller and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/FanRoot.controller.meta b/Assets/Obi/Samples/Common/SampleResources/Animations/FanRoot.controller.meta deleted file mode 100644 index 3ec02df0b..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Animations/FanRoot.controller.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 07415f30e4149416b920c1da07bdc3b7 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 9100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidCrouch.fbx b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidCrouch.fbx deleted file mode 100644 index 6bbd1c368..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidCrouch.fbx and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidCrouch.fbx.meta b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidCrouch.fbx.meta deleted file mode 100644 index a307593f6..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidCrouch.fbx.meta +++ /dev/null @@ -1,1606 +0,0 @@ -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/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdle.fbx b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdle.fbx deleted file mode 100644 index 4ae25cb2e..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdle.fbx and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdle.fbx.meta b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdle.fbx.meta deleted file mode 100644 index 64095f575..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdle.fbx.meta +++ /dev/null @@ -1,2376 +0,0 @@ -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/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdleJumpUp.fbx b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdleJumpUp.fbx deleted file mode 100644 index 46919337f..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdleJumpUp.fbx and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdleJumpUp.fbx.meta b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdleJumpUp.fbx.meta deleted file mode 100644 index 77ccf6a46..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidIdleJumpUp.fbx.meta +++ /dev/null @@ -1,3389 +0,0 @@ -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/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidJumpAndFall.fbx b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidJumpAndFall.fbx deleted file mode 100644 index 419e2d788..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidJumpAndFall.fbx and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidJumpAndFall.fbx.meta b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidJumpAndFall.fbx.meta deleted file mode 100644 index e56742994..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidJumpAndFall.fbx.meta +++ /dev/null @@ -1,2262 +0,0 @@ -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/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidMidAir.fbx b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidMidAir.fbx deleted file mode 100644 index 80f6e2408..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidMidAir.fbx and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidMidAir.fbx.meta b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidMidAir.fbx.meta deleted file mode 100644 index 15d8aea00..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidMidAir.fbx.meta +++ /dev/null @@ -1,2641 +0,0 @@ -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/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRun.fbx b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRun.fbx deleted file mode 100644 index 72673a5ba..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRun.fbx and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRun.fbx.meta b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRun.fbx.meta deleted file mode 100644 index 301b3af29..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRun.fbx.meta +++ /dev/null @@ -1,2814 +0,0 @@ -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/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurn.fbx b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurn.fbx deleted file mode 100644 index d115096f8..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurn.fbx and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurn.fbx.meta b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurn.fbx.meta deleted file mode 100644 index 1bba047aa..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurn.fbx.meta +++ /dev/null @@ -1,2467 +0,0 @@ -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/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurnSharp.fbx b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurnSharp.fbx deleted file mode 100644 index 943fd1bc4..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurnSharp.fbx and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurnSharp.fbx.meta b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurnSharp.fbx.meta deleted file mode 100644 index 38843bb5f..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidRunTurnSharp.fbx.meta +++ /dev/null @@ -1,2402 +0,0 @@ -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/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidStandTurn.fbx b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidStandTurn.fbx deleted file mode 100644 index ec67bcdd7..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidStandTurn.fbx and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidStandTurn.fbx.meta b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidStandTurn.fbx.meta deleted file mode 100644 index 06779db0c..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidStandTurn.fbx.meta +++ /dev/null @@ -1,2922 +0,0 @@ -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/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalk.fbx b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalk.fbx deleted file mode 100644 index 7f7a2c5b3..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalk.fbx and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalk.fbx.meta b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalk.fbx.meta deleted file mode 100644 index 9a171ad57..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalk.fbx.meta +++ /dev/null @@ -1,2358 +0,0 @@ -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/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurn.fbx b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurn.fbx deleted file mode 100644 index 1a84a3dd7..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurn.fbx and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurn.fbx.meta b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurn.fbx.meta deleted file mode 100644 index e961c46db..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurn.fbx.meta +++ /dev/null @@ -1,2390 +0,0 @@ -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/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurnSharp.fbx b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurnSharp.fbx deleted file mode 100644 index 39425acdc..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurnSharp.fbx and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurnSharp.fbx.meta b/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurnSharp.fbx.meta deleted file mode 100644 index e677c2921..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Animations/HumanoidWalkTurnSharp.fbx.meta +++ /dev/null @@ -1,2390 +0,0 @@ -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/Assets/Obi/Samples/Common/SampleResources/Animations/ThirdPersonAnimatorController.controller b/Assets/Obi/Samples/Common/SampleResources/Animations/ThirdPersonAnimatorController.controller deleted file mode 100644 index 965c0ae0b..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Animations/ThirdPersonAnimatorController.controller and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Animations/ThirdPersonAnimatorController.controller.meta b/Assets/Obi/Samples/Common/SampleResources/Animations/ThirdPersonAnimatorController.controller.meta deleted file mode 100644 index 34026eb95..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Animations/ThirdPersonAnimatorController.controller.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: e2cf68ff4b1ffda45a77f7307dd789b9 -labels: -- ObiCloth -- ObiRope -- ObiSoftbody -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: -1 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials.meta b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials.meta deleted file mode 100644 index 547884542..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: bb188f7223e6b4a96972d88b44925c5e -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/CharacterFriction.physicMaterial b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/CharacterFriction.physicMaterial deleted file mode 100644 index 5e7fcf005..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/CharacterFriction.physicMaterial and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/CharacterFriction.physicMaterial.meta b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/CharacterFriction.physicMaterial.meta deleted file mode 100644 index d68cc5812..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/CharacterFriction.physicMaterial.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 0d242f91ab1d749a8b6230e6da662881 -timeCreated: 1501142792 -licenseType: Store -NativeFormatImporter: - mainObjectFileID: 13400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighFriction.asset b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighFriction.asset deleted file mode 100644 index 9dde380f9..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighFriction.asset and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighFriction.asset.meta b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighFriction.asset.meta deleted file mode 100644 index 656b100b7..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighFriction.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 56297c6e785b44eb28e469b62cedc016 -timeCreated: 1453427102 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighStaticFriction.asset b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighStaticFriction.asset deleted file mode 100644 index 84ad00850..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighStaticFriction.asset and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighStaticFriction.asset.meta b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighStaticFriction.asset.meta deleted file mode 100644 index 19d15df95..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/HighStaticFriction.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f7532232f07594be3a36470e25b47b4f -timeCreated: 1453427100 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/Ice.asset b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/Ice.asset deleted file mode 100644 index aa74b979f..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/Ice.asset and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/Ice.asset.meta b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/Ice.asset.meta deleted file mode 100644 index 72bbb0b53..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/Ice.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7e318fd02475245f48f8f968e5ef09d5 -timeCreated: 1445311398 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/LowFriction.asset b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/LowFriction.asset deleted file mode 100644 index ebcdbfb14..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/LowFriction.asset and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/LowFriction.asset.meta b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/LowFriction.asset.meta deleted file mode 100644 index 621c0f4d8..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/LowFriction.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b231b678223e044588ce32ebccbe77f3 -timeCreated: 1453427100 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/MediumFriction.asset b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/MediumFriction.asset deleted file mode 100644 index c363106f0..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/MediumFriction.asset and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/MediumFriction.asset.meta b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/MediumFriction.asset.meta deleted file mode 100644 index a03fa974b..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/MediumFriction.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d368f2c47473d4bfb8dd9f08073cb403 -timeCreated: 1445322891 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFriction.asset b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFriction.asset deleted file mode 100644 index 9a88cf247..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFriction.asset and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFriction.asset.meta b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFriction.asset.meta deleted file mode 100644 index 4411711b2..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFriction.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e17a5bb573d9748ac8e836ddee291602 -timeCreated: 1453427102 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFrictionSmoke.asset b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFrictionSmoke.asset deleted file mode 100644 index bb370aa03..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFrictionSmoke.asset and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFrictionSmoke.asset.meta b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFrictionSmoke.asset.meta deleted file mode 100644 index 3dff32bfc..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/RollingFrictionSmoke.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: bb309543303c94a32b84f20d84389f76 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/VerySticky.asset b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/VerySticky.asset deleted file mode 100644 index ae7b2e824..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/VerySticky.asset and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/VerySticky.asset.meta b/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/VerySticky.asset.meta deleted file mode 100644 index d763a6c2c..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/CollisionMaterials/VerySticky.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 06e7bfec7795f448eb8800edc99dbcf2 -timeCreated: 1453443046 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/DistanceFields.meta b/Assets/Obi/Samples/Common/SampleResources/DistanceFields.meta deleted file mode 100644 index a45a0fdb0..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/DistanceFields.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 650750a778b8848c4ab561d23f15012e -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/DistanceFields/EnvironmentDF.asset b/Assets/Obi/Samples/Common/SampleResources/DistanceFields/EnvironmentDF.asset deleted file mode 100644 index 92a5ea3db..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/DistanceFields/EnvironmentDF.asset and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/DistanceFields/EnvironmentDF.asset.meta b/Assets/Obi/Samples/Common/SampleResources/DistanceFields/EnvironmentDF.asset.meta deleted file mode 100644 index 983d96e2f..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/DistanceFields/EnvironmentDF.asset.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 5eb5ff1af3a3f4a14977448198c232ae -timeCreated: 1507047323 -licenseType: Store -NativeFormatImporter: - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Materials.meta b/Assets/Obi/Samples/Common/SampleResources/Materials.meta deleted file mode 100644 index f9973a1c7..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Materials.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e71b9a406d7f848ceaaf698a595823f5 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Materials/Checker.mat b/Assets/Obi/Samples/Common/SampleResources/Materials/Checker.mat deleted file mode 100644 index 7c309c13e..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Materials/Checker.mat and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Materials/Checker.mat.meta b/Assets/Obi/Samples/Common/SampleResources/Materials/Checker.mat.meta deleted file mode 100644 index be9b10c56..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Materials/Checker.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 359ef2e4b09204eeab112e419c308068 -timeCreated: 1435572264 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Materials/CoarseChecker.mat b/Assets/Obi/Samples/Common/SampleResources/Materials/CoarseChecker.mat deleted file mode 100644 index a5d284319..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Materials/CoarseChecker.mat and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Materials/CoarseChecker.mat.meta b/Assets/Obi/Samples/Common/SampleResources/Materials/CoarseChecker.mat.meta deleted file mode 100644 index ffff85c24..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Materials/CoarseChecker.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e78e1b735e05b4dee88b279cb6997001 -timeCreated: 1435572264 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Materials/FinishLine.mat b/Assets/Obi/Samples/Common/SampleResources/Materials/FinishLine.mat deleted file mode 100644 index a9c509a6c..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Materials/FinishLine.mat and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Materials/FinishLine.mat.meta b/Assets/Obi/Samples/Common/SampleResources/Materials/FinishLine.mat.meta deleted file mode 100644 index 4034ef324..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Materials/FinishLine.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d3b93997453834b97a4e8f3df52e1068 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Materials/Flesh.mat b/Assets/Obi/Samples/Common/SampleResources/Materials/Flesh.mat deleted file mode 100644 index 3ff35df3e..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Materials/Flesh.mat and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Materials/Flesh.mat.meta b/Assets/Obi/Samples/Common/SampleResources/Materials/Flesh.mat.meta deleted file mode 100644 index 1f653d94b..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Materials/Flesh.mat.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5c0346dbcbacd4648bec909deff79751 -labels: -- ObiRope -- ObiSoftbody -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Materials/Metal.mat b/Assets/Obi/Samples/Common/SampleResources/Materials/Metal.mat deleted file mode 100644 index fefa09bc1..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Materials/Metal.mat and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Materials/Metal.mat.meta b/Assets/Obi/Samples/Common/SampleResources/Materials/Metal.mat.meta deleted file mode 100644 index f70fa93a7..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Materials/Metal.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 278487642d12d4bf78416679d50d6fd7 -timeCreated: 1466469210 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Materials/TestEnvironment.mat b/Assets/Obi/Samples/Common/SampleResources/Materials/TestEnvironment.mat deleted file mode 100644 index 9bcd28ea3..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Materials/TestEnvironment.mat +++ /dev/null @@ -1,141 +0,0 @@ -%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: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - _EMISSION - - _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A - m_InvalidKeywords: [] - m_LightmapFlags: 7 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS - m_LockedProperties: - 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} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _DstBlendAlpha: 0 - - _EnvironmentReflections: 1 - - _GlossMapScale: 0.5 - - _Glossiness: 0.5 - - _GlossyReflections: 1 - - _Metallic: 0 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.5 - - _SmoothnessTextureChannel: 1 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - - _UVSec: 0 - - _WorkflowMode: 1 - - _XRMotionVectorsPass: 1 - - _ZWrite: 1 - m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _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: [] - m_AllowLocking: 1 ---- !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: 10 diff --git a/Assets/Obi/Samples/Common/SampleResources/Materials/TestEnvironment.mat.meta b/Assets/Obi/Samples/Common/SampleResources/Materials/TestEnvironment.mat.meta deleted file mode 100644 index 9a0de1c18..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Materials/TestEnvironment.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a0a5f9e13fa7c47f78547e54896609da -timeCreated: 1483094905 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Materials/VertexColors.mat b/Assets/Obi/Samples/Common/SampleResources/Materials/VertexColors.mat deleted file mode 100644 index feb574eef..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Materials/VertexColors.mat and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Materials/VertexColors.mat.meta b/Assets/Obi/Samples/Common/SampleResources/Materials/VertexColors.mat.meta deleted file mode 100644 index ac38677a1..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Materials/VertexColors.mat.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f342c944c10cc4c9188a4f352c6a6eee -labels: -- ObiCloth -- ObiRope -- ObiSoftbody -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: -1 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Materials/Walls.mat b/Assets/Obi/Samples/Common/SampleResources/Materials/Walls.mat deleted file mode 100644 index 891143d1c..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Materials/Walls.mat and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Materials/Walls.mat.meta b/Assets/Obi/Samples/Common/SampleResources/Materials/Walls.mat.meta deleted file mode 100644 index 5a66eb87b..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Materials/Walls.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 22451ea3bd268401796b02a7b7573725 -timeCreated: 1440011158 -licenseType: Store -NativeFormatImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Models.meta b/Assets/Obi/Samples/Common/SampleResources/Models.meta deleted file mode 100644 index 4d494cf0f..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Models.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 11970e9494e804ccfac6c6fb46ab223c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Models/CubicSphere.fbx b/Assets/Obi/Samples/Common/SampleResources/Models/CubicSphere.fbx deleted file mode 100644 index 63cb26c54..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Models/CubicSphere.fbx and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Models/CubicSphere.fbx.meta b/Assets/Obi/Samples/Common/SampleResources/Models/CubicSphere.fbx.meta deleted file mode 100644 index 459e02ea1..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Models/CubicSphere.fbx.meta +++ /dev/null @@ -1,80 +0,0 @@ -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/Assets/Obi/Samples/Common/SampleResources/Models/Fan.fbx b/Assets/Obi/Samples/Common/SampleResources/Models/Fan.fbx deleted file mode 100644 index 77ab5dd52..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Models/Fan.fbx and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Models/Fan.fbx.meta b/Assets/Obi/Samples/Common/SampleResources/Models/Fan.fbx.meta deleted file mode 100644 index cd9a62c9d..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Models/Fan.fbx.meta +++ /dev/null @@ -1,171 +0,0 @@ -fileFormatVersion: 2 -guid: 89e24673c05344d179c516868eb341b8 -ModelImporter: - serializedVersion: 21202 - internalIDToNameTable: - - first: - 1: 100000 - second: //RootNode - - first: - 1: 100002 - second: pCube2 - - first: - 1: 100004 - second: pCube3 - - first: - 1: 100006 - second: pCube4 - - first: - 1: 100008 - second: pCylinder1 - - first: - 4: 400000 - second: //RootNode - - first: - 4: 400002 - second: pCube2 - - first: - 4: 400004 - second: pCube3 - - first: - 4: 400006 - second: pCube4 - - first: - 4: 400008 - second: pCylinder1 - - first: - 23: 2300000 - second: pCube2 - - first: - 23: 2300002 - second: pCube3 - - first: - 23: 2300004 - second: pCube4 - - first: - 23: 2300006 - second: pCylinder1 - - first: - 33: 3300000 - second: pCube2 - - first: - 33: 3300002 - second: pCube3 - - first: - 33: 3300004 - second: pCube4 - - first: - 33: 3300006 - second: pCylinder1 - - first: - 43: 4300000 - second: pCylinder1 - - first: - 43: 4300002 - second: pCube2 - - first: - 43: 4300004 - second: pCube3 - - first: - 43: 4300006 - second: pCube4 - externalObjects: {} - materials: - materialImportMode: 0 - materialName: 0 - materialSearch: 1 - materialLocation: 0 - animations: - legacyGenerateAnimations: 4 - bakeSimulation: 0 - resampleCurves: 1 - optimizeGameObjects: 0 - removeConstantScaleCurves: 0 - motionNodeName: - rigImportErrors: - rigImportWarnings: - animationImportErrors: - animationImportWarnings: - animationRetargetingWarnings: - animationDoRetargetingWarnings: 0 - importAnimatedCustomProperties: 0 - importConstraints: 0 - animationCompression: 1 - animationRotationError: 0.5 - animationPositionError: 0.5 - animationScaleError: 0.5 - animationWrapMode: 0 - extraExposedTransformPaths: [] - extraUserProperties: [] - clipAnimations: [] - isReadable: 1 - meshes: - lODScreenPercentages: [] - globalScale: 40 - meshCompression: 0 - addColliders: 0 - useSRGBMaterialColor: 1 - sortHierarchyByName: 1 - importVisibility: 0 - importBlendShapes: 1 - importCameras: 0 - importLights: 0 - nodeNameCollisionStrategy: 0 - fileIdsGeneration: 1 - swapUVChannels: 0 - generateSecondaryUV: 0 - useFileUnits: 1 - keepQuads: 0 - weldVertices: 1 - bakeAxisConversion: 0 - preserveHierarchy: 0 - skinWeightsMode: 0 - maxBonesPerVertex: 4 - minBoneWeight: 0.001 - optimizeBones: 1 - meshOptimizationFlags: -1 - indexFormat: 1 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVMarginMethod: 0 - secondaryUVMinLightmapResolution: 40 - secondaryUVMinObjectScale: 1 - secondaryUVPackMargin: 4 - useFileScale: 1 - tangentSpace: - normalSmoothAngle: 60 - normalImportMode: 0 - tangentImportMode: 3 - normalCalculationMode: 0 - legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 - blendShapeNormalImportMode: 1 - normalSmoothingSource: 0 - referencedClips: [] - importAnimation: 1 - humanDescription: - serializedVersion: 3 - human: [] - skeleton: [] - armTwist: 0.5 - foreArmTwist: 0.5 - upperLegTwist: 0.5 - legTwist: 0.5 - armStretch: 0.05 - legStretch: 0.05 - feetSpacing: 0 - globalScale: 40 - rootMotionBoneName: - hasTranslationDoF: 0 - hasExtraRoot: 0 - skeletonHasParents: 1 - lastHumanDescriptionAvatarSource: {instanceID: 0} - autoGenerateAvatarMappingIfUnspecified: 1 - animationType: 0 - humanoidOversampling: 1 - avatarSetup: 0 - addHumanoidExtraRootOnlyWhenUsingAvatar: 0 - additionalBone: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Models/TestEnvironment.fbx b/Assets/Obi/Samples/Common/SampleResources/Models/TestEnvironment.fbx deleted file mode 100644 index 7cbb23123..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Models/TestEnvironment.fbx and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Models/TestEnvironment.fbx.meta b/Assets/Obi/Samples/Common/SampleResources/Models/TestEnvironment.fbx.meta deleted file mode 100644 index 68499baea..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Models/TestEnvironment.fbx.meta +++ /dev/null @@ -1,120 +0,0 @@ -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/Assets/Obi/Samples/Common/SampleResources/Scripts.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts.meta deleted file mode 100644 index 0961a1f0a..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2851bb019d40d478b971f640aac2a9ba -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorActorCollisionDetector.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorActorCollisionDetector.cs deleted file mode 100644 index db2ef153a..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorActorCollisionDetector.cs +++ /dev/null @@ -1,69 +0,0 @@ -using UnityEngine; -using UnityEngine.Events; - -namespace Obi.Samples -{ - [RequireComponent(typeof(ObiSolver))] - public class ActorActorCollisionDetector : MonoBehaviour - { - public struct ActorPair - { - public readonly ObiActor actorA; - public readonly ObiActor actorB; - public int particleA; - public int particleB; - - public ActorPair(ObiActor actorA, ObiActor actorB, int particleA, int particleB) - { - this.actorA = actorA; - this.actorB = actorB; - this.particleA = particleA; - this.particleB = particleB; - } - } - - public UnityEvent callback; - ObiSolver solver; - - void OnEnable() - { - solver = GetComponent(); - solver.OnParticleCollision += Solver_OnCollision; - } - - void OnDisable() - { - solver.OnParticleCollision -= Solver_OnCollision; - } - - void Solver_OnCollision(object sender, ObiNativeContactList e) - { - if (!solver.initialized || callback == null) return; - - // just iterate over all contacts in the current frame: - foreach (Oni.Contact contact in e) - { - // if this one is an actual collision: - if (contact.distance < 0.01) - { - // get the index of the first entry in the simplices array for both bodies: - int startA = solver.simplexCounts.GetSimplexStartAndSize(contact.bodyA, out _); - int startB = solver.simplexCounts.GetSimplexStartAndSize(contact.bodyB, out _); - - // retrieve the index of both particles from the simplices array: - int particleA = solver.simplices[startA]; - int particleB = solver.simplices[startB]; - - // retrieve info about both actors involved in the collision: - var particleInActorA = solver.particleToActor[particleA]; - var particleInActorB = solver.particleToActor[particleB]; - - // if they're not the same actor, trigger a callback: - if (particleInActorA != null && particleInActorB != null && particleInActorA.actor != particleInActorB.actor) - callback.Invoke(new ActorPair(particleInActorA.actor, particleInActorB.actor, particleA, particleB)); - } - } - } - - } -} diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorActorCollisionDetector.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorActorCollisionDetector.cs.meta deleted file mode 100644 index d036a2d12..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorActorCollisionDetector.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a5a3cc3afb7a14486848b022c300ea32 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorBlinker.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorBlinker.cs deleted file mode 100644 index ec64776aa..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorBlinker.cs +++ /dev/null @@ -1,32 +0,0 @@ -using UnityEngine; -using Obi; - -namespace Obi.Samples -{ - [RequireComponent(typeof(ObiActor))] - public class ActorBlinker : MonoBehaviour - { - public Color neutralColor = Color.white; - public Color highlightColor = Color.red; - private ObiActor actor; - - void Awake() - { - actor = GetComponent(); - } - - public void Blink(int particleIndex) - { - if (actor.solver != null) - actor.solver.colors[particleIndex] = highlightColor; - } - - void LateUpdate() - { - if (actor.solver != null) - for (int i = 0; i < actor.activeParticleCount; ++i) - actor.solver.colors[actor.solverIndices[i]] += (neutralColor - actor.solver.colors[actor.solverIndices[i]]) * Time.deltaTime * 5; - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorBlinker.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorBlinker.cs.meta deleted file mode 100644 index 95fad905d..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorBlinker.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fbbc507232dcc4cb1ae27d9474ddbe70 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorCOMTransform.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorCOMTransform.cs deleted file mode 100644 index 018a320c4..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorCOMTransform.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - 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/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorCOMTransform.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorCOMTransform.cs.meta deleted file mode 100644 index 8d256b6fa..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorCOMTransform.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: eaf186b4497d04a31853e3c6570848c7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorSpawner.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorSpawner.cs deleted file mode 100644 index 609290646..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorSpawner.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - 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; - } - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorSpawner.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorSpawner.cs.meta deleted file mode 100644 index e8de32b0f..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ActorSpawner.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 628acd4e2e0fc4c8eafc9a96563762a7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/AddRandomVelocity.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/AddRandomVelocity.cs deleted file mode 100644 index 72fbe5837..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/AddRandomVelocity.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - [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/Assets/Obi/Samples/Common/SampleResources/Scripts/AddRandomVelocity.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/AddRandomVelocity.cs.meta deleted file mode 100644 index fb9001537..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/AddRandomVelocity.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 16f6da785ba3d49c1aff763a6f55e424 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/Blinker.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/Blinker.cs deleted file mode 100644 index b8fcd917f..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/Blinker.cs +++ /dev/null @@ -1,30 +0,0 @@ -using UnityEngine; - -namespace Obi.Samples -{ - 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; - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/Blinker.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/Blinker.cs.meta deleted file mode 100644 index db54e62ff..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/Blinker.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b63f5717a039e488ab8ccfb80eda50e6 -timeCreated: 1494351303 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController.meta deleted file mode 100644 index 428e0c8f9..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 4a1b43750986e462db0a210922ad76b1 -folderAsset: yes -timeCreated: 1518001485 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/ObiCharacter.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/ObiCharacter.cs deleted file mode 100644 index 57807d600..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/ObiCharacter.cs +++ /dev/null @@ -1,229 +0,0 @@ -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.linearVelocity.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.linearVelocity.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.linearVelocity = new Vector3(m_Rigidbody.linearVelocity.x, m_JumpPower, m_Rigidbody.linearVelocity.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.linearVelocity.y; - m_Rigidbody.linearVelocity = 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/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/ObiCharacter.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/ObiCharacter.cs.meta deleted file mode 100644 index 43091bd62..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/ObiCharacter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 30974edc9036841cebffee1d18425185 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/SampleCharacterController.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/SampleCharacterController.cs deleted file mode 100644 index 93c6fb00e..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/SampleCharacterController.cs +++ /dev/null @@ -1,72 +0,0 @@ -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/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/SampleCharacterController.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/SampleCharacterController.cs.meta deleted file mode 100644 index b0aa0d0ac..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/CharacterController/SampleCharacterController.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: de9bce9a2c43c424d81e85ea229e0004 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ColliderHighlighter.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/ColliderHighlighter.cs deleted file mode 100644 index b53a0f8b5..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ColliderHighlighter.cs +++ /dev/null @@ -1,51 +0,0 @@ -using UnityEngine; - -namespace Obi.Samples -{ - [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/Assets/Obi/Samples/Common/SampleResources/Scripts/ColliderHighlighter.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/ColliderHighlighter.cs.meta deleted file mode 100644 index e0551d0db..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ColliderHighlighter.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ef31b6ca9a4124cb893de1adabbfab18 -timeCreated: 1458771359 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/CollisionEventHandler.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/CollisionEventHandler.cs deleted file mode 100644 index 2db887399..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/CollisionEventHandler.cs +++ /dev/null @@ -1,97 +0,0 @@ -using UnityEngine; -using System.Collections; -using System.Collections.Generic; - -namespace Obi.Samples -{ - [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); - }*/ - } - - } -} diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/CollisionEventHandler.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/CollisionEventHandler.cs.meta deleted file mode 100644 index 79eedd8e8..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/CollisionEventHandler.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f6efd222d18e14e0b99e22b7fa35448c -timeCreated: 1458771359 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromPhase.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromPhase.cs deleted file mode 100644 index 5fcfe1c98..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromPhase.cs +++ /dev/null @@ -1,38 +0,0 @@ -using UnityEngine; -using System; -using System.Collections; -using System.Collections.Generic; - -namespace Obi.Samples -{ - /** - * 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/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromPhase.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromPhase.cs.meta deleted file mode 100644 index 3c3a07feb..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromPhase.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3252a39e388cf4229a933f0158ece73b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromVelocity.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromVelocity.cs deleted file mode 100644 index a1cf04c61..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromVelocity.cs +++ /dev/null @@ -1,43 +0,0 @@ -using UnityEngine; -using System; -using System.Collections; -using System.Collections.Generic; - -namespace Obi.Samples -{ - /** - * 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/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromVelocity.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromVelocity.cs.meta deleted file mode 100644 index ecfa51851..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorFromVelocity.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5acdea6dc69cb46f3ad3d92757580843 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorRandomizer.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorRandomizer.cs deleted file mode 100644 index c445dfc28..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorRandomizer.cs +++ /dev/null @@ -1,26 +0,0 @@ -using UnityEngine; - -namespace Obi.Samples -{ - [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/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorRandomizer.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorRandomizer.cs.meta deleted file mode 100644 index 5b858de42..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ColorRandomizer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2e479c6a54eba4250a39b1f9a46c3b14 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/DebugParticleFrames.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/DebugParticleFrames.cs deleted file mode 100644 index 298017a89..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/DebugParticleFrames.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - [ExecuteInEditMode] - [RequireComponent(typeof(ObiActor))] - public class DebugParticleFrames : MonoBehaviour - { - - ObiActor actor; - public float size = 1; - - public void Awake() - { - actor = GetComponent(); - } - - // Update is called once per frame - void OnDrawGizmos() - { - Vector4 b1 = new Vector4(1, 0, 0, 0); - Vector4 b2 = new Vector4(0, 1, 0, 0); - Vector4 b3 = new Vector4(0, 0, 1, 0); - for (int i = 0; i < actor.activeParticleCount; ++i) - { - - Vector3 position = actor.GetParticlePosition(actor.solverIndices[i]); - Quaternion quat = actor.GetParticleOrientation(actor.solverIndices[i]); - - Gizmos.color = Color.red; - Gizmos.DrawRay(position, quat * b1 * size); - Gizmos.color = Color.green; - Gizmos.DrawRay(position, quat * b2 * size); - Gizmos.color = Color.blue; - Gizmos.DrawRay(position, quat * b3 * size); - } - - } - } -} diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/DebugParticleFrames.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/DebugParticleFrames.cs.meta deleted file mode 100644 index 59a21d00b..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/DebugParticleFrames.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bab528011ba08418f99627d25a289fd3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ExtrapolationCamera.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/ExtrapolationCamera.cs deleted file mode 100644 index ff7bb55d0..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ExtrapolationCamera.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - 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/Assets/Obi/Samples/Common/SampleResources/Scripts/ExtrapolationCamera.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/ExtrapolationCamera.cs.meta deleted file mode 100644 index 20257ab02..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ExtrapolationCamera.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7118f3a432315464297cab517f322eca -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/FPSDisplay.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/FPSDisplay.cs deleted file mode 100644 index bd83d2163..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/FPSDisplay.cs +++ /dev/null @@ -1,81 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; -using System.Collections; - -namespace Obi.Samples -{ - [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/Assets/Obi/Samples/Common/SampleResources/Scripts/FPSDisplay.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/FPSDisplay.cs.meta deleted file mode 100644 index 3255db50f..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/FPSDisplay.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: f14f49b61044e49ebb2f29511f2b3f41 -timeCreated: 1518870953 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/LookAroundCamera.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/LookAroundCamera.cs deleted file mode 100644 index 79bcebe3e..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/LookAroundCamera.cs +++ /dev/null @@ -1,81 +0,0 @@ -using UnityEngine; - -namespace Obi.Samples -{ - [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/Assets/Obi/Samples/Common/SampleResources/Scripts/LookAroundCamera.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/LookAroundCamera.cs.meta deleted file mode 100644 index 189500fea..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/LookAroundCamera.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 138d2e060d2cd42f58c60b22bca0159e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/MoveAndRotate.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/MoveAndRotate.cs deleted file mode 100644 index a077e14f6..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/MoveAndRotate.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi.Samples -{ - 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/Assets/Obi/Samples/Common/SampleResources/Scripts/MoveAndRotate.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/MoveAndRotate.cs.meta deleted file mode 100644 index 80e9d582b..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/MoveAndRotate.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: dae436d3aef704ae1b22a06a92480162 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiActorTeleport.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiActorTeleport.cs deleted file mode 100644 index ba39a0312..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiActorTeleport.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - public class ObiActorTeleport : MonoBehaviour - { - public ObiActor actor; - public Transform target; - - public void Teleport() - { - actor.Teleport(target.position, target.rotation); - } - } -} diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiActorTeleport.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiActorTeleport.cs.meta deleted file mode 100644 index 69ee13061..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiActorTeleport.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ef23dec4d0c424492a85ebca02b625bc -timeCreated: 1491379841 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiParticleCounter.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiParticleCounter.cs deleted file mode 100644 index ae6fcf333..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiParticleCounter.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - [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/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiParticleCounter.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiParticleCounter.cs.meta deleted file mode 100644 index 399ee1a65..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ObiParticleCounter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b4d7608433fa641c6ad7e1ad3716e0b6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectDragger.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectDragger.cs deleted file mode 100644 index 9f8127d1a..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectDragger.cs +++ /dev/null @@ -1,25 +0,0 @@ -using UnityEngine; -using System.Collections; - -namespace Obi.Samples -{ - public class ObjectDragger : MonoBehaviour - { - - private Vector3 screenPoint; - private Vector3 offset; - - void OnMouseDown() - { - screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position); - offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z)); - } - - void OnMouseDrag() - { - Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z); - transform.position = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset; - } - - } - } \ No newline at end of file diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectDragger.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectDragger.cs.meta deleted file mode 100644 index 37e2551c0..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectDragger.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: cbe5860a158ab4ff9852d93167f38e5a -timeCreated: 1490723525 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectLimit.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectLimit.cs deleted file mode 100644 index 673104e56..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectLimit.cs +++ /dev/null @@ -1,25 +0,0 @@ -using UnityEngine; - using System.Collections; - -namespace Obi.Samples -{ - public class ObjectLimit : MonoBehaviour - { - - public float minX = 0; - public float maxX = 1; - public float minY = 0; - public float maxY = 1; - public float minZ = 0; - public float maxZ = 1; - - void Update() - { - transform.localPosition = new Vector3(Mathf.Clamp(gameObject.transform.localPosition.x, minX, maxX), - Mathf.Clamp(gameObject.transform.localPosition.y, minY, maxY), - Mathf.Clamp(gameObject.transform.localPosition.z, minZ, maxZ)); - - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectLimit.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectLimit.cs.meta deleted file mode 100644 index 05e6e67b4..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/ObjectLimit.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 6da1d294c86704f3394415f542741ebe -timeCreated: 1490723525 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/RigidbodyMaxAngularVel.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/RigidbodyMaxAngularVel.cs deleted file mode 100644 index aff42672f..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/RigidbodyMaxAngularVel.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - [RequireComponent(typeof(Rigidbody))] - public class RigidbodyMaxAngularVel : MonoBehaviour - { - public float maxAngularVelocity = 20; - - // Start is called before the first frame update - void Start() - { - GetComponent().maxAngularVelocity = maxAngularVelocity; - } - - // Update is called once per frame - void Update() - { - - } - } -} diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/RigidbodyMaxAngularVel.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/RigidbodyMaxAngularVel.cs.meta deleted file mode 100644 index bdba51d88..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/RigidbodyMaxAngularVel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0c31446bcaf82443aa64afa152fac3d0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/SlowmoToggler.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/SlowmoToggler.cs deleted file mode 100644 index 5b70d25ac..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/SlowmoToggler.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - public class SlowmoToggler : MonoBehaviour - { - - public void Slowmo(bool slowmo) - { - Time.timeScale = slowmo ? 0.25f : 1; - } - } -} diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/SlowmoToggler.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/SlowmoToggler.cs.meta deleted file mode 100644 index b29b2a875..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/SlowmoToggler.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 5ec309595a8ca48b3a4deae53d6b023d -timeCreated: 1496678069 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Scripts/WorldSpaceGravity.cs b/Assets/Obi/Samples/Common/SampleResources/Scripts/WorldSpaceGravity.cs deleted file mode 100644 index fc9c9971a..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/WorldSpaceGravity.cs +++ /dev/null @@ -1,24 +0,0 @@ -using UnityEngine; -using Obi; - -namespace Obi.Samples -{ - [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/Assets/Obi/Samples/Common/SampleResources/Scripts/WorldSpaceGravity.cs.meta b/Assets/Obi/Samples/Common/SampleResources/Scripts/WorldSpaceGravity.cs.meta deleted file mode 100644 index cb0ae7f97..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Scripts/WorldSpaceGravity.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 278a56537b77b462a894513bc9d3e474 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/SparksEmitter.prefab b/Assets/Obi/Samples/Common/SampleResources/SparksEmitter.prefab deleted file mode 100644 index 8cd4c4e3b..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/SparksEmitter.prefab and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/SparksEmitter.prefab.meta b/Assets/Obi/Samples/Common/SampleResources/SparksEmitter.prefab.meta deleted file mode 100644 index bf6777e0d..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/SparksEmitter.prefab.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 46b3b311bc85645d88ddbc56ad5465f2 -labels: -- ObiRope -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Textures.meta b/Assets/Obi/Samples/Common/SampleResources/Textures.meta deleted file mode 100644 index a9d4be5b7..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Textures.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 58f248a554f634b9b8e2b604bffc0611 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern.png b/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern.png deleted file mode 100644 index 5277d46a3..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern.png and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern.png.meta b/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern.png.meta deleted file mode 100644 index bc957810a..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern.png.meta +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern_SM.psd b/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern_SM.psd deleted file mode 100644 index c5541c637..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern_SM.psd and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern_SM.psd.meta b/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern_SM.psd.meta deleted file mode 100644 index 0d23fff70..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Textures/ClothPattern_SM.psd.meta +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Samples/Common/SampleResources/Textures/checker.psd b/Assets/Obi/Samples/Common/SampleResources/Textures/checker.psd deleted file mode 100644 index 9c88470d5..000000000 Binary files a/Assets/Obi/Samples/Common/SampleResources/Textures/checker.psd and /dev/null differ diff --git a/Assets/Obi/Samples/Common/SampleResources/Textures/checker.psd.meta b/Assets/Obi/Samples/Common/SampleResources/Textures/checker.psd.meta deleted file mode 100644 index 432b8a6ac..000000000 --- a/Assets/Obi/Samples/Common/SampleResources/Textures/checker.psd.meta +++ /dev/null @@ -1,100 +0,0 @@ -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/Assets/Obi/Samples/RopeAndRod.meta b/Assets/Obi/Samples/RopeAndRod.meta deleted file mode 100644 index 9b1be62b3..000000000 --- a/Assets/Obi/Samples/RopeAndRod.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: d590e90abb60549c5982d874c4264501 -labels: -- ObiRope -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/CableCar.unity b/Assets/Obi/Samples/RopeAndRod/CableCar.unity deleted file mode 100644 index e2a581080..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/CableCar.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/CableCar.unity.meta b/Assets/Obi/Samples/RopeAndRod/CableCar.unity.meta deleted file mode 100644 index ec65ee589..000000000 --- a/Assets/Obi/Samples/RopeAndRod/CableCar.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 78725675a368c4503978c7bd3dbc2778 -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/Chains.unity b/Assets/Obi/Samples/RopeAndRod/Chains.unity deleted file mode 100644 index 7ad4fe8a3..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/Chains.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/Chains.unity.meta b/Assets/Obi/Samples/RopeAndRod/Chains.unity.meta deleted file mode 100644 index 00f01a26c..000000000 --- a/Assets/Obi/Samples/RopeAndRod/Chains.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: de781a1f903154a98a617b786d36a330 -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/ChainsSettings.lighting b/Assets/Obi/Samples/RopeAndRod/ChainsSettings.lighting deleted file mode 100644 index 06c4915db..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/ChainsSettings.lighting and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/ChainsSettings.lighting.meta b/Assets/Obi/Samples/RopeAndRod/ChainsSettings.lighting.meta deleted file mode 100644 index c7ba969b6..000000000 --- a/Assets/Obi/Samples/RopeAndRod/ChainsSettings.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 21c4fb2401b72496aa6ac0cb399992d5 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 4890085278179872738 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/CharacterTentacles.unity b/Assets/Obi/Samples/RopeAndRod/CharacterTentacles.unity deleted file mode 100644 index 2fc6384d5..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/CharacterTentacles.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/CharacterTentacles.unity.meta b/Assets/Obi/Samples/RopeAndRod/CharacterTentacles.unity.meta deleted file mode 100644 index 117d03d44..000000000 --- a/Assets/Obi/Samples/RopeAndRod/CharacterTentacles.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: ad63c807aee2f44b28fa2bcd46634d88 -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/ComputeRopes.meta b/Assets/Obi/Samples/RopeAndRod/ComputeRopes.meta deleted file mode 100644 index c3b5d66ac..000000000 --- a/Assets/Obi/Samples/RopeAndRod/ComputeRopes.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 684815e6961a83546a06253512474306 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/ComputeRopes.unity b/Assets/Obi/Samples/RopeAndRod/ComputeRopes.unity deleted file mode 100644 index 71d467f58..000000000 --- a/Assets/Obi/Samples/RopeAndRod/ComputeRopes.unity +++ /dev/null @@ -1,40332 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 10 - m_Fog: 0 - m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - m_FogMode: 3 - m_FogDensity: 0.01 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 0 - m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &4 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 13 - m_BakeOnSceneLoad: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 0 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 1 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 40 - m_AtlasSize: 1024 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 0 - m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 1 - m_TextureCompression: 1 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 500 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 2 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.5 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 112000000, guid: 1ead4721dd54be94eb41595aa2b9a29a, type: 2} - m_LightingSettings: {fileID: 4890085278179872738, guid: 2a7dd55cd73e04316941dd907bb58462, type: 2} ---- !u!196 &5 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 3 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - buildHeightMesh: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &23156 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 23157} - - component: {fileID: 23161} - - component: {fileID: 23160} - - component: {fileID: 23159} - - component: {fileID: 23158} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &23157 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 23156} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1798495239} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &23158 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 23156} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 23161} - m_Target: {fileID: 23157} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &23159 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 23156} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &23160 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 23156} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 0 ---- !u!114 &23161 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 23156} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000 - m_AlignBytes: 16 - groupID: 1 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 0 - particle2: 1 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 1 - particle2: 2 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 2 - particle2: 3 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 3 - particle2: 4 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 4 - particle2: 5 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 5 - particle2: 6 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 6 - particle2: 7 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 7 - particle2: 8 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 8 - particle2: 9 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 9 - particle2: 10 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 10 - particle2: 11 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &21655690 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 21655691} - - component: {fileID: 21655695} - - component: {fileID: 21655694} - - component: {fileID: 21655693} - - component: {fileID: 21655692} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &21655691 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 21655690} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 472161722} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &21655692 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 21655690} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 21655695} - m_Target: {fileID: 21655691} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &21655693 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 21655690} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &21655694 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 21655690} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 1 ---- !u!114 &21655695 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 21655690} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000 - m_AlignBytes: 16 - groupID: 2 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 112 - particle2: 113 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 113 - particle2: 114 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 114 - particle2: 115 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 115 - particle2: 116 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 116 - particle2: 117 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 117 - particle2: 118 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 118 - particle2: 119 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 119 - particle2: 120 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 120 - particle2: 121 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 121 - particle2: 122 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 122 - particle2: 123 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &39329228 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 39329229} - - component: {fileID: 39329233} - - component: {fileID: 39329232} - - component: {fileID: 39329231} - - component: {fileID: 39329230} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &39329229 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 39329228} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1240601735} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &39329230 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 39329228} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 39329233} - m_Target: {fileID: 39329229} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &39329231 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 39329228} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &39329232 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 39329228} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 2 ---- !u!114 &39329233 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 39329228} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000ea000000eb000000ec000000ed000000ee000000ef000000f0000000f1000000f2000000f3000000f4000000f5000000f6000000f7000000f8000000f9000000fa000000fb000000fc000000fd000000fe000000ff000000000100000101000002010000030100000401000005010000060100000701000008010000090100000a0100000b0100000c0100000d0100000e0100000f010000100100001101000012010000130100001401000015010000160100001701000018010000190100001a0100001b0100001c0100001d0100001e0100001f010000200100002101000022010000230100002401000025010000260100002701000028010000290100002a0100002b0100002c0100002d0100002e0100002f010000300100003101000032010000330100003401000035010000360100003701000038010000390100003a0100003b0100003c0100003d0100003e0100003f010000400100004101000042010000430100004401000045010000460100004701000048010000490100004a0100004b0100004c0100004d0100004e0100004f010000 - m_AlignBytes: 16 - groupID: 3 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 224 - particle2: 225 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 225 - particle2: 226 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 226 - particle2: 227 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 227 - particle2: 228 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 228 - particle2: 229 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 229 - particle2: 230 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 230 - particle2: 231 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 231 - particle2: 232 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 232 - particle2: 233 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 233 - particle2: 234 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 234 - particle2: 235 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &40955814 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 40955815} - - component: {fileID: 40955819} - - component: {fileID: 40955818} - - component: {fileID: 40955817} - - component: {fileID: 40955816} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &40955815 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 40955814} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 426164209} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &40955816 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 40955814} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 40955819} - m_Target: {fileID: 40955815} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &40955817 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 40955814} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &40955818 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 40955814} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 3 ---- !u!114 &40955819 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 40955814} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 500100005101000052010000530100005401000055010000560100005701000058010000590100005a0100005b0100005c0100005d0100005e0100005f010000600100006101000062010000630100006401000065010000660100006701000068010000690100006a0100006b0100006c0100006d0100006e0100006f010000700100007101000072010000730100007401000075010000760100007701000078010000790100007a0100007b0100007c0100007d0100007e0100007f010000800100008101000082010000830100008401000085010000860100008701000088010000890100008a0100008b0100008c0100008d0100008e0100008f010000900100009101000092010000930100009401000095010000960100009701000098010000990100009a0100009b0100009c0100009d0100009e0100009f010000a0010000a1010000a2010000a3010000a4010000a5010000a6010000a7010000a8010000a9010000aa010000ab010000ac010000ad010000ae010000af010000b0010000b1010000b2010000b3010000b4010000b5010000b6010000b7010000b8010000b9010000ba010000bb010000bc010000bd010000be010000bf010000 - m_AlignBytes: 16 - groupID: 4 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 336 - particle2: 337 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 337 - particle2: 338 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 338 - particle2: 339 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 339 - particle2: 340 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 340 - particle2: 341 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 341 - particle2: 342 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 342 - particle2: 343 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 343 - particle2: 344 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 344 - particle2: 345 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 345 - particle2: 346 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 346 - particle2: 347 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &52316902 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 52316903} - - component: {fileID: 52316907} - - component: {fileID: 52316906} - - component: {fileID: 52316905} - - component: {fileID: 52316904} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &52316903 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 52316902} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 779073863} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &52316904 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 52316902} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 52316907} - m_Target: {fileID: 52316903} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &52316905 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 52316902} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &52316906 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 52316902} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 4 ---- !u!114 &52316907 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 52316902} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: c0010000c1010000c2010000c3010000c4010000c5010000c6010000c7010000c8010000c9010000ca010000cb010000cc010000cd010000ce010000cf010000d0010000d1010000d2010000d3010000d4010000d5010000d6010000d7010000d8010000d9010000da010000db010000dc010000dd010000de010000df010000e0010000e1010000e2010000e3010000e4010000e5010000e6010000e7010000e8010000e9010000ea010000eb010000ec010000ed010000ee010000ef010000f0010000f1010000f2010000f3010000f4010000f5010000f6010000f7010000f8010000f9010000fa010000fb010000fc010000fd010000fe010000ff010000000200000102000002020000030200000402000005020000060200000702000008020000090200000a0200000b0200000c0200000d0200000e0200000f020000100200001102000012020000130200001402000015020000160200001702000018020000190200001a0200001b0200001c0200001d0200001e0200001f020000200200002102000022020000230200002402000025020000260200002702000028020000290200002a0200002b0200002c0200002d0200002e0200002f020000 - m_AlignBytes: 16 - groupID: 5 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 448 - particle2: 449 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 449 - particle2: 450 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 450 - particle2: 451 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 451 - particle2: 452 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 452 - particle2: 453 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 453 - particle2: 454 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 454 - particle2: 455 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 455 - particle2: 456 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 456 - particle2: 457 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 457 - particle2: 458 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 458 - particle2: 459 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &54623966 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 54623967} - m_Layer: 0 - m_Name: Row (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &54623967 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 54623966} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -1.2} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1461467372} - - {fileID: 549111722} - - {fileID: 2039851350} - - {fileID: 2120568196} - - {fileID: 1707229808} - - {fileID: 453529546} - - {fileID: 437496967} - - {fileID: 75753452} - - {fileID: 1143427710} - - {fileID: 1796031224} - m_Father: {fileID: 1760688768} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &58243449 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 58243450} - - component: {fileID: 58243454} - - component: {fileID: 58243453} - - component: {fileID: 58243452} - - component: {fileID: 58243451} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &58243450 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 58243449} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 779073863} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &58243451 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 58243449} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 58243454} - m_Target: {fileID: 58243450} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &58243452 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 58243449} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &58243453 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 58243449} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 5 ---- !u!114 &58243454 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 58243449} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 300200003102000032020000330200003402000035020000360200003702000038020000390200003a0200003b0200003c0200003d0200003e0200003f020000400200004102000042020000430200004402000045020000460200004702000048020000490200004a0200004b0200004c0200004d0200004e0200004f020000500200005102000052020000530200005402000055020000560200005702000058020000590200005a0200005b0200005c0200005d0200005e0200005f020000600200006102000062020000630200006402000065020000660200006702000068020000690200006a0200006b0200006c0200006d0200006e0200006f020000700200007102000072020000730200007402000075020000760200007702000078020000790200007a0200007b0200007c0200007d0200007e0200007f020000800200008102000082020000830200008402000085020000860200008702000088020000890200008a0200008b0200008c0200008d0200008e0200008f020000900200009102000092020000930200009402000095020000960200009702000098020000990200009a0200009b0200009c0200009d0200009e0200009f020000 - m_AlignBytes: 16 - groupID: 6 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 560 - particle2: 561 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 561 - particle2: 562 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 562 - particle2: 563 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 563 - particle2: 564 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 564 - particle2: 565 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 565 - particle2: 566 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 566 - particle2: 567 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 567 - particle2: 568 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 568 - particle2: 569 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 569 - particle2: 570 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 570 - particle2: 571 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &59144233 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 59144234} - - component: {fileID: 59144238} - - component: {fileID: 59144237} - - component: {fileID: 59144236} - - component: {fileID: 59144235} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &59144234 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 59144233} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 713844502} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &59144235 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 59144233} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 59144238} - m_Target: {fileID: 59144234} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &59144236 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 59144233} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &59144237 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 59144233} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 6 ---- !u!114 &59144238 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 59144233} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: a0020000a1020000a2020000a3020000a4020000a5020000a6020000a7020000a8020000a9020000aa020000ab020000ac020000ad020000ae020000af020000b0020000b1020000b2020000b3020000b4020000b5020000b6020000b7020000b8020000b9020000ba020000bb020000bc020000bd020000be020000bf020000c0020000c1020000c2020000c3020000c4020000c5020000c6020000c7020000c8020000c9020000ca020000cb020000cc020000cd020000ce020000cf020000d0020000d1020000d2020000d3020000d4020000d5020000d6020000d7020000d8020000d9020000da020000db020000dc020000dd020000de020000df020000e0020000e1020000e2020000e3020000e4020000e5020000e6020000e7020000e8020000e9020000ea020000eb020000ec020000ed020000ee020000ef020000f0020000f1020000f2020000f3020000f4020000f5020000f6020000f7020000f8020000f9020000fa020000fb020000fc020000fd020000fe020000ff020000000300000103000002030000030300000403000005030000060300000703000008030000090300000a0300000b0300000c0300000d0300000e0300000f030000 - m_AlignBytes: 16 - groupID: 7 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 672 - particle2: 673 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 673 - particle2: 674 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 674 - particle2: 675 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 675 - particle2: 676 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 676 - particle2: 677 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 677 - particle2: 678 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 678 - particle2: 679 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 679 - particle2: 680 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 680 - particle2: 681 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 681 - particle2: 682 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 682 - particle2: 683 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &61099066 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 61099067} - - component: {fileID: 61099071} - - component: {fileID: 61099070} - - component: {fileID: 61099069} - - component: {fileID: 61099068} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &61099067 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 61099066} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 472161722} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &61099068 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 61099066} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 61099071} - m_Target: {fileID: 61099067} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &61099069 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 61099066} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &61099070 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 61099066} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 7 ---- !u!114 &61099071 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 61099066} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 100300001103000012030000130300001403000015030000160300001703000018030000190300001a0300001b0300001c0300001d0300001e0300001f030000200300002103000022030000230300002403000025030000260300002703000028030000290300002a0300002b0300002c0300002d0300002e0300002f030000300300003103000032030000330300003403000035030000360300003703000038030000390300003a0300003b0300003c0300003d0300003e0300003f030000400300004103000042030000430300004403000045030000460300004703000048030000490300004a0300004b0300004c0300004d0300004e0300004f030000500300005103000052030000530300005403000055030000560300005703000058030000590300005a0300005b0300005c0300005d0300005e0300005f030000600300006103000062030000630300006403000065030000660300006703000068030000690300006a0300006b0300006c0300006d0300006e0300006f030000700300007103000072030000730300007403000075030000760300007703000078030000790300007a0300007b0300007c0300007d0300007e0300007f030000 - m_AlignBytes: 16 - groupID: 8 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 784 - particle2: 785 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 785 - particle2: 786 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 786 - particle2: 787 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 787 - particle2: 788 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 788 - particle2: 789 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 789 - particle2: 790 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 790 - particle2: 791 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 791 - particle2: 792 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 792 - particle2: 793 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 793 - particle2: 794 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 794 - particle2: 795 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &67321348 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 67321349} - - component: {fileID: 67321353} - - component: {fileID: 67321352} - - component: {fileID: 67321351} - - component: {fileID: 67321350} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &67321349 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 67321348} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 472161722} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &67321350 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 67321348} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 67321353} - m_Target: {fileID: 67321349} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &67321351 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 67321348} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &67321352 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 67321348} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 8 ---- !u!114 &67321353 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 67321348} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 800300008103000082030000830300008403000085030000860300008703000088030000890300008a0300008b0300008c0300008d0300008e0300008f030000900300009103000092030000930300009403000095030000960300009703000098030000990300009a0300009b0300009c0300009d0300009e0300009f030000a0030000a1030000a2030000a3030000a4030000a5030000a6030000a7030000a8030000a9030000aa030000ab030000ac030000ad030000ae030000af030000b0030000b1030000b2030000b3030000b4030000b5030000b6030000b7030000b8030000b9030000ba030000bb030000bc030000bd030000be030000bf030000c0030000c1030000c2030000c3030000c4030000c5030000c6030000c7030000c8030000c9030000ca030000cb030000cc030000cd030000ce030000cf030000d0030000d1030000d2030000d3030000d4030000d5030000d6030000d7030000d8030000d9030000da030000db030000dc030000dd030000de030000df030000e0030000e1030000e2030000e3030000e4030000e5030000e6030000e7030000e8030000e9030000ea030000eb030000ec030000ed030000ee030000ef030000 - m_AlignBytes: 16 - groupID: 9 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 896 - particle2: 897 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 897 - particle2: 898 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 898 - particle2: 899 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 899 - particle2: 900 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 900 - particle2: 901 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 901 - particle2: 902 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 902 - particle2: 903 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 903 - particle2: 904 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 904 - particle2: 905 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 905 - particle2: 906 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 906 - particle2: 907 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &75753451 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 75753452} - - component: {fileID: 75753456} - - component: {fileID: 75753455} - - component: {fileID: 75753454} - - component: {fileID: 75753453} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &75753452 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 75753451} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 54623967} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &75753453 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 75753451} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 75753456} - m_Target: {fileID: 75753452} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &75753454 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 75753451} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &75753455 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 75753451} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 9 ---- !u!114 &75753456 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 75753451} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: f0030000f1030000f2030000f3030000f4030000f5030000f6030000f7030000f8030000f9030000fa030000fb030000fc030000fd030000fe030000ff030000000400000104000002040000030400000404000005040000060400000704000008040000090400000a0400000b0400000c0400000d0400000e0400000f040000100400001104000012040000130400001404000015040000160400001704000018040000190400001a0400001b0400001c0400001d0400001e0400001f040000200400002104000022040000230400002404000025040000260400002704000028040000290400002a0400002b0400002c0400002d0400002e0400002f040000300400003104000032040000330400003404000035040000360400003704000038040000390400003a0400003b0400003c0400003d0400003e0400003f040000400400004104000042040000430400004404000045040000460400004704000048040000490400004a0400004b0400004c0400004d0400004e0400004f040000500400005104000052040000530400005404000055040000560400005704000058040000590400005a0400005b0400005c0400005d0400005e0400005f040000 - m_AlignBytes: 16 - groupID: 10 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 1008 - particle2: 1009 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 1009 - particle2: 1010 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 1010 - particle2: 1011 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 1011 - particle2: 1012 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 1012 - particle2: 1013 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 1013 - particle2: 1014 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 1014 - particle2: 1015 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 1015 - particle2: 1016 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 1016 - particle2: 1017 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 1017 - particle2: 1018 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 1018 - particle2: 1019 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &82705114 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 82705115} - - component: {fileID: 82705119} - - component: {fileID: 82705118} - - component: {fileID: 82705117} - - component: {fileID: 82705116} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &82705115 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 82705114} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 510728467} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &82705116 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 82705114} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 82705119} - m_Target: {fileID: 82705115} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &82705117 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 82705114} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &82705118 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 82705114} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 10 ---- !u!114 &82705119 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 82705114} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 600400006104000062040000630400006404000065040000660400006704000068040000690400006a0400006b0400006c0400006d0400006e0400006f040000700400007104000072040000730400007404000075040000760400007704000078040000790400007a0400007b0400007c0400007d0400007e0400007f040000800400008104000082040000830400008404000085040000860400008704000088040000890400008a0400008b0400008c0400008d0400008e0400008f040000900400009104000092040000930400009404000095040000960400009704000098040000990400009a0400009b0400009c0400009d0400009e0400009f040000a0040000a1040000a2040000a3040000a4040000a5040000a6040000a7040000a8040000a9040000aa040000ab040000ac040000ad040000ae040000af040000b0040000b1040000b2040000b3040000b4040000b5040000b6040000b7040000b8040000b9040000ba040000bb040000bc040000bd040000be040000bf040000c0040000c1040000c2040000c3040000c4040000c5040000c6040000c7040000c8040000c9040000ca040000cb040000cc040000cd040000ce040000cf040000 - m_AlignBytes: 16 - groupID: 11 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 1120 - particle2: 1121 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 1121 - particle2: 1122 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 1122 - particle2: 1123 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 1123 - particle2: 1124 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 1124 - particle2: 1125 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 1125 - particle2: 1126 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 1126 - particle2: 1127 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 1127 - particle2: 1128 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 1128 - particle2: 1129 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 1129 - particle2: 1130 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 1130 - particle2: 1131 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &84035659 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 84035660} - - component: {fileID: 84035664} - - component: {fileID: 84035663} - - component: {fileID: 84035662} - - component: {fileID: 84035661} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &84035660 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 84035659} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1798495239} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &84035661 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 84035659} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 84035664} - m_Target: {fileID: 84035660} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &84035662 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 84035659} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &84035663 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 84035659} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 11 ---- !u!114 &84035664 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 84035659} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: d0040000d1040000d2040000d3040000d4040000d5040000d6040000d7040000d8040000d9040000da040000db040000dc040000dd040000de040000df040000e0040000e1040000e2040000e3040000e4040000e5040000e6040000e7040000e8040000e9040000ea040000eb040000ec040000ed040000ee040000ef040000f0040000f1040000f2040000f3040000f4040000f5040000f6040000f7040000f8040000f9040000fa040000fb040000fc040000fd040000fe040000ff040000000500000105000002050000030500000405000005050000060500000705000008050000090500000a0500000b0500000c0500000d0500000e0500000f050000100500001105000012050000130500001405000015050000160500001705000018050000190500001a0500001b0500001c0500001d0500001e0500001f050000200500002105000022050000230500002405000025050000260500002705000028050000290500002a0500002b0500002c0500002d0500002e0500002f050000300500003105000032050000330500003405000035050000360500003705000038050000390500003a0500003b0500003c0500003d0500003e0500003f050000 - m_AlignBytes: 16 - groupID: 12 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 1232 - particle2: 1233 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 1233 - particle2: 1234 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 1234 - particle2: 1235 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 1235 - particle2: 1236 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 1236 - particle2: 1237 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 1237 - particle2: 1238 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 1238 - particle2: 1239 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 1239 - particle2: 1240 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 1240 - particle2: 1241 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 1241 - particle2: 1242 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 1242 - particle2: 1243 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &104614687 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 104614688} - - component: {fileID: 104614692} - - component: {fileID: 104614691} - - component: {fileID: 104614690} - - component: {fileID: 104614689} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &104614688 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 104614687} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 648480057} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &104614689 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 104614687} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 104614692} - m_Target: {fileID: 104614688} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &104614690 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 104614687} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &104614691 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 104614687} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 12 ---- !u!114 &104614692 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 104614687} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 400500004105000042050000430500004405000045050000460500004705000048050000490500004a0500004b0500004c0500004d0500004e0500004f050000500500005105000052050000530500005405000055050000560500005705000058050000590500005a0500005b0500005c0500005d0500005e0500005f050000600500006105000062050000630500006405000065050000660500006705000068050000690500006a0500006b0500006c0500006d0500006e0500006f050000700500007105000072050000730500007405000075050000760500007705000078050000790500007a0500007b0500007c0500007d0500007e0500007f050000800500008105000082050000830500008405000085050000860500008705000088050000890500008a0500008b0500008c0500008d0500008e0500008f050000900500009105000092050000930500009405000095050000960500009705000098050000990500009a0500009b0500009c0500009d0500009e0500009f050000a0050000a1050000a2050000a3050000a4050000a5050000a6050000a7050000a8050000a9050000aa050000ab050000ac050000ad050000ae050000af050000 - m_AlignBytes: 16 - groupID: 13 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 1344 - particle2: 1345 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 1345 - particle2: 1346 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 1346 - particle2: 1347 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 1347 - particle2: 1348 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 1348 - particle2: 1349 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 1349 - particle2: 1350 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 1350 - particle2: 1351 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 1351 - particle2: 1352 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 1352 - particle2: 1353 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 1353 - particle2: 1354 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 1354 - particle2: 1355 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &113190532 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 113190533} - - component: {fileID: 113190537} - - component: {fileID: 113190536} - - component: {fileID: 113190535} - - component: {fileID: 113190534} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &113190533 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 113190532} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 648480057} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &113190534 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 113190532} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 113190537} - m_Target: {fileID: 113190533} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &113190535 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 113190532} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &113190536 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 113190532} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 13 ---- !u!114 &113190537 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 113190532} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: b0050000b1050000b2050000b3050000b4050000b5050000b6050000b7050000b8050000b9050000ba050000bb050000bc050000bd050000be050000bf050000c0050000c1050000c2050000c3050000c4050000c5050000c6050000c7050000c8050000c9050000ca050000cb050000cc050000cd050000ce050000cf050000d0050000d1050000d2050000d3050000d4050000d5050000d6050000d7050000d8050000d9050000da050000db050000dc050000dd050000de050000df050000e0050000e1050000e2050000e3050000e4050000e5050000e6050000e7050000e8050000e9050000ea050000eb050000ec050000ed050000ee050000ef050000f0050000f1050000f2050000f3050000f4050000f5050000f6050000f7050000f8050000f9050000fa050000fb050000fc050000fd050000fe050000ff050000000600000106000002060000030600000406000005060000060600000706000008060000090600000a0600000b0600000c0600000d0600000e0600000f060000100600001106000012060000130600001406000015060000160600001706000018060000190600001a0600001b0600001c0600001d0600001e0600001f060000 - m_AlignBytes: 16 - groupID: 14 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 1456 - particle2: 1457 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 1457 - particle2: 1458 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 1458 - particle2: 1459 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 1459 - particle2: 1460 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 1460 - particle2: 1461 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 1461 - particle2: 1462 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 1462 - particle2: 1463 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 1463 - particle2: 1464 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 1464 - particle2: 1465 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 1465 - particle2: 1466 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 1466 - particle2: 1467 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &123868265 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 123868266} - - component: {fileID: 123868270} - - component: {fileID: 123868269} - - component: {fileID: 123868268} - - component: {fileID: 123868267} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &123868266 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 123868265} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 779073863} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &123868267 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 123868265} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 123868270} - m_Target: {fileID: 123868266} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &123868268 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 123868265} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &123868269 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 123868265} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 14 ---- !u!114 &123868270 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 123868265} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 200600002106000022060000230600002406000025060000260600002706000028060000290600002a0600002b0600002c0600002d0600002e0600002f060000300600003106000032060000330600003406000035060000360600003706000038060000390600003a0600003b0600003c0600003d0600003e0600003f060000400600004106000042060000430600004406000045060000460600004706000048060000490600004a0600004b0600004c0600004d0600004e0600004f060000500600005106000052060000530600005406000055060000560600005706000058060000590600005a0600005b0600005c0600005d0600005e0600005f060000600600006106000062060000630600006406000065060000660600006706000068060000690600006a0600006b0600006c0600006d0600006e0600006f060000700600007106000072060000730600007406000075060000760600007706000078060000790600007a0600007b0600007c0600007d0600007e0600007f060000800600008106000082060000830600008406000085060000860600008706000088060000890600008a0600008b0600008c0600008d0600008e0600008f060000 - m_AlignBytes: 16 - groupID: 15 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 1568 - particle2: 1569 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 1569 - particle2: 1570 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 1570 - particle2: 1571 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 1571 - particle2: 1572 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 1572 - particle2: 1573 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 1573 - particle2: 1574 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 1574 - particle2: 1575 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 1575 - particle2: 1576 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 1576 - particle2: 1577 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 1577 - particle2: 1578 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 1578 - particle2: 1579 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &138556972 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 138556973} - - component: {fileID: 138556977} - - component: {fileID: 138556976} - - component: {fileID: 138556975} - - component: {fileID: 138556974} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &138556973 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 138556972} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 472161722} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &138556974 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 138556972} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 138556977} - m_Target: {fileID: 138556973} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &138556975 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 138556972} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &138556976 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 138556972} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 15 ---- !u!114 &138556977 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 138556972} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 900600009106000092060000930600009406000095060000960600009706000098060000990600009a0600009b0600009c0600009d0600009e0600009f060000a0060000a1060000a2060000a3060000a4060000a5060000a6060000a7060000a8060000a9060000aa060000ab060000ac060000ad060000ae060000af060000b0060000b1060000b2060000b3060000b4060000b5060000b6060000b7060000b8060000b9060000ba060000bb060000bc060000bd060000be060000bf060000c0060000c1060000c2060000c3060000c4060000c5060000c6060000c7060000c8060000c9060000ca060000cb060000cc060000cd060000ce060000cf060000d0060000d1060000d2060000d3060000d4060000d5060000d6060000d7060000d8060000d9060000da060000db060000dc060000dd060000de060000df060000e0060000e1060000e2060000e3060000e4060000e5060000e6060000e7060000e8060000e9060000ea060000eb060000ec060000ed060000ee060000ef060000f0060000f1060000f2060000f3060000f4060000f5060000f6060000f7060000f8060000f9060000fa060000fb060000fc060000fd060000fe060000ff060000 - m_AlignBytes: 16 - groupID: 16 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 1680 - particle2: 1681 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 1681 - particle2: 1682 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 1682 - particle2: 1683 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 1683 - particle2: 1684 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 1684 - particle2: 1685 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 1685 - particle2: 1686 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 1686 - particle2: 1687 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 1687 - particle2: 1688 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 1688 - particle2: 1689 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 1689 - particle2: 1690 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 1690 - particle2: 1691 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &139383574 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 139383575} - - component: {fileID: 139383579} - - component: {fileID: 139383578} - - component: {fileID: 139383577} - - component: {fileID: 139383576} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &139383575 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 139383574} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1062536481} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &139383576 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 139383574} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 139383579} - m_Target: {fileID: 139383575} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &139383577 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 139383574} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &139383578 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 139383574} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 16 ---- !u!114 &139383579 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 139383574} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 000700000107000002070000030700000407000005070000060700000707000008070000090700000a0700000b0700000c0700000d0700000e0700000f070000100700001107000012070000130700001407000015070000160700001707000018070000190700001a0700001b0700001c0700001d0700001e0700001f070000200700002107000022070000230700002407000025070000260700002707000028070000290700002a0700002b0700002c0700002d0700002e0700002f070000300700003107000032070000330700003407000035070000360700003707000038070000390700003a0700003b0700003c0700003d0700003e0700003f070000400700004107000042070000430700004407000045070000460700004707000048070000490700004a0700004b0700004c0700004d0700004e0700004f070000500700005107000052070000530700005407000055070000560700005707000058070000590700005a0700005b0700005c0700005d0700005e0700005f070000600700006107000062070000630700006407000065070000660700006707000068070000690700006a0700006b0700006c0700006d0700006e0700006f070000 - m_AlignBytes: 16 - groupID: 17 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 1792 - particle2: 1793 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 1793 - particle2: 1794 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 1794 - particle2: 1795 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 1795 - particle2: 1796 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 1796 - particle2: 1797 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 1797 - particle2: 1798 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 1798 - particle2: 1799 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 1799 - particle2: 1800 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 1800 - particle2: 1801 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 1801 - particle2: 1802 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 1802 - particle2: 1803 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &156100544 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 156100545} - - component: {fileID: 156100549} - - component: {fileID: 156100548} - - component: {fileID: 156100547} - - component: {fileID: 156100546} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &156100545 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 156100544} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1062536481} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &156100546 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 156100544} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 156100549} - m_Target: {fileID: 156100545} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &156100547 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 156100544} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &156100548 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 156100544} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 17 ---- !u!114 &156100549 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 156100544} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 700700007107000072070000730700007407000075070000760700007707000078070000790700007a0700007b0700007c0700007d0700007e0700007f070000800700008107000082070000830700008407000085070000860700008707000088070000890700008a0700008b0700008c0700008d0700008e0700008f070000900700009107000092070000930700009407000095070000960700009707000098070000990700009a0700009b0700009c0700009d0700009e0700009f070000a0070000a1070000a2070000a3070000a4070000a5070000a6070000a7070000a8070000a9070000aa070000ab070000ac070000ad070000ae070000af070000b0070000b1070000b2070000b3070000b4070000b5070000b6070000b7070000b8070000b9070000ba070000bb070000bc070000bd070000be070000bf070000c0070000c1070000c2070000c3070000c4070000c5070000c6070000c7070000c8070000c9070000ca070000cb070000cc070000cd070000ce070000cf070000d0070000d1070000d2070000d3070000d4070000d5070000d6070000d7070000d8070000d9070000da070000db070000dc070000dd070000de070000df070000 - m_AlignBytes: 16 - groupID: 18 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 1904 - particle2: 1905 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 1905 - particle2: 1906 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 1906 - particle2: 1907 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 1907 - particle2: 1908 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 1908 - particle2: 1909 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 1909 - particle2: 1910 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 1910 - particle2: 1911 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 1911 - particle2: 1912 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 1912 - particle2: 1913 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 1913 - particle2: 1914 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 1914 - particle2: 1915 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &161507645 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 161507646} - - component: {fileID: 161507650} - - component: {fileID: 161507649} - - component: {fileID: 161507648} - - component: {fileID: 161507647} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &161507646 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 161507645} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2009678977} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &161507647 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 161507645} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 161507650} - m_Target: {fileID: 161507646} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &161507648 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 161507645} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &161507649 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 161507645} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 18 ---- !u!114 &161507650 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 161507645} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: e0070000e1070000e2070000e3070000e4070000e5070000e6070000e7070000e8070000e9070000ea070000eb070000ec070000ed070000ee070000ef070000f0070000f1070000f2070000f3070000f4070000f5070000f6070000f7070000f8070000f9070000fa070000fb070000fc070000fd070000fe070000ff070000000800000108000002080000030800000408000005080000060800000708000008080000090800000a0800000b0800000c0800000d0800000e0800000f080000100800001108000012080000130800001408000015080000160800001708000018080000190800001a0800001b0800001c0800001d0800001e0800001f080000200800002108000022080000230800002408000025080000260800002708000028080000290800002a0800002b0800002c0800002d0800002e0800002f080000300800003108000032080000330800003408000035080000360800003708000038080000390800003a0800003b0800003c0800003d0800003e0800003f080000400800004108000042080000430800004408000045080000460800004708000048080000490800004a0800004b0800004c0800004d0800004e0800004f080000 - m_AlignBytes: 16 - groupID: 19 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 2016 - particle2: 2017 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 2017 - particle2: 2018 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 2018 - particle2: 2019 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 2019 - particle2: 2020 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 2020 - particle2: 2021 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 2021 - particle2: 2022 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 2022 - particle2: 2023 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 2023 - particle2: 2024 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 2024 - particle2: 2025 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 2025 - particle2: 2026 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 2026 - particle2: 2027 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &163656623 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 163656624} - - component: {fileID: 163656628} - - component: {fileID: 163656627} - - component: {fileID: 163656626} - - component: {fileID: 163656625} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &163656624 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 163656623} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2009678977} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &163656625 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 163656623} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 163656628} - m_Target: {fileID: 163656624} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &163656626 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 163656623} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &163656627 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 163656623} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 19 ---- !u!114 &163656628 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 163656623} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 500800005108000052080000530800005408000055080000560800005708000058080000590800005a0800005b0800005c0800005d0800005e0800005f080000600800006108000062080000630800006408000065080000660800006708000068080000690800006a0800006b0800006c0800006d0800006e0800006f080000700800007108000072080000730800007408000075080000760800007708000078080000790800007a0800007b0800007c0800007d0800007e0800007f080000800800008108000082080000830800008408000085080000860800008708000088080000890800008a0800008b0800008c0800008d0800008e0800008f080000900800009108000092080000930800009408000095080000960800009708000098080000990800009a0800009b0800009c0800009d0800009e0800009f080000a0080000a1080000a2080000a3080000a4080000a5080000a6080000a7080000a8080000a9080000aa080000ab080000ac080000ad080000ae080000af080000b0080000b1080000b2080000b3080000b4080000b5080000b6080000b7080000b8080000b9080000ba080000bb080000bc080000bd080000be080000bf080000 - m_AlignBytes: 16 - groupID: 20 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 2128 - particle2: 2129 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 2129 - particle2: 2130 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 2130 - particle2: 2131 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 2131 - particle2: 2132 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 2132 - particle2: 2133 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 2133 - particle2: 2134 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 2134 - particle2: 2135 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 2135 - particle2: 2136 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 2136 - particle2: 2137 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 2137 - particle2: 2138 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 2138 - particle2: 2139 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &165314044 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 165314045} - - component: {fileID: 165314049} - - component: {fileID: 165314048} - - component: {fileID: 165314047} - - component: {fileID: 165314046} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &165314045 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 165314044} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 893001395} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &165314046 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 165314044} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 165314049} - m_Target: {fileID: 165314045} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &165314047 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 165314044} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &165314048 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 165314044} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 20 ---- !u!114 &165314049 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 165314044} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: c0080000c1080000c2080000c3080000c4080000c5080000c6080000c7080000c8080000c9080000ca080000cb080000cc080000cd080000ce080000cf080000d0080000d1080000d2080000d3080000d4080000d5080000d6080000d7080000d8080000d9080000da080000db080000dc080000dd080000de080000df080000e0080000e1080000e2080000e3080000e4080000e5080000e6080000e7080000e8080000e9080000ea080000eb080000ec080000ed080000ee080000ef080000f0080000f1080000f2080000f3080000f4080000f5080000f6080000f7080000f8080000f9080000fa080000fb080000fc080000fd080000fe080000ff080000000900000109000002090000030900000409000005090000060900000709000008090000090900000a0900000b0900000c0900000d0900000e0900000f090000100900001109000012090000130900001409000015090000160900001709000018090000190900001a0900001b0900001c0900001d0900001e0900001f090000200900002109000022090000230900002409000025090000260900002709000028090000290900002a0900002b0900002c0900002d0900002e0900002f090000 - m_AlignBytes: 16 - groupID: 21 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 2240 - particle2: 2241 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 2241 - particle2: 2242 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 2242 - particle2: 2243 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 2243 - particle2: 2244 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 2244 - particle2: 2245 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 2245 - particle2: 2246 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 2246 - particle2: 2247 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 2247 - particle2: 2248 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 2248 - particle2: 2249 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 2249 - particle2: 2250 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 2250 - particle2: 2251 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &170149754 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 170149755} - - component: {fileID: 170149759} - - component: {fileID: 170149758} - - component: {fileID: 170149757} - - component: {fileID: 170149756} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &170149755 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 170149754} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1306593279} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &170149756 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 170149754} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 170149759} - m_Target: {fileID: 170149755} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &170149757 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 170149754} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &170149758 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 170149754} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 21 ---- !u!114 &170149759 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 170149754} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 300900003109000032090000330900003409000035090000360900003709000038090000390900003a0900003b0900003c0900003d0900003e0900003f090000400900004109000042090000430900004409000045090000460900004709000048090000490900004a0900004b0900004c0900004d0900004e0900004f090000500900005109000052090000530900005409000055090000560900005709000058090000590900005a0900005b0900005c0900005d0900005e0900005f090000600900006109000062090000630900006409000065090000660900006709000068090000690900006a0900006b0900006c0900006d0900006e0900006f090000700900007109000072090000730900007409000075090000760900007709000078090000790900007a0900007b0900007c0900007d0900007e0900007f090000800900008109000082090000830900008409000085090000860900008709000088090000890900008a0900008b0900008c0900008d0900008e0900008f090000900900009109000092090000930900009409000095090000960900009709000098090000990900009a0900009b0900009c0900009d0900009e0900009f090000 - m_AlignBytes: 16 - groupID: 22 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 2352 - particle2: 2353 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 2353 - particle2: 2354 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 2354 - particle2: 2355 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 2355 - particle2: 2356 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 2356 - particle2: 2357 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 2357 - particle2: 2358 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 2358 - particle2: 2359 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 2359 - particle2: 2360 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 2360 - particle2: 2361 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 2361 - particle2: 2362 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 2362 - particle2: 2363 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &238005275 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 238005276} - - component: {fileID: 238005280} - - component: {fileID: 238005279} - - component: {fileID: 238005278} - - component: {fileID: 238005277} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &238005276 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 238005275} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 713844502} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &238005277 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 238005275} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 238005280} - m_Target: {fileID: 238005276} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &238005278 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 238005275} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &238005279 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 238005275} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 22 ---- !u!114 &238005280 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 238005275} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: a0090000a1090000a2090000a3090000a4090000a5090000a6090000a7090000a8090000a9090000aa090000ab090000ac090000ad090000ae090000af090000b0090000b1090000b2090000b3090000b4090000b5090000b6090000b7090000b8090000b9090000ba090000bb090000bc090000bd090000be090000bf090000c0090000c1090000c2090000c3090000c4090000c5090000c6090000c7090000c8090000c9090000ca090000cb090000cc090000cd090000ce090000cf090000d0090000d1090000d2090000d3090000d4090000d5090000d6090000d7090000d8090000d9090000da090000db090000dc090000dd090000de090000df090000e0090000e1090000e2090000e3090000e4090000e5090000e6090000e7090000e8090000e9090000ea090000eb090000ec090000ed090000ee090000ef090000f0090000f1090000f2090000f3090000f4090000f5090000f6090000f7090000f8090000f9090000fa090000fb090000fc090000fd090000fe090000ff090000000a0000010a0000020a0000030a0000040a0000050a0000060a0000070a0000080a0000090a00000a0a00000b0a00000c0a00000d0a00000e0a00000f0a0000 - m_AlignBytes: 16 - groupID: 23 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 2464 - particle2: 2465 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 2465 - particle2: 2466 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 2466 - particle2: 2467 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 2467 - particle2: 2468 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 2468 - particle2: 2469 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 2469 - particle2: 2470 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 2470 - particle2: 2471 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 2471 - particle2: 2472 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 2472 - particle2: 2473 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 2473 - particle2: 2474 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 2474 - particle2: 2475 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &249029317 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 249029318} - m_Layer: 0 - m_Name: Row (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &249029318 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 249029317} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -0.8} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1101870350} - - {fileID: 304677351} - - {fileID: 1569249538} - - {fileID: 1092735640} - - {fileID: 1058904400} - - {fileID: 1153529340} - - {fileID: 881133077} - - {fileID: 1743992358} - - {fileID: 519875456} - - {fileID: 960049599} - m_Father: {fileID: 1027659676} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &258800384 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 258800385} - - component: {fileID: 258800389} - - component: {fileID: 258800388} - - component: {fileID: 258800387} - - component: {fileID: 258800386} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &258800385 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 258800384} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1798495239} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &258800386 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 258800384} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 258800389} - m_Target: {fileID: 258800385} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &258800387 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 258800384} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &258800388 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 258800384} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 23 ---- !u!114 &258800389 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 258800384} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 100a0000110a0000120a0000130a0000140a0000150a0000160a0000170a0000180a0000190a00001a0a00001b0a00001c0a00001d0a00001e0a00001f0a0000200a0000210a0000220a0000230a0000240a0000250a0000260a0000270a0000280a0000290a00002a0a00002b0a00002c0a00002d0a00002e0a00002f0a0000300a0000310a0000320a0000330a0000340a0000350a0000360a0000370a0000380a0000390a00003a0a00003b0a00003c0a00003d0a00003e0a00003f0a0000400a0000410a0000420a0000430a0000440a0000450a0000460a0000470a0000480a0000490a00004a0a00004b0a00004c0a00004d0a00004e0a00004f0a0000500a0000510a0000520a0000530a0000540a0000550a0000560a0000570a0000580a0000590a00005a0a00005b0a00005c0a00005d0a00005e0a00005f0a0000600a0000610a0000620a0000630a0000640a0000650a0000660a0000670a0000680a0000690a00006a0a00006b0a00006c0a00006d0a00006e0a00006f0a0000700a0000710a0000720a0000730a0000740a0000750a0000760a0000770a0000780a0000790a00007a0a00007b0a00007c0a00007d0a00007e0a00007f0a0000 - m_AlignBytes: 16 - groupID: 24 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 2576 - particle2: 2577 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 2577 - particle2: 2578 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 2578 - particle2: 2579 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 2579 - particle2: 2580 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 2580 - particle2: 2581 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 2581 - particle2: 2582 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 2582 - particle2: 2583 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 2583 - particle2: 2584 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 2584 - particle2: 2585 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 2585 - particle2: 2586 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 2586 - particle2: 2587 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &265659788 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 265659789} - - component: {fileID: 265659793} - - component: {fileID: 265659792} - - component: {fileID: 265659791} - - component: {fileID: 265659790} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &265659789 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 265659788} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 893001395} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &265659790 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 265659788} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 265659793} - m_Target: {fileID: 265659789} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &265659791 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 265659788} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &265659792 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 265659788} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 24 ---- !u!114 &265659793 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 265659788} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 800a0000810a0000820a0000830a0000840a0000850a0000860a0000870a0000880a0000890a00008a0a00008b0a00008c0a00008d0a00008e0a00008f0a0000900a0000910a0000920a0000930a0000940a0000950a0000960a0000970a0000980a0000990a00009a0a00009b0a00009c0a00009d0a00009e0a00009f0a0000a00a0000a10a0000a20a0000a30a0000a40a0000a50a0000a60a0000a70a0000a80a0000a90a0000aa0a0000ab0a0000ac0a0000ad0a0000ae0a0000af0a0000b00a0000b10a0000b20a0000b30a0000b40a0000b50a0000b60a0000b70a0000b80a0000b90a0000ba0a0000bb0a0000bc0a0000bd0a0000be0a0000bf0a0000c00a0000c10a0000c20a0000c30a0000c40a0000c50a0000c60a0000c70a0000c80a0000c90a0000ca0a0000cb0a0000cc0a0000cd0a0000ce0a0000cf0a0000d00a0000d10a0000d20a0000d30a0000d40a0000d50a0000d60a0000d70a0000d80a0000d90a0000da0a0000db0a0000dc0a0000dd0a0000de0a0000df0a0000e00a0000e10a0000e20a0000e30a0000e40a0000e50a0000e60a0000e70a0000e80a0000e90a0000ea0a0000eb0a0000ec0a0000ed0a0000ee0a0000ef0a0000 - m_AlignBytes: 16 - groupID: 25 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 2688 - particle2: 2689 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 2689 - particle2: 2690 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 2690 - particle2: 2691 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 2691 - particle2: 2692 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 2692 - particle2: 2693 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 2693 - particle2: 2694 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 2694 - particle2: 2695 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 2695 - particle2: 2696 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 2696 - particle2: 2697 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 2697 - particle2: 2698 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 2698 - particle2: 2699 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &274966133 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 274966134} - - component: {fileID: 274966138} - - component: {fileID: 274966137} - - component: {fileID: 274966136} - - component: {fileID: 274966135} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &274966134 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 274966133} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1977632070} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &274966135 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 274966133} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 274966138} - m_Target: {fileID: 274966134} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &274966136 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 274966133} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &274966137 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 274966133} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 25 ---- !u!114 &274966138 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 274966133} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: f00a0000f10a0000f20a0000f30a0000f40a0000f50a0000f60a0000f70a0000f80a0000f90a0000fa0a0000fb0a0000fc0a0000fd0a0000fe0a0000ff0a0000000b0000010b0000020b0000030b0000040b0000050b0000060b0000070b0000080b0000090b00000a0b00000b0b00000c0b00000d0b00000e0b00000f0b0000100b0000110b0000120b0000130b0000140b0000150b0000160b0000170b0000180b0000190b00001a0b00001b0b00001c0b00001d0b00001e0b00001f0b0000200b0000210b0000220b0000230b0000240b0000250b0000260b0000270b0000280b0000290b00002a0b00002b0b00002c0b00002d0b00002e0b00002f0b0000300b0000310b0000320b0000330b0000340b0000350b0000360b0000370b0000380b0000390b00003a0b00003b0b00003c0b00003d0b00003e0b00003f0b0000400b0000410b0000420b0000430b0000440b0000450b0000460b0000470b0000480b0000490b00004a0b00004b0b00004c0b00004d0b00004e0b00004f0b0000500b0000510b0000520b0000530b0000540b0000550b0000560b0000570b0000580b0000590b00005a0b00005b0b00005c0b00005d0b00005e0b00005f0b0000 - m_AlignBytes: 16 - groupID: 26 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 2800 - particle2: 2801 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 2801 - particle2: 2802 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 2802 - particle2: 2803 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 2803 - particle2: 2804 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 2804 - particle2: 2805 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 2805 - particle2: 2806 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 2806 - particle2: 2807 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 2807 - particle2: 2808 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 2808 - particle2: 2809 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 2809 - particle2: 2810 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 2810 - particle2: 2811 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &277586513 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 277586514} - - component: {fileID: 277586518} - - component: {fileID: 277586517} - - component: {fileID: 277586516} - - component: {fileID: 277586515} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &277586514 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 277586513} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 893001395} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &277586515 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 277586513} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 277586518} - m_Target: {fileID: 277586514} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &277586516 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 277586513} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &277586517 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 277586513} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 26 ---- !u!114 &277586518 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 277586513} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 600b0000610b0000620b0000630b0000640b0000650b0000660b0000670b0000680b0000690b00006a0b00006b0b00006c0b00006d0b00006e0b00006f0b0000700b0000710b0000720b0000730b0000740b0000750b0000760b0000770b0000780b0000790b00007a0b00007b0b00007c0b00007d0b00007e0b00007f0b0000800b0000810b0000820b0000830b0000840b0000850b0000860b0000870b0000880b0000890b00008a0b00008b0b00008c0b00008d0b00008e0b00008f0b0000900b0000910b0000920b0000930b0000940b0000950b0000960b0000970b0000980b0000990b00009a0b00009b0b00009c0b00009d0b00009e0b00009f0b0000a00b0000a10b0000a20b0000a30b0000a40b0000a50b0000a60b0000a70b0000a80b0000a90b0000aa0b0000ab0b0000ac0b0000ad0b0000ae0b0000af0b0000b00b0000b10b0000b20b0000b30b0000b40b0000b50b0000b60b0000b70b0000b80b0000b90b0000ba0b0000bb0b0000bc0b0000bd0b0000be0b0000bf0b0000c00b0000c10b0000c20b0000c30b0000c40b0000c50b0000c60b0000c70b0000c80b0000c90b0000ca0b0000cb0b0000cc0b0000cd0b0000ce0b0000cf0b0000 - m_AlignBytes: 16 - groupID: 27 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 2912 - particle2: 2913 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 2913 - particle2: 2914 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 2914 - particle2: 2915 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 2915 - particle2: 2916 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 2916 - particle2: 2917 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 2917 - particle2: 2918 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 2918 - particle2: 2919 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 2919 - particle2: 2920 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 2920 - particle2: 2921 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 2921 - particle2: 2922 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 2922 - particle2: 2923 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &302892550 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 302892551} - - component: {fileID: 302892555} - - component: {fileID: 302892554} - - component: {fileID: 302892553} - - component: {fileID: 302892552} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &302892551 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 302892550} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 713844502} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &302892552 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 302892550} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 302892555} - m_Target: {fileID: 302892551} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &302892553 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 302892550} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &302892554 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 302892550} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 27 ---- !u!114 &302892555 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 302892550} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: d00b0000d10b0000d20b0000d30b0000d40b0000d50b0000d60b0000d70b0000d80b0000d90b0000da0b0000db0b0000dc0b0000dd0b0000de0b0000df0b0000e00b0000e10b0000e20b0000e30b0000e40b0000e50b0000e60b0000e70b0000e80b0000e90b0000ea0b0000eb0b0000ec0b0000ed0b0000ee0b0000ef0b0000f00b0000f10b0000f20b0000f30b0000f40b0000f50b0000f60b0000f70b0000f80b0000f90b0000fa0b0000fb0b0000fc0b0000fd0b0000fe0b0000ff0b0000000c0000010c0000020c0000030c0000040c0000050c0000060c0000070c0000080c0000090c00000a0c00000b0c00000c0c00000d0c00000e0c00000f0c0000100c0000110c0000120c0000130c0000140c0000150c0000160c0000170c0000180c0000190c00001a0c00001b0c00001c0c00001d0c00001e0c00001f0c0000200c0000210c0000220c0000230c0000240c0000250c0000260c0000270c0000280c0000290c00002a0c00002b0c00002c0c00002d0c00002e0c00002f0c0000300c0000310c0000320c0000330c0000340c0000350c0000360c0000370c0000380c0000390c00003a0c00003b0c00003c0c00003d0c00003e0c00003f0c0000 - m_AlignBytes: 16 - groupID: 28 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 3024 - particle2: 3025 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 3025 - particle2: 3026 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 3026 - particle2: 3027 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 3027 - particle2: 3028 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 3028 - particle2: 3029 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 3029 - particle2: 3030 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 3030 - particle2: 3031 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 3031 - particle2: 3032 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 3032 - particle2: 3033 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 3033 - particle2: 3034 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 3034 - particle2: 3035 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &304677350 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 304677351} - - component: {fileID: 304677355} - - component: {fileID: 304677354} - - component: {fileID: 304677353} - - component: {fileID: 304677352} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &304677351 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 304677350} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 249029318} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &304677352 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 304677350} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 304677355} - m_Target: {fileID: 304677351} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &304677353 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 304677350} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &304677354 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 304677350} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 28 ---- !u!114 &304677355 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 304677350} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 400c0000410c0000420c0000430c0000440c0000450c0000460c0000470c0000480c0000490c00004a0c00004b0c00004c0c00004d0c00004e0c00004f0c0000500c0000510c0000520c0000530c0000540c0000550c0000560c0000570c0000580c0000590c00005a0c00005b0c00005c0c00005d0c00005e0c00005f0c0000600c0000610c0000620c0000630c0000640c0000650c0000660c0000670c0000680c0000690c00006a0c00006b0c00006c0c00006d0c00006e0c00006f0c0000700c0000710c0000720c0000730c0000740c0000750c0000760c0000770c0000780c0000790c00007a0c00007b0c00007c0c00007d0c00007e0c00007f0c0000800c0000810c0000820c0000830c0000840c0000850c0000860c0000870c0000880c0000890c00008a0c00008b0c00008c0c00008d0c00008e0c00008f0c0000900c0000910c0000920c0000930c0000940c0000950c0000960c0000970c0000980c0000990c00009a0c00009b0c00009c0c00009d0c00009e0c00009f0c0000a00c0000a10c0000a20c0000a30c0000a40c0000a50c0000a60c0000a70c0000a80c0000a90c0000aa0c0000ab0c0000ac0c0000ad0c0000ae0c0000af0c0000 - m_AlignBytes: 16 - groupID: 29 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 3136 - particle2: 3137 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 3137 - particle2: 3138 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 3138 - particle2: 3139 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 3139 - particle2: 3140 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 3140 - particle2: 3141 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 3141 - particle2: 3142 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 3142 - particle2: 3143 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 3143 - particle2: 3144 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 3144 - particle2: 3145 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 3145 - particle2: 3146 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 3146 - particle2: 3147 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &334659106 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 334659107} - - component: {fileID: 334659111} - - component: {fileID: 334659110} - - component: {fileID: 334659109} - - component: {fileID: 334659108} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &334659107 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 334659106} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 648480057} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &334659108 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 334659106} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 334659111} - m_Target: {fileID: 334659107} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &334659109 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 334659106} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &334659110 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 334659106} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 29 ---- !u!114 &334659111 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 334659106} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: b00c0000b10c0000b20c0000b30c0000b40c0000b50c0000b60c0000b70c0000b80c0000b90c0000ba0c0000bb0c0000bc0c0000bd0c0000be0c0000bf0c0000c00c0000c10c0000c20c0000c30c0000c40c0000c50c0000c60c0000c70c0000c80c0000c90c0000ca0c0000cb0c0000cc0c0000cd0c0000ce0c0000cf0c0000d00c0000d10c0000d20c0000d30c0000d40c0000d50c0000d60c0000d70c0000d80c0000d90c0000da0c0000db0c0000dc0c0000dd0c0000de0c0000df0c0000e00c0000e10c0000e20c0000e30c0000e40c0000e50c0000e60c0000e70c0000e80c0000e90c0000ea0c0000eb0c0000ec0c0000ed0c0000ee0c0000ef0c0000f00c0000f10c0000f20c0000f30c0000f40c0000f50c0000f60c0000f70c0000f80c0000f90c0000fa0c0000fb0c0000fc0c0000fd0c0000fe0c0000ff0c0000000d0000010d0000020d0000030d0000040d0000050d0000060d0000070d0000080d0000090d00000a0d00000b0d00000c0d00000d0d00000e0d00000f0d0000100d0000110d0000120d0000130d0000140d0000150d0000160d0000170d0000180d0000190d00001a0d00001b0d00001c0d00001d0d00001e0d00001f0d0000 - m_AlignBytes: 16 - groupID: 30 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 3248 - particle2: 3249 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 3249 - particle2: 3250 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 3250 - particle2: 3251 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 3251 - particle2: 3252 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 3252 - particle2: 3253 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 3253 - particle2: 3254 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 3254 - particle2: 3255 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 3255 - particle2: 3256 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 3256 - particle2: 3257 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 3257 - particle2: 3258 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 3258 - particle2: 3259 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &347068006 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 347068007} - - component: {fileID: 347068011} - - component: {fileID: 347068010} - - component: {fileID: 347068009} - - component: {fileID: 347068008} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &347068007 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 347068006} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2009678977} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &347068008 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 347068006} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 347068011} - m_Target: {fileID: 347068007} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &347068009 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 347068006} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &347068010 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 347068006} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 30 ---- !u!114 &347068011 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 347068006} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 200d0000210d0000220d0000230d0000240d0000250d0000260d0000270d0000280d0000290d00002a0d00002b0d00002c0d00002d0d00002e0d00002f0d0000300d0000310d0000320d0000330d0000340d0000350d0000360d0000370d0000380d0000390d00003a0d00003b0d00003c0d00003d0d00003e0d00003f0d0000400d0000410d0000420d0000430d0000440d0000450d0000460d0000470d0000480d0000490d00004a0d00004b0d00004c0d00004d0d00004e0d00004f0d0000500d0000510d0000520d0000530d0000540d0000550d0000560d0000570d0000580d0000590d00005a0d00005b0d00005c0d00005d0d00005e0d00005f0d0000600d0000610d0000620d0000630d0000640d0000650d0000660d0000670d0000680d0000690d00006a0d00006b0d00006c0d00006d0d00006e0d00006f0d0000700d0000710d0000720d0000730d0000740d0000750d0000760d0000770d0000780d0000790d00007a0d00007b0d00007c0d00007d0d00007e0d00007f0d0000800d0000810d0000820d0000830d0000840d0000850d0000860d0000870d0000880d0000890d00008a0d00008b0d00008c0d00008d0d00008e0d00008f0d0000 - m_AlignBytes: 16 - groupID: 31 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 3360 - particle2: 3361 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 3361 - particle2: 3362 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 3362 - particle2: 3363 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 3363 - particle2: 3364 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 3364 - particle2: 3365 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 3365 - particle2: 3366 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 3366 - particle2: 3367 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 3367 - particle2: 3368 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 3368 - particle2: 3369 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 3369 - particle2: 3370 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 3370 - particle2: 3371 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &353133263 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 353133264} - - component: {fileID: 353133268} - - component: {fileID: 353133267} - - component: {fileID: 353133266} - - component: {fileID: 353133265} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &353133264 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 353133263} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1628171963} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &353133265 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 353133263} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 353133268} - m_Target: {fileID: 353133264} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &353133266 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 353133263} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &353133267 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 353133263} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 31 ---- !u!114 &353133268 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 353133263} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 900d0000910d0000920d0000930d0000940d0000950d0000960d0000970d0000980d0000990d00009a0d00009b0d00009c0d00009d0d00009e0d00009f0d0000a00d0000a10d0000a20d0000a30d0000a40d0000a50d0000a60d0000a70d0000a80d0000a90d0000aa0d0000ab0d0000ac0d0000ad0d0000ae0d0000af0d0000b00d0000b10d0000b20d0000b30d0000b40d0000b50d0000b60d0000b70d0000b80d0000b90d0000ba0d0000bb0d0000bc0d0000bd0d0000be0d0000bf0d0000c00d0000c10d0000c20d0000c30d0000c40d0000c50d0000c60d0000c70d0000c80d0000c90d0000ca0d0000cb0d0000cc0d0000cd0d0000ce0d0000cf0d0000d00d0000d10d0000d20d0000d30d0000d40d0000d50d0000d60d0000d70d0000d80d0000d90d0000da0d0000db0d0000dc0d0000dd0d0000de0d0000df0d0000e00d0000e10d0000e20d0000e30d0000e40d0000e50d0000e60d0000e70d0000e80d0000e90d0000ea0d0000eb0d0000ec0d0000ed0d0000ee0d0000ef0d0000f00d0000f10d0000f20d0000f30d0000f40d0000f50d0000f60d0000f70d0000f80d0000f90d0000fa0d0000fb0d0000fc0d0000fd0d0000fe0d0000ff0d0000 - m_AlignBytes: 16 - groupID: 32 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 3472 - particle2: 3473 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 3473 - particle2: 3474 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 3474 - particle2: 3475 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 3475 - particle2: 3476 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 3476 - particle2: 3477 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 3477 - particle2: 3478 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 3478 - particle2: 3479 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 3479 - particle2: 3480 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 3480 - particle2: 3481 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 3481 - particle2: 3482 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 3482 - particle2: 3483 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &356687287 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 356687288} - - component: {fileID: 356687292} - - component: {fileID: 356687291} - - component: {fileID: 356687290} - - component: {fileID: 356687289} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &356687288 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 356687287} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1240601735} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &356687289 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 356687287} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 356687292} - m_Target: {fileID: 356687288} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &356687290 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 356687287} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &356687291 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 356687287} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 32 ---- !u!114 &356687292 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 356687287} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 000e0000010e0000020e0000030e0000040e0000050e0000060e0000070e0000080e0000090e00000a0e00000b0e00000c0e00000d0e00000e0e00000f0e0000100e0000110e0000120e0000130e0000140e0000150e0000160e0000170e0000180e0000190e00001a0e00001b0e00001c0e00001d0e00001e0e00001f0e0000200e0000210e0000220e0000230e0000240e0000250e0000260e0000270e0000280e0000290e00002a0e00002b0e00002c0e00002d0e00002e0e00002f0e0000300e0000310e0000320e0000330e0000340e0000350e0000360e0000370e0000380e0000390e00003a0e00003b0e00003c0e00003d0e00003e0e00003f0e0000400e0000410e0000420e0000430e0000440e0000450e0000460e0000470e0000480e0000490e00004a0e00004b0e00004c0e00004d0e00004e0e00004f0e0000500e0000510e0000520e0000530e0000540e0000550e0000560e0000570e0000580e0000590e00005a0e00005b0e00005c0e00005d0e00005e0e00005f0e0000600e0000610e0000620e0000630e0000640e0000650e0000660e0000670e0000680e0000690e00006a0e00006b0e00006c0e00006d0e00006e0e00006f0e0000 - m_AlignBytes: 16 - groupID: 33 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 3584 - particle2: 3585 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 3585 - particle2: 3586 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 3586 - particle2: 3587 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 3587 - particle2: 3588 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 3588 - particle2: 3589 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 3589 - particle2: 3590 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 3590 - particle2: 3591 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 3591 - particle2: 3592 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 3592 - particle2: 3593 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 3593 - particle2: 3594 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 3594 - particle2: 3595 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &360658607 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 360658608} - - component: {fileID: 360658612} - - component: {fileID: 360658611} - - component: {fileID: 360658610} - - component: {fileID: 360658609} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &360658608 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 360658607} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1306593279} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &360658609 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 360658607} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 360658612} - m_Target: {fileID: 360658608} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &360658610 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 360658607} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &360658611 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 360658607} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 33 ---- !u!114 &360658612 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 360658607} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 700e0000710e0000720e0000730e0000740e0000750e0000760e0000770e0000780e0000790e00007a0e00007b0e00007c0e00007d0e00007e0e00007f0e0000800e0000810e0000820e0000830e0000840e0000850e0000860e0000870e0000880e0000890e00008a0e00008b0e00008c0e00008d0e00008e0e00008f0e0000900e0000910e0000920e0000930e0000940e0000950e0000960e0000970e0000980e0000990e00009a0e00009b0e00009c0e00009d0e00009e0e00009f0e0000a00e0000a10e0000a20e0000a30e0000a40e0000a50e0000a60e0000a70e0000a80e0000a90e0000aa0e0000ab0e0000ac0e0000ad0e0000ae0e0000af0e0000b00e0000b10e0000b20e0000b30e0000b40e0000b50e0000b60e0000b70e0000b80e0000b90e0000ba0e0000bb0e0000bc0e0000bd0e0000be0e0000bf0e0000c00e0000c10e0000c20e0000c30e0000c40e0000c50e0000c60e0000c70e0000c80e0000c90e0000ca0e0000cb0e0000cc0e0000cd0e0000ce0e0000cf0e0000d00e0000d10e0000d20e0000d30e0000d40e0000d50e0000d60e0000d70e0000d80e0000d90e0000da0e0000db0e0000dc0e0000dd0e0000de0e0000df0e0000 - m_AlignBytes: 16 - groupID: 34 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 3696 - particle2: 3697 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 3697 - particle2: 3698 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 3698 - particle2: 3699 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 3699 - particle2: 3700 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 3700 - particle2: 3701 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 3701 - particle2: 3702 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 3702 - particle2: 3703 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 3703 - particle2: 3704 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 3704 - particle2: 3705 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 3705 - particle2: 3706 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 3706 - particle2: 3707 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &386305777 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 386305778} - - component: {fileID: 386305782} - - component: {fileID: 386305781} - - component: {fileID: 386305780} - - component: {fileID: 386305779} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &386305778 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 386305777} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1640435994} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &386305779 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 386305777} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 386305782} - m_Target: {fileID: 386305778} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &386305780 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 386305777} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &386305781 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 386305777} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 34 ---- !u!114 &386305782 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 386305777} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: e00e0000e10e0000e20e0000e30e0000e40e0000e50e0000e60e0000e70e0000e80e0000e90e0000ea0e0000eb0e0000ec0e0000ed0e0000ee0e0000ef0e0000f00e0000f10e0000f20e0000f30e0000f40e0000f50e0000f60e0000f70e0000f80e0000f90e0000fa0e0000fb0e0000fc0e0000fd0e0000fe0e0000ff0e0000000f0000010f0000020f0000030f0000040f0000050f0000060f0000070f0000080f0000090f00000a0f00000b0f00000c0f00000d0f00000e0f00000f0f0000100f0000110f0000120f0000130f0000140f0000150f0000160f0000170f0000180f0000190f00001a0f00001b0f00001c0f00001d0f00001e0f00001f0f0000200f0000210f0000220f0000230f0000240f0000250f0000260f0000270f0000280f0000290f00002a0f00002b0f00002c0f00002d0f00002e0f00002f0f0000300f0000310f0000320f0000330f0000340f0000350f0000360f0000370f0000380f0000390f00003a0f00003b0f00003c0f00003d0f00003e0f00003f0f0000400f0000410f0000420f0000430f0000440f0000450f0000460f0000470f0000480f0000490f00004a0f00004b0f00004c0f00004d0f00004e0f00004f0f0000 - m_AlignBytes: 16 - groupID: 35 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 3808 - particle2: 3809 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 3809 - particle2: 3810 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 3810 - particle2: 3811 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 3811 - particle2: 3812 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 3812 - particle2: 3813 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 3813 - particle2: 3814 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 3814 - particle2: 3815 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 3815 - particle2: 3816 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 3816 - particle2: 3817 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 3817 - particle2: 3818 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 3818 - particle2: 3819 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &386703046 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 386703047} - - component: {fileID: 386703051} - - component: {fileID: 386703050} - - component: {fileID: 386703049} - - component: {fileID: 386703048} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &386703047 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 386703046} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1241971666} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &386703048 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 386703046} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 386703051} - m_Target: {fileID: 386703047} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &386703049 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 386703046} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &386703050 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 386703046} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 35 ---- !u!114 &386703051 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 386703046} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 500f0000510f0000520f0000530f0000540f0000550f0000560f0000570f0000580f0000590f00005a0f00005b0f00005c0f00005d0f00005e0f00005f0f0000600f0000610f0000620f0000630f0000640f0000650f0000660f0000670f0000680f0000690f00006a0f00006b0f00006c0f00006d0f00006e0f00006f0f0000700f0000710f0000720f0000730f0000740f0000750f0000760f0000770f0000780f0000790f00007a0f00007b0f00007c0f00007d0f00007e0f00007f0f0000800f0000810f0000820f0000830f0000840f0000850f0000860f0000870f0000880f0000890f00008a0f00008b0f00008c0f00008d0f00008e0f00008f0f0000900f0000910f0000920f0000930f0000940f0000950f0000960f0000970f0000980f0000990f00009a0f00009b0f00009c0f00009d0f00009e0f00009f0f0000a00f0000a10f0000a20f0000a30f0000a40f0000a50f0000a60f0000a70f0000a80f0000a90f0000aa0f0000ab0f0000ac0f0000ad0f0000ae0f0000af0f0000b00f0000b10f0000b20f0000b30f0000b40f0000b50f0000b60f0000b70f0000b80f0000b90f0000ba0f0000bb0f0000bc0f0000bd0f0000be0f0000bf0f0000 - m_AlignBytes: 16 - groupID: 36 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 3920 - particle2: 3921 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 3921 - particle2: 3922 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 3922 - particle2: 3923 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 3923 - particle2: 3924 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 3924 - particle2: 3925 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 3925 - particle2: 3926 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 3926 - particle2: 3927 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 3927 - particle2: 3928 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 3928 - particle2: 3929 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 3929 - particle2: 3930 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 3930 - particle2: 3931 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &393174416 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 393174417} - - component: {fileID: 393174421} - - component: {fileID: 393174420} - - component: {fileID: 393174419} - - component: {fileID: 393174418} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &393174417 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 393174416} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 940408952} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &393174418 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 393174416} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 393174421} - m_Target: {fileID: 393174417} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &393174419 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 393174416} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &393174420 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 393174416} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 36 ---- !u!114 &393174421 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 393174416} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: c00f0000c10f0000c20f0000c30f0000c40f0000c50f0000c60f0000c70f0000c80f0000c90f0000ca0f0000cb0f0000cc0f0000cd0f0000ce0f0000cf0f0000d00f0000d10f0000d20f0000d30f0000d40f0000d50f0000d60f0000d70f0000d80f0000d90f0000da0f0000db0f0000dc0f0000dd0f0000de0f0000df0f0000e00f0000e10f0000e20f0000e30f0000e40f0000e50f0000e60f0000e70f0000e80f0000e90f0000ea0f0000eb0f0000ec0f0000ed0f0000ee0f0000ef0f0000f00f0000f10f0000f20f0000f30f0000f40f0000f50f0000f60f0000f70f0000f80f0000f90f0000fa0f0000fb0f0000fc0f0000fd0f0000fe0f0000ff0f0000001000000110000002100000031000000410000005100000061000000710000008100000091000000a1000000b1000000c1000000d1000000e1000000f100000101000001110000012100000131000001410000015100000161000001710000018100000191000001a1000001b1000001c1000001d1000001e1000001f100000201000002110000022100000231000002410000025100000261000002710000028100000291000002a1000002b1000002c1000002d1000002e1000002f100000 - m_AlignBytes: 16 - groupID: 37 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 4032 - particle2: 4033 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 4033 - particle2: 4034 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 4034 - particle2: 4035 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 4035 - particle2: 4036 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 4036 - particle2: 4037 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 4037 - particle2: 4038 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 4038 - particle2: 4039 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 4039 - particle2: 4040 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 4040 - particle2: 4041 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 4041 - particle2: 4042 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 4042 - particle2: 4043 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &399904145 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 399904146} - - component: {fileID: 399904150} - - component: {fileID: 399904149} - - component: {fileID: 399904148} - - component: {fileID: 399904147} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &399904146 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 399904145} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1977632070} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &399904147 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 399904145} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 399904150} - m_Target: {fileID: 399904146} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &399904148 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 399904145} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &399904149 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 399904145} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 37 ---- !u!114 &399904150 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 399904145} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 301000003110000032100000331000003410000035100000361000003710000038100000391000003a1000003b1000003c1000003d1000003e1000003f100000401000004110000042100000431000004410000045100000461000004710000048100000491000004a1000004b1000004c1000004d1000004e1000004f100000501000005110000052100000531000005410000055100000561000005710000058100000591000005a1000005b1000005c1000005d1000005e1000005f100000601000006110000062100000631000006410000065100000661000006710000068100000691000006a1000006b1000006c1000006d1000006e1000006f100000701000007110000072100000731000007410000075100000761000007710000078100000791000007a1000007b1000007c1000007d1000007e1000007f100000801000008110000082100000831000008410000085100000861000008710000088100000891000008a1000008b1000008c1000008d1000008e1000008f100000901000009110000092100000931000009410000095100000961000009710000098100000991000009a1000009b1000009c1000009d1000009e1000009f100000 - m_AlignBytes: 16 - groupID: 38 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 4144 - particle2: 4145 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 4145 - particle2: 4146 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 4146 - particle2: 4147 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 4147 - particle2: 4148 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 4148 - particle2: 4149 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 4149 - particle2: 4150 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 4150 - particle2: 4151 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 4151 - particle2: 4152 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 4152 - particle2: 4153 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 4153 - particle2: 4154 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 4154 - particle2: 4155 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1001 &421764872 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_RootOrder - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_LocalScale.x - value: 1.2 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_LocalScale.y - value: 1.2 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_LocalScale.z - value: 1.2 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 2300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - propertyPath: 'm_Materials.Array.data[0]' - value: - objectReference: {fileID: 2100000, guid: a0a5f9e13fa7c47f78547e54896609da, type: 2} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: - - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - insertIndex: -1 - addedObject: {fileID: 506459882} - - targetCorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - insertIndex: -1 - addedObject: {fileID: 506459883} - m_SourcePrefab: {fileID: 100100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} ---- !u!1 &426164208 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 426164209} - m_Layer: 0 - m_Name: Row (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &426164209 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 426164208} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -1.6} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 584208411} - - {fileID: 1523215163} - - {fileID: 1895783475} - - {fileID: 1898534085} - - {fileID: 1948354618} - - {fileID: 2078944946} - - {fileID: 2145370371} - - {fileID: 40955815} - - {fileID: 1789705481} - - {fileID: 1753057674} - m_Father: {fileID: 1760688768} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &437496966 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 437496967} - - component: {fileID: 437496971} - - component: {fileID: 437496970} - - component: {fileID: 437496969} - - component: {fileID: 437496968} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &437496967 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 437496966} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 54623967} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &437496968 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 437496966} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 437496971} - m_Target: {fileID: 437496967} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &437496969 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 437496966} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &437496970 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 437496966} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 38 ---- !u!114 &437496971 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 437496966} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: a0100000a1100000a2100000a3100000a4100000a5100000a6100000a7100000a8100000a9100000aa100000ab100000ac100000ad100000ae100000af100000b0100000b1100000b2100000b3100000b4100000b5100000b6100000b7100000b8100000b9100000ba100000bb100000bc100000bd100000be100000bf100000c0100000c1100000c2100000c3100000c4100000c5100000c6100000c7100000c8100000c9100000ca100000cb100000cc100000cd100000ce100000cf100000d0100000d1100000d2100000d3100000d4100000d5100000d6100000d7100000d8100000d9100000da100000db100000dc100000dd100000de100000df100000e0100000e1100000e2100000e3100000e4100000e5100000e6100000e7100000e8100000e9100000ea100000eb100000ec100000ed100000ee100000ef100000f0100000f1100000f2100000f3100000f4100000f5100000f6100000f7100000f8100000f9100000fa100000fb100000fc100000fd100000fe100000ff100000001100000111000002110000031100000411000005110000061100000711000008110000091100000a1100000b1100000c1100000d1100000e1100000f110000 - m_AlignBytes: 16 - groupID: 39 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 4256 - particle2: 4257 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 4257 - particle2: 4258 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 4258 - particle2: 4259 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 4259 - particle2: 4260 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 4260 - particle2: 4261 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 4261 - particle2: 4262 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 4262 - particle2: 4263 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 4263 - particle2: 4264 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 4264 - particle2: 4265 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 4265 - particle2: 4266 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 4266 - particle2: 4267 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &444273475 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 444273476} - - component: {fileID: 444273480} - - component: {fileID: 444273479} - - component: {fileID: 444273478} - - component: {fileID: 444273477} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &444273476 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 444273475} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 713844502} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &444273477 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 444273475} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 444273480} - m_Target: {fileID: 444273476} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &444273478 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 444273475} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &444273479 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 444273475} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 39 ---- !u!114 &444273480 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 444273475} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 101100001111000012110000131100001411000015110000161100001711000018110000191100001a1100001b1100001c1100001d1100001e1100001f110000201100002111000022110000231100002411000025110000261100002711000028110000291100002a1100002b1100002c1100002d1100002e1100002f110000301100003111000032110000331100003411000035110000361100003711000038110000391100003a1100003b1100003c1100003d1100003e1100003f110000401100004111000042110000431100004411000045110000461100004711000048110000491100004a1100004b1100004c1100004d1100004e1100004f110000501100005111000052110000531100005411000055110000561100005711000058110000591100005a1100005b1100005c1100005d1100005e1100005f110000601100006111000062110000631100006411000065110000661100006711000068110000691100006a1100006b1100006c1100006d1100006e1100006f110000701100007111000072110000731100007411000075110000761100007711000078110000791100007a1100007b1100007c1100007d1100007e1100007f110000 - m_AlignBytes: 16 - groupID: 40 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 4368 - particle2: 4369 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 4369 - particle2: 4370 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 4370 - particle2: 4371 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 4371 - particle2: 4372 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 4372 - particle2: 4373 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 4373 - particle2: 4374 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 4374 - particle2: 4375 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 4375 - particle2: 4376 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 4376 - particle2: 4377 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 4377 - particle2: 4378 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 4378 - particle2: 4379 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &449353292 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 449353293} - - component: {fileID: 449353297} - - component: {fileID: 449353296} - - component: {fileID: 449353295} - - component: {fileID: 449353294} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &449353293 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 449353292} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1628171963} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &449353294 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 449353292} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 449353297} - m_Target: {fileID: 449353293} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &449353295 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 449353292} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &449353296 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 449353292} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 40 ---- !u!114 &449353297 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 449353292} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 801100008111000082110000831100008411000085110000861100008711000088110000891100008a1100008b1100008c1100008d1100008e1100008f110000901100009111000092110000931100009411000095110000961100009711000098110000991100009a1100009b1100009c1100009d1100009e1100009f110000a0110000a1110000a2110000a3110000a4110000a5110000a6110000a7110000a8110000a9110000aa110000ab110000ac110000ad110000ae110000af110000b0110000b1110000b2110000b3110000b4110000b5110000b6110000b7110000b8110000b9110000ba110000bb110000bc110000bd110000be110000bf110000c0110000c1110000c2110000c3110000c4110000c5110000c6110000c7110000c8110000c9110000ca110000cb110000cc110000cd110000ce110000cf110000d0110000d1110000d2110000d3110000d4110000d5110000d6110000d7110000d8110000d9110000da110000db110000dc110000dd110000de110000df110000e0110000e1110000e2110000e3110000e4110000e5110000e6110000e7110000e8110000e9110000ea110000eb110000ec110000ed110000ee110000ef110000 - m_AlignBytes: 16 - groupID: 41 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 4480 - particle2: 4481 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 4481 - particle2: 4482 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 4482 - particle2: 4483 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 4483 - particle2: 4484 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 4484 - particle2: 4485 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 4485 - particle2: 4486 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 4486 - particle2: 4487 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 4487 - particle2: 4488 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 4488 - particle2: 4489 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 4489 - particle2: 4490 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 4490 - particle2: 4491 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &449771828 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 449771829} - - component: {fileID: 449771833} - - component: {fileID: 449771832} - - component: {fileID: 449771831} - - component: {fileID: 449771830} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &449771829 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 449771828} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 472161722} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &449771830 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 449771828} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 449771833} - m_Target: {fileID: 449771829} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &449771831 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 449771828} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &449771832 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 449771828} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 41 ---- !u!114 &449771833 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 449771828} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: f0110000f1110000f2110000f3110000f4110000f5110000f6110000f7110000f8110000f9110000fa110000fb110000fc110000fd110000fe110000ff110000001200000112000002120000031200000412000005120000061200000712000008120000091200000a1200000b1200000c1200000d1200000e1200000f120000101200001112000012120000131200001412000015120000161200001712000018120000191200001a1200001b1200001c1200001d1200001e1200001f120000201200002112000022120000231200002412000025120000261200002712000028120000291200002a1200002b1200002c1200002d1200002e1200002f120000301200003112000032120000331200003412000035120000361200003712000038120000391200003a1200003b1200003c1200003d1200003e1200003f120000401200004112000042120000431200004412000045120000461200004712000048120000491200004a1200004b1200004c1200004d1200004e1200004f120000501200005112000052120000531200005412000055120000561200005712000058120000591200005a1200005b1200005c1200005d1200005e1200005f120000 - m_AlignBytes: 16 - groupID: 42 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 4592 - particle2: 4593 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 4593 - particle2: 4594 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 4594 - particle2: 4595 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 4595 - particle2: 4596 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 4596 - particle2: 4597 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 4597 - particle2: 4598 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 4598 - particle2: 4599 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 4599 - particle2: 4600 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 4600 - particle2: 4601 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 4601 - particle2: 4602 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 4602 - particle2: 4603 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &451433693 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 451433694} - - component: {fileID: 451433698} - - component: {fileID: 451433697} - - component: {fileID: 451433696} - - component: {fileID: 451433695} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &451433694 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 451433693} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 648480057} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &451433695 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 451433693} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 451433698} - m_Target: {fileID: 451433694} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &451433696 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 451433693} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &451433697 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 451433693} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 42 ---- !u!114 &451433698 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 451433693} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 601200006112000062120000631200006412000065120000661200006712000068120000691200006a1200006b1200006c1200006d1200006e1200006f120000701200007112000072120000731200007412000075120000761200007712000078120000791200007a1200007b1200007c1200007d1200007e1200007f120000801200008112000082120000831200008412000085120000861200008712000088120000891200008a1200008b1200008c1200008d1200008e1200008f120000901200009112000092120000931200009412000095120000961200009712000098120000991200009a1200009b1200009c1200009d1200009e1200009f120000a0120000a1120000a2120000a3120000a4120000a5120000a6120000a7120000a8120000a9120000aa120000ab120000ac120000ad120000ae120000af120000b0120000b1120000b2120000b3120000b4120000b5120000b6120000b7120000b8120000b9120000ba120000bb120000bc120000bd120000be120000bf120000c0120000c1120000c2120000c3120000c4120000c5120000c6120000c7120000c8120000c9120000ca120000cb120000cc120000cd120000ce120000cf120000 - m_AlignBytes: 16 - groupID: 43 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 4704 - particle2: 4705 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 4705 - particle2: 4706 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 4706 - particle2: 4707 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 4707 - particle2: 4708 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 4708 - particle2: 4709 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 4709 - particle2: 4710 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 4710 - particle2: 4711 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 4711 - particle2: 4712 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 4712 - particle2: 4713 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 4713 - particle2: 4714 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 4714 - particle2: 4715 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &452192105 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 452192106} - - component: {fileID: 452192110} - - component: {fileID: 452192109} - - component: {fileID: 452192108} - - component: {fileID: 452192107} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &452192106 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 452192105} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1640435994} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &452192107 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 452192105} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 452192110} - m_Target: {fileID: 452192106} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &452192108 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 452192105} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &452192109 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 452192105} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 43 ---- !u!114 &452192110 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 452192105} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: d0120000d1120000d2120000d3120000d4120000d5120000d6120000d7120000d8120000d9120000da120000db120000dc120000dd120000de120000df120000e0120000e1120000e2120000e3120000e4120000e5120000e6120000e7120000e8120000e9120000ea120000eb120000ec120000ed120000ee120000ef120000f0120000f1120000f2120000f3120000f4120000f5120000f6120000f7120000f8120000f9120000fa120000fb120000fc120000fd120000fe120000ff120000001300000113000002130000031300000413000005130000061300000713000008130000091300000a1300000b1300000c1300000d1300000e1300000f130000101300001113000012130000131300001413000015130000161300001713000018130000191300001a1300001b1300001c1300001d1300001e1300001f130000201300002113000022130000231300002413000025130000261300002713000028130000291300002a1300002b1300002c1300002d1300002e1300002f130000301300003113000032130000331300003413000035130000361300003713000038130000391300003a1300003b1300003c1300003d1300003e1300003f130000 - m_AlignBytes: 16 - groupID: 44 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 4816 - particle2: 4817 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 4817 - particle2: 4818 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 4818 - particle2: 4819 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 4819 - particle2: 4820 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 4820 - particle2: 4821 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 4821 - particle2: 4822 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 4822 - particle2: 4823 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 4823 - particle2: 4824 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 4824 - particle2: 4825 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 4825 - particle2: 4826 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 4826 - particle2: 4827 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &453529545 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 453529546} - - component: {fileID: 453529550} - - component: {fileID: 453529549} - - component: {fileID: 453529548} - - component: {fileID: 453529547} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &453529546 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 453529545} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 54623967} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &453529547 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 453529545} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 453529550} - m_Target: {fileID: 453529546} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &453529548 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 453529545} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &453529549 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 453529545} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 44 ---- !u!114 &453529550 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 453529545} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 401300004113000042130000431300004413000045130000461300004713000048130000491300004a1300004b1300004c1300004d1300004e1300004f130000501300005113000052130000531300005413000055130000561300005713000058130000591300005a1300005b1300005c1300005d1300005e1300005f130000601300006113000062130000631300006413000065130000661300006713000068130000691300006a1300006b1300006c1300006d1300006e1300006f130000701300007113000072130000731300007413000075130000761300007713000078130000791300007a1300007b1300007c1300007d1300007e1300007f130000801300008113000082130000831300008413000085130000861300008713000088130000891300008a1300008b1300008c1300008d1300008e1300008f130000901300009113000092130000931300009413000095130000961300009713000098130000991300009a1300009b1300009c1300009d1300009e1300009f130000a0130000a1130000a2130000a3130000a4130000a5130000a6130000a7130000a8130000a9130000aa130000ab130000ac130000ad130000ae130000af130000 - m_AlignBytes: 16 - groupID: 45 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 4928 - particle2: 4929 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 4929 - particle2: 4930 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 4930 - particle2: 4931 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 4931 - particle2: 4932 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 4932 - particle2: 4933 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 4933 - particle2: 4934 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 4934 - particle2: 4935 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 4935 - particle2: 4936 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 4936 - particle2: 4937 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 4937 - particle2: 4938 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 4938 - particle2: 4939 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &455432479 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 455432480} - - component: {fileID: 455432484} - - component: {fileID: 455432483} - - component: {fileID: 455432482} - - component: {fileID: 455432481} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &455432480 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 455432479} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 713844502} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &455432481 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 455432479} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 455432484} - m_Target: {fileID: 455432480} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &455432482 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 455432479} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &455432483 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 455432479} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 45 ---- !u!114 &455432484 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 455432479} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: b0130000b1130000b2130000b3130000b4130000b5130000b6130000b7130000b8130000b9130000ba130000bb130000bc130000bd130000be130000bf130000c0130000c1130000c2130000c3130000c4130000c5130000c6130000c7130000c8130000c9130000ca130000cb130000cc130000cd130000ce130000cf130000d0130000d1130000d2130000d3130000d4130000d5130000d6130000d7130000d8130000d9130000da130000db130000dc130000dd130000de130000df130000e0130000e1130000e2130000e3130000e4130000e5130000e6130000e7130000e8130000e9130000ea130000eb130000ec130000ed130000ee130000ef130000f0130000f1130000f2130000f3130000f4130000f5130000f6130000f7130000f8130000f9130000fa130000fb130000fc130000fd130000fe130000ff130000001400000114000002140000031400000414000005140000061400000714000008140000091400000a1400000b1400000c1400000d1400000e1400000f140000101400001114000012140000131400001414000015140000161400001714000018140000191400001a1400001b1400001c1400001d1400001e1400001f140000 - m_AlignBytes: 16 - groupID: 46 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 5040 - particle2: 5041 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 5041 - particle2: 5042 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 5042 - particle2: 5043 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 5043 - particle2: 5044 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 5044 - particle2: 5045 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 5045 - particle2: 5046 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 5046 - particle2: 5047 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 5047 - particle2: 5048 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 5048 - particle2: 5049 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 5049 - particle2: 5050 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 5050 - particle2: 5051 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &469876704 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 469876705} - - component: {fileID: 469876709} - - component: {fileID: 469876708} - - component: {fileID: 469876707} - - component: {fileID: 469876706} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &469876705 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 469876704} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1798495239} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &469876706 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 469876704} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 469876709} - m_Target: {fileID: 469876705} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &469876707 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 469876704} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &469876708 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 469876704} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 46 ---- !u!114 &469876709 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 469876704} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 201400002114000022140000231400002414000025140000261400002714000028140000291400002a1400002b1400002c1400002d1400002e1400002f140000301400003114000032140000331400003414000035140000361400003714000038140000391400003a1400003b1400003c1400003d1400003e1400003f140000401400004114000042140000431400004414000045140000461400004714000048140000491400004a1400004b1400004c1400004d1400004e1400004f140000501400005114000052140000531400005414000055140000561400005714000058140000591400005a1400005b1400005c1400005d1400005e1400005f140000601400006114000062140000631400006414000065140000661400006714000068140000691400006a1400006b1400006c1400006d1400006e1400006f140000701400007114000072140000731400007414000075140000761400007714000078140000791400007a1400007b1400007c1400007d1400007e1400007f140000801400008114000082140000831400008414000085140000861400008714000088140000891400008a1400008b1400008c1400008d1400008e1400008f140000 - m_AlignBytes: 16 - groupID: 47 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 5152 - particle2: 5153 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 5153 - particle2: 5154 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 5154 - particle2: 5155 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 5155 - particle2: 5156 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 5156 - particle2: 5157 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 5157 - particle2: 5158 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 5158 - particle2: 5159 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 5159 - particle2: 5160 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 5160 - particle2: 5161 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 5161 - particle2: 5162 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 5162 - particle2: 5163 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &472161721 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 472161722} - m_Layer: 0 - m_Name: Row (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &472161722 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 472161721} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -0.2} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 21655691} - - {fileID: 449771829} - - {fileID: 61099067} - - {fileID: 67321349} - - {fileID: 531662323} - - {fileID: 138556973} - - {fileID: 515056253} - - {fileID: 1537736705} - - {fileID: 1503252370} - - {fileID: 811913319} - m_Father: {fileID: 1027659676} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &474752658 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 474752659} - - component: {fileID: 474752663} - - component: {fileID: 474752662} - - component: {fileID: 474752661} - - component: {fileID: 474752660} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &474752659 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 474752658} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1306593279} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &474752660 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 474752658} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 474752663} - m_Target: {fileID: 474752659} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &474752661 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 474752658} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &474752662 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 474752658} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 47 ---- !u!114 &474752663 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 474752658} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 901400009114000092140000931400009414000095140000961400009714000098140000991400009a1400009b1400009c1400009d1400009e1400009f140000a0140000a1140000a2140000a3140000a4140000a5140000a6140000a7140000a8140000a9140000aa140000ab140000ac140000ad140000ae140000af140000b0140000b1140000b2140000b3140000b4140000b5140000b6140000b7140000b8140000b9140000ba140000bb140000bc140000bd140000be140000bf140000c0140000c1140000c2140000c3140000c4140000c5140000c6140000c7140000c8140000c9140000ca140000cb140000cc140000cd140000ce140000cf140000d0140000d1140000d2140000d3140000d4140000d5140000d6140000d7140000d8140000d9140000da140000db140000dc140000dd140000de140000df140000e0140000e1140000e2140000e3140000e4140000e5140000e6140000e7140000e8140000e9140000ea140000eb140000ec140000ed140000ee140000ef140000f0140000f1140000f2140000f3140000f4140000f5140000f6140000f7140000f8140000f9140000fa140000fb140000fc140000fd140000fe140000ff140000 - m_AlignBytes: 16 - groupID: 48 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 5264 - particle2: 5265 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 5265 - particle2: 5266 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 5266 - particle2: 5267 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 5267 - particle2: 5268 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 5268 - particle2: 5269 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 5269 - particle2: 5270 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 5270 - particle2: 5271 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 5271 - particle2: 5272 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 5272 - particle2: 5273 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 5273 - particle2: 5274 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 5274 - particle2: 5275 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &489080964 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 489080965} - - component: {fileID: 489080969} - - component: {fileID: 489080968} - - component: {fileID: 489080967} - - component: {fileID: 489080966} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &489080965 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 489080964} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1977632070} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &489080966 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 489080964} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 489080969} - m_Target: {fileID: 489080965} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &489080967 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 489080964} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &489080968 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 489080964} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 48 ---- !u!114 &489080969 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 489080964} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 001500000115000002150000031500000415000005150000061500000715000008150000091500000a1500000b1500000c1500000d1500000e1500000f150000101500001115000012150000131500001415000015150000161500001715000018150000191500001a1500001b1500001c1500001d1500001e1500001f150000201500002115000022150000231500002415000025150000261500002715000028150000291500002a1500002b1500002c1500002d1500002e1500002f150000301500003115000032150000331500003415000035150000361500003715000038150000391500003a1500003b1500003c1500003d1500003e1500003f150000401500004115000042150000431500004415000045150000461500004715000048150000491500004a1500004b1500004c1500004d1500004e1500004f150000501500005115000052150000531500005415000055150000561500005715000058150000591500005a1500005b1500005c1500005d1500005e1500005f150000601500006115000062150000631500006415000065150000661500006715000068150000691500006a1500006b1500006c1500006d1500006e1500006f150000 - m_AlignBytes: 16 - groupID: 49 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 5376 - particle2: 5377 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 5377 - particle2: 5378 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 5378 - particle2: 5379 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 5379 - particle2: 5380 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 5380 - particle2: 5381 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 5381 - particle2: 5382 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 5382 - particle2: 5383 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 5383 - particle2: 5384 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 5384 - particle2: 5385 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 5385 - particle2: 5386 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 5386 - particle2: 5387 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &503533458 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 503533459} - - component: {fileID: 503533463} - - component: {fileID: 503533462} - - component: {fileID: 503533461} - - component: {fileID: 503533460} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &503533459 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 503533458} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1240601735} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &503533460 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 503533458} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 503533463} - m_Target: {fileID: 503533459} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &503533461 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 503533458} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &503533462 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 503533458} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 49 ---- !u!114 &503533463 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 503533458} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 701500007115000072150000731500007415000075150000761500007715000078150000791500007a1500007b1500007c1500007d1500007e1500007f150000801500008115000082150000831500008415000085150000861500008715000088150000891500008a1500008b1500008c1500008d1500008e1500008f150000901500009115000092150000931500009415000095150000961500009715000098150000991500009a1500009b1500009c1500009d1500009e1500009f150000a0150000a1150000a2150000a3150000a4150000a5150000a6150000a7150000a8150000a9150000aa150000ab150000ac150000ad150000ae150000af150000b0150000b1150000b2150000b3150000b4150000b5150000b6150000b7150000b8150000b9150000ba150000bb150000bc150000bd150000be150000bf150000c0150000c1150000c2150000c3150000c4150000c5150000c6150000c7150000c8150000c9150000ca150000cb150000cc150000cd150000ce150000cf150000d0150000d1150000d2150000d3150000d4150000d5150000d6150000d7150000d8150000d9150000da150000db150000dc150000dd150000de150000df150000 - m_AlignBytes: 16 - groupID: 50 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 5488 - particle2: 5489 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 5489 - particle2: 5490 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 5490 - particle2: 5491 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 5491 - particle2: 5492 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 5492 - particle2: 5493 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 5493 - particle2: 5494 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 5494 - particle2: 5495 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 5495 - particle2: 5496 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 5496 - particle2: 5497 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 5497 - particle2: 5498 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 5498 - particle2: 5499 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &506459881 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 100000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} - m_PrefabInstance: {fileID: 421764872} - m_PrefabAsset: {fileID: 0} ---- !u!64 &506459882 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 506459881} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 5 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 4300000, guid: 64df75de10b494f109b074d28a8eade0, type: 3} ---- !u!114 &506459883 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 506459881} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} - m_Name: - m_EditorClassIdentifier: - thickness: 0 - inverted: 0 - material: {fileID: 11400000, guid: d368f2c47473d4bfb8dd9f08073cb403, type: 2} - filter: -65535 - m_SourceCollider: {fileID: 506459882} - m_DistanceField: {fileID: 0} ---- !u!1 &510728466 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 510728467} - m_Layer: 0 - m_Name: Row (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &510728467 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 510728466} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -0.4} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1424048101} - - {fileID: 1084473020} - - {fileID: 729000486} - - {fileID: 980293277} - - {fileID: 1739484933} - - {fileID: 82705115} - - {fileID: 611757892} - - {fileID: 865980438} - - {fileID: 529503719} - - {fileID: 1143771886} - m_Father: {fileID: 1760688768} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &514767705 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 514767706} - - component: {fileID: 514767710} - - component: {fileID: 514767709} - - component: {fileID: 514767708} - - component: {fileID: 514767707} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &514767706 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 514767705} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 713844502} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &514767707 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 514767705} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 514767710} - m_Target: {fileID: 514767706} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &514767708 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 514767705} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &514767709 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 514767705} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 50 ---- !u!114 &514767710 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 514767705} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: e0150000e1150000e2150000e3150000e4150000e5150000e6150000e7150000e8150000e9150000ea150000eb150000ec150000ed150000ee150000ef150000f0150000f1150000f2150000f3150000f4150000f5150000f6150000f7150000f8150000f9150000fa150000fb150000fc150000fd150000fe150000ff150000001600000116000002160000031600000416000005160000061600000716000008160000091600000a1600000b1600000c1600000d1600000e1600000f160000101600001116000012160000131600001416000015160000161600001716000018160000191600001a1600001b1600001c1600001d1600001e1600001f160000201600002116000022160000231600002416000025160000261600002716000028160000291600002a1600002b1600002c1600002d1600002e1600002f160000301600003116000032160000331600003416000035160000361600003716000038160000391600003a1600003b1600003c1600003d1600003e1600003f160000401600004116000042160000431600004416000045160000461600004716000048160000491600004a1600004b1600004c1600004d1600004e1600004f160000 - m_AlignBytes: 16 - groupID: 51 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 5600 - particle2: 5601 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 5601 - particle2: 5602 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 5602 - particle2: 5603 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 5603 - particle2: 5604 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 5604 - particle2: 5605 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 5605 - particle2: 5606 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 5606 - particle2: 5607 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 5607 - particle2: 5608 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 5608 - particle2: 5609 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 5609 - particle2: 5610 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 5610 - particle2: 5611 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &515056252 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 515056253} - - component: {fileID: 515056257} - - component: {fileID: 515056256} - - component: {fileID: 515056255} - - component: {fileID: 515056254} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &515056253 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 515056252} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 472161722} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &515056254 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 515056252} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 515056257} - m_Target: {fileID: 515056253} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &515056255 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 515056252} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &515056256 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 515056252} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 51 ---- !u!114 &515056257 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 515056252} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 501600005116000052160000531600005416000055160000561600005716000058160000591600005a1600005b1600005c1600005d1600005e1600005f160000601600006116000062160000631600006416000065160000661600006716000068160000691600006a1600006b1600006c1600006d1600006e1600006f160000701600007116000072160000731600007416000075160000761600007716000078160000791600007a1600007b1600007c1600007d1600007e1600007f160000801600008116000082160000831600008416000085160000861600008716000088160000891600008a1600008b1600008c1600008d1600008e1600008f160000901600009116000092160000931600009416000095160000961600009716000098160000991600009a1600009b1600009c1600009d1600009e1600009f160000a0160000a1160000a2160000a3160000a4160000a5160000a6160000a7160000a8160000a9160000aa160000ab160000ac160000ad160000ae160000af160000b0160000b1160000b2160000b3160000b4160000b5160000b6160000b7160000b8160000b9160000ba160000bb160000bc160000bd160000be160000bf160000 - m_AlignBytes: 16 - groupID: 52 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 5712 - particle2: 5713 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 5713 - particle2: 5714 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 5714 - particle2: 5715 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 5715 - particle2: 5716 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 5716 - particle2: 5717 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 5717 - particle2: 5718 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 5718 - particle2: 5719 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 5719 - particle2: 5720 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 5720 - particle2: 5721 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 5721 - particle2: 5722 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 5722 - particle2: 5723 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &519875455 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 519875456} - - component: {fileID: 519875460} - - component: {fileID: 519875459} - - component: {fileID: 519875458} - - component: {fileID: 519875457} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &519875456 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 519875455} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 249029318} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &519875457 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 519875455} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 519875460} - m_Target: {fileID: 519875456} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &519875458 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 519875455} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &519875459 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 519875455} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 52 ---- !u!114 &519875460 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 519875455} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: c0160000c1160000c2160000c3160000c4160000c5160000c6160000c7160000c8160000c9160000ca160000cb160000cc160000cd160000ce160000cf160000d0160000d1160000d2160000d3160000d4160000d5160000d6160000d7160000d8160000d9160000da160000db160000dc160000dd160000de160000df160000e0160000e1160000e2160000e3160000e4160000e5160000e6160000e7160000e8160000e9160000ea160000eb160000ec160000ed160000ee160000ef160000f0160000f1160000f2160000f3160000f4160000f5160000f6160000f7160000f8160000f9160000fa160000fb160000fc160000fd160000fe160000ff160000001700000117000002170000031700000417000005170000061700000717000008170000091700000a1700000b1700000c1700000d1700000e1700000f170000101700001117000012170000131700001417000015170000161700001717000018170000191700001a1700001b1700001c1700001d1700001e1700001f170000201700002117000022170000231700002417000025170000261700002717000028170000291700002a1700002b1700002c1700002d1700002e1700002f170000 - m_AlignBytes: 16 - groupID: 53 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 5824 - particle2: 5825 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 5825 - particle2: 5826 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 5826 - particle2: 5827 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 5827 - particle2: 5828 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 5828 - particle2: 5829 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 5829 - particle2: 5830 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 5830 - particle2: 5831 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 5831 - particle2: 5832 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 5832 - particle2: 5833 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 5833 - particle2: 5834 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 5834 - particle2: 5835 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &529503718 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 529503719} - - component: {fileID: 529503723} - - component: {fileID: 529503722} - - component: {fileID: 529503721} - - component: {fileID: 529503720} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &529503719 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 529503718} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 510728467} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &529503720 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 529503718} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 529503723} - m_Target: {fileID: 529503719} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &529503721 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 529503718} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &529503722 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 529503718} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 53 ---- !u!114 &529503723 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 529503718} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 301700003117000032170000331700003417000035170000361700003717000038170000391700003a1700003b1700003c1700003d1700003e1700003f170000401700004117000042170000431700004417000045170000461700004717000048170000491700004a1700004b1700004c1700004d1700004e1700004f170000501700005117000052170000531700005417000055170000561700005717000058170000591700005a1700005b1700005c1700005d1700005e1700005f170000601700006117000062170000631700006417000065170000661700006717000068170000691700006a1700006b1700006c1700006d1700006e1700006f170000701700007117000072170000731700007417000075170000761700007717000078170000791700007a1700007b1700007c1700007d1700007e1700007f170000801700008117000082170000831700008417000085170000861700008717000088170000891700008a1700008b1700008c1700008d1700008e1700008f170000901700009117000092170000931700009417000095170000961700009717000098170000991700009a1700009b1700009c1700009d1700009e1700009f170000 - m_AlignBytes: 16 - groupID: 54 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 5936 - particle2: 5937 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 5937 - particle2: 5938 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 5938 - particle2: 5939 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 5939 - particle2: 5940 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 5940 - particle2: 5941 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 5941 - particle2: 5942 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 5942 - particle2: 5943 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 5943 - particle2: 5944 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 5944 - particle2: 5945 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 5945 - particle2: 5946 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 5946 - particle2: 5947 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &531482357 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 531482358} - - component: {fileID: 531482362} - - component: {fileID: 531482361} - - component: {fileID: 531482360} - - component: {fileID: 531482359} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &531482358 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 531482357} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1240601735} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &531482359 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 531482357} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 531482362} - m_Target: {fileID: 531482358} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &531482360 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 531482357} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &531482361 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 531482357} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 54 ---- !u!114 &531482362 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 531482357} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: a0170000a1170000a2170000a3170000a4170000a5170000a6170000a7170000a8170000a9170000aa170000ab170000ac170000ad170000ae170000af170000b0170000b1170000b2170000b3170000b4170000b5170000b6170000b7170000b8170000b9170000ba170000bb170000bc170000bd170000be170000bf170000c0170000c1170000c2170000c3170000c4170000c5170000c6170000c7170000c8170000c9170000ca170000cb170000cc170000cd170000ce170000cf170000d0170000d1170000d2170000d3170000d4170000d5170000d6170000d7170000d8170000d9170000da170000db170000dc170000dd170000de170000df170000e0170000e1170000e2170000e3170000e4170000e5170000e6170000e7170000e8170000e9170000ea170000eb170000ec170000ed170000ee170000ef170000f0170000f1170000f2170000f3170000f4170000f5170000f6170000f7170000f8170000f9170000fa170000fb170000fc170000fd170000fe170000ff170000001800000118000002180000031800000418000005180000061800000718000008180000091800000a1800000b1800000c1800000d1800000e1800000f180000 - m_AlignBytes: 16 - groupID: 55 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 6048 - particle2: 6049 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 6049 - particle2: 6050 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 6050 - particle2: 6051 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 6051 - particle2: 6052 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 6052 - particle2: 6053 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 6053 - particle2: 6054 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 6054 - particle2: 6055 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 6055 - particle2: 6056 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 6056 - particle2: 6057 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 6057 - particle2: 6058 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 6058 - particle2: 6059 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &531662322 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 531662323} - - component: {fileID: 531662327} - - component: {fileID: 531662326} - - component: {fileID: 531662325} - - component: {fileID: 531662324} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &531662323 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 531662322} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 472161722} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &531662324 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 531662322} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 531662327} - m_Target: {fileID: 531662323} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &531662325 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 531662322} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &531662326 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 531662322} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 55 ---- !u!114 &531662327 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 531662322} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 101800001118000012180000131800001418000015180000161800001718000018180000191800001a1800001b1800001c1800001d1800001e1800001f180000201800002118000022180000231800002418000025180000261800002718000028180000291800002a1800002b1800002c1800002d1800002e1800002f180000301800003118000032180000331800003418000035180000361800003718000038180000391800003a1800003b1800003c1800003d1800003e1800003f180000401800004118000042180000431800004418000045180000461800004718000048180000491800004a1800004b1800004c1800004d1800004e1800004f180000501800005118000052180000531800005418000055180000561800005718000058180000591800005a1800005b1800005c1800005d1800005e1800005f180000601800006118000062180000631800006418000065180000661800006718000068180000691800006a1800006b1800006c1800006d1800006e1800006f180000701800007118000072180000731800007418000075180000761800007718000078180000791800007a1800007b1800007c1800007d1800007e1800007f180000 - m_AlignBytes: 16 - groupID: 56 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 6160 - particle2: 6161 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 6161 - particle2: 6162 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 6162 - particle2: 6163 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 6163 - particle2: 6164 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 6164 - particle2: 6165 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 6165 - particle2: 6166 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 6166 - particle2: 6167 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 6167 - particle2: 6168 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 6168 - particle2: 6169 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 6169 - particle2: 6170 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 6170 - particle2: 6171 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &535373371 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 535373372} - - component: {fileID: 535373376} - - component: {fileID: 535373375} - - component: {fileID: 535373374} - - component: {fileID: 535373373} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &535373372 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 535373371} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1977632070} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &535373373 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 535373371} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 535373376} - m_Target: {fileID: 535373372} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &535373374 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 535373371} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &535373375 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 535373371} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 56 ---- !u!114 &535373376 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 535373371} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 801800008118000082180000831800008418000085180000861800008718000088180000891800008a1800008b1800008c1800008d1800008e1800008f180000901800009118000092180000931800009418000095180000961800009718000098180000991800009a1800009b1800009c1800009d1800009e1800009f180000a0180000a1180000a2180000a3180000a4180000a5180000a6180000a7180000a8180000a9180000aa180000ab180000ac180000ad180000ae180000af180000b0180000b1180000b2180000b3180000b4180000b5180000b6180000b7180000b8180000b9180000ba180000bb180000bc180000bd180000be180000bf180000c0180000c1180000c2180000c3180000c4180000c5180000c6180000c7180000c8180000c9180000ca180000cb180000cc180000cd180000ce180000cf180000d0180000d1180000d2180000d3180000d4180000d5180000d6180000d7180000d8180000d9180000da180000db180000dc180000dd180000de180000df180000e0180000e1180000e2180000e3180000e4180000e5180000e6180000e7180000e8180000e9180000ea180000eb180000ec180000ed180000ee180000ef180000 - m_AlignBytes: 16 - groupID: 57 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 6272 - particle2: 6273 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 6273 - particle2: 6274 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 6274 - particle2: 6275 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 6275 - particle2: 6276 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 6276 - particle2: 6277 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 6277 - particle2: 6278 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 6278 - particle2: 6279 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 6279 - particle2: 6280 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 6280 - particle2: 6281 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 6281 - particle2: 6282 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 6282 - particle2: 6283 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &544654643 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 544654644} - - component: {fileID: 544654648} - - component: {fileID: 544654647} - - component: {fileID: 544654646} - - component: {fileID: 544654645} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &544654644 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 544654643} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 648480057} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &544654645 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 544654643} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 544654648} - m_Target: {fileID: 544654644} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &544654646 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 544654643} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &544654647 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 544654643} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 57 ---- !u!114 &544654648 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 544654643} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: f0180000f1180000f2180000f3180000f4180000f5180000f6180000f7180000f8180000f9180000fa180000fb180000fc180000fd180000fe180000ff180000001900000119000002190000031900000419000005190000061900000719000008190000091900000a1900000b1900000c1900000d1900000e1900000f190000101900001119000012190000131900001419000015190000161900001719000018190000191900001a1900001b1900001c1900001d1900001e1900001f190000201900002119000022190000231900002419000025190000261900002719000028190000291900002a1900002b1900002c1900002d1900002e1900002f190000301900003119000032190000331900003419000035190000361900003719000038190000391900003a1900003b1900003c1900003d1900003e1900003f190000401900004119000042190000431900004419000045190000461900004719000048190000491900004a1900004b1900004c1900004d1900004e1900004f190000501900005119000052190000531900005419000055190000561900005719000058190000591900005a1900005b1900005c1900005d1900005e1900005f190000 - m_AlignBytes: 16 - groupID: 58 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 6384 - particle2: 6385 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 6385 - particle2: 6386 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 6386 - particle2: 6387 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 6387 - particle2: 6388 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 6388 - particle2: 6389 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 6389 - particle2: 6390 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 6390 - particle2: 6391 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 6391 - particle2: 6392 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 6392 - particle2: 6393 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 6393 - particle2: 6394 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 6394 - particle2: 6395 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &547327666 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 547327667} - - component: {fileID: 547327671} - - component: {fileID: 547327670} - - component: {fileID: 547327669} - - component: {fileID: 547327668} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &547327667 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 547327666} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1306593279} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &547327668 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 547327666} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 547327671} - m_Target: {fileID: 547327667} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &547327669 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 547327666} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &547327670 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 547327666} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 58 ---- !u!114 &547327671 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 547327666} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 601900006119000062190000631900006419000065190000661900006719000068190000691900006a1900006b1900006c1900006d1900006e1900006f190000701900007119000072190000731900007419000075190000761900007719000078190000791900007a1900007b1900007c1900007d1900007e1900007f190000801900008119000082190000831900008419000085190000861900008719000088190000891900008a1900008b1900008c1900008d1900008e1900008f190000901900009119000092190000931900009419000095190000961900009719000098190000991900009a1900009b1900009c1900009d1900009e1900009f190000a0190000a1190000a2190000a3190000a4190000a5190000a6190000a7190000a8190000a9190000aa190000ab190000ac190000ad190000ae190000af190000b0190000b1190000b2190000b3190000b4190000b5190000b6190000b7190000b8190000b9190000ba190000bb190000bc190000bd190000be190000bf190000c0190000c1190000c2190000c3190000c4190000c5190000c6190000c7190000c8190000c9190000ca190000cb190000cc190000cd190000ce190000cf190000 - m_AlignBytes: 16 - groupID: 59 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 6496 - particle2: 6497 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 6497 - particle2: 6498 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 6498 - particle2: 6499 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 6499 - particle2: 6500 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 6500 - particle2: 6501 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 6501 - particle2: 6502 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 6502 - particle2: 6503 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 6503 - particle2: 6504 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 6504 - particle2: 6505 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 6505 - particle2: 6506 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 6506 - particle2: 6507 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &549111721 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 549111722} - - component: {fileID: 549111726} - - component: {fileID: 549111725} - - component: {fileID: 549111724} - - component: {fileID: 549111723} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &549111722 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 549111721} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 54623967} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &549111723 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 549111721} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 549111726} - m_Target: {fileID: 549111722} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &549111724 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 549111721} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &549111725 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 549111721} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 59 ---- !u!114 &549111726 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 549111721} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: d0190000d1190000d2190000d3190000d4190000d5190000d6190000d7190000d8190000d9190000da190000db190000dc190000dd190000de190000df190000e0190000e1190000e2190000e3190000e4190000e5190000e6190000e7190000e8190000e9190000ea190000eb190000ec190000ed190000ee190000ef190000f0190000f1190000f2190000f3190000f4190000f5190000f6190000f7190000f8190000f9190000fa190000fb190000fc190000fd190000fe190000ff190000001a0000011a0000021a0000031a0000041a0000051a0000061a0000071a0000081a0000091a00000a1a00000b1a00000c1a00000d1a00000e1a00000f1a0000101a0000111a0000121a0000131a0000141a0000151a0000161a0000171a0000181a0000191a00001a1a00001b1a00001c1a00001d1a00001e1a00001f1a0000201a0000211a0000221a0000231a0000241a0000251a0000261a0000271a0000281a0000291a00002a1a00002b1a00002c1a00002d1a00002e1a00002f1a0000301a0000311a0000321a0000331a0000341a0000351a0000361a0000371a0000381a0000391a00003a1a00003b1a00003c1a00003d1a00003e1a00003f1a0000 - m_AlignBytes: 16 - groupID: 60 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 6608 - particle2: 6609 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 6609 - particle2: 6610 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 6610 - particle2: 6611 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 6611 - particle2: 6612 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 6612 - particle2: 6613 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 6613 - particle2: 6614 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 6614 - particle2: 6615 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 6615 - particle2: 6616 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 6616 - particle2: 6617 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 6617 - particle2: 6618 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 6618 - particle2: 6619 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &549530595 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 549530596} - - component: {fileID: 549530600} - - component: {fileID: 549530599} - - component: {fileID: 549530598} - - component: {fileID: 549530597} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &549530596 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 549530595} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1628171963} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &549530597 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 549530595} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 549530600} - m_Target: {fileID: 549530596} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &549530598 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 549530595} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &549530599 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 549530595} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 60 ---- !u!114 &549530600 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 549530595} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 401a0000411a0000421a0000431a0000441a0000451a0000461a0000471a0000481a0000491a00004a1a00004b1a00004c1a00004d1a00004e1a00004f1a0000501a0000511a0000521a0000531a0000541a0000551a0000561a0000571a0000581a0000591a00005a1a00005b1a00005c1a00005d1a00005e1a00005f1a0000601a0000611a0000621a0000631a0000641a0000651a0000661a0000671a0000681a0000691a00006a1a00006b1a00006c1a00006d1a00006e1a00006f1a0000701a0000711a0000721a0000731a0000741a0000751a0000761a0000771a0000781a0000791a00007a1a00007b1a00007c1a00007d1a00007e1a00007f1a0000801a0000811a0000821a0000831a0000841a0000851a0000861a0000871a0000881a0000891a00008a1a00008b1a00008c1a00008d1a00008e1a00008f1a0000901a0000911a0000921a0000931a0000941a0000951a0000961a0000971a0000981a0000991a00009a1a00009b1a00009c1a00009d1a00009e1a00009f1a0000a01a0000a11a0000a21a0000a31a0000a41a0000a51a0000a61a0000a71a0000a81a0000a91a0000aa1a0000ab1a0000ac1a0000ad1a0000ae1a0000af1a0000 - m_AlignBytes: 16 - groupID: 61 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 6720 - particle2: 6721 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 6721 - particle2: 6722 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 6722 - particle2: 6723 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 6723 - particle2: 6724 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 6724 - particle2: 6725 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 6725 - particle2: 6726 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 6726 - particle2: 6727 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 6727 - particle2: 6728 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 6728 - particle2: 6729 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 6729 - particle2: 6730 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 6730 - particle2: 6731 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &557556285 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 557556286} - - component: {fileID: 557556290} - - component: {fileID: 557556289} - - component: {fileID: 557556288} - - component: {fileID: 557556287} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &557556286 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 557556285} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1977632070} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &557556287 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 557556285} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 557556290} - m_Target: {fileID: 557556286} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &557556288 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 557556285} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &557556289 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 557556285} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 61 ---- !u!114 &557556290 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 557556285} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: b01a0000b11a0000b21a0000b31a0000b41a0000b51a0000b61a0000b71a0000b81a0000b91a0000ba1a0000bb1a0000bc1a0000bd1a0000be1a0000bf1a0000c01a0000c11a0000c21a0000c31a0000c41a0000c51a0000c61a0000c71a0000c81a0000c91a0000ca1a0000cb1a0000cc1a0000cd1a0000ce1a0000cf1a0000d01a0000d11a0000d21a0000d31a0000d41a0000d51a0000d61a0000d71a0000d81a0000d91a0000da1a0000db1a0000dc1a0000dd1a0000de1a0000df1a0000e01a0000e11a0000e21a0000e31a0000e41a0000e51a0000e61a0000e71a0000e81a0000e91a0000ea1a0000eb1a0000ec1a0000ed1a0000ee1a0000ef1a0000f01a0000f11a0000f21a0000f31a0000f41a0000f51a0000f61a0000f71a0000f81a0000f91a0000fa1a0000fb1a0000fc1a0000fd1a0000fe1a0000ff1a0000001b0000011b0000021b0000031b0000041b0000051b0000061b0000071b0000081b0000091b00000a1b00000b1b00000c1b00000d1b00000e1b00000f1b0000101b0000111b0000121b0000131b0000141b0000151b0000161b0000171b0000181b0000191b00001a1b00001b1b00001c1b00001d1b00001e1b00001f1b0000 - m_AlignBytes: 16 - groupID: 62 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 6832 - particle2: 6833 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 6833 - particle2: 6834 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 6834 - particle2: 6835 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 6835 - particle2: 6836 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 6836 - particle2: 6837 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 6837 - particle2: 6838 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 6838 - particle2: 6839 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 6839 - particle2: 6840 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 6840 - particle2: 6841 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 6841 - particle2: 6842 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 6842 - particle2: 6843 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &584208410 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 584208411} - - component: {fileID: 584208415} - - component: {fileID: 584208414} - - component: {fileID: 584208413} - - component: {fileID: 584208412} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &584208411 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 584208410} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 426164209} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &584208412 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 584208410} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 584208415} - m_Target: {fileID: 584208411} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &584208413 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 584208410} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &584208414 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 584208410} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 62 ---- !u!114 &584208415 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 584208410} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 201b0000211b0000221b0000231b0000241b0000251b0000261b0000271b0000281b0000291b00002a1b00002b1b00002c1b00002d1b00002e1b00002f1b0000301b0000311b0000321b0000331b0000341b0000351b0000361b0000371b0000381b0000391b00003a1b00003b1b00003c1b00003d1b00003e1b00003f1b0000401b0000411b0000421b0000431b0000441b0000451b0000461b0000471b0000481b0000491b00004a1b00004b1b00004c1b00004d1b00004e1b00004f1b0000501b0000511b0000521b0000531b0000541b0000551b0000561b0000571b0000581b0000591b00005a1b00005b1b00005c1b00005d1b00005e1b00005f1b0000601b0000611b0000621b0000631b0000641b0000651b0000661b0000671b0000681b0000691b00006a1b00006b1b00006c1b00006d1b00006e1b00006f1b0000701b0000711b0000721b0000731b0000741b0000751b0000761b0000771b0000781b0000791b00007a1b00007b1b00007c1b00007d1b00007e1b00007f1b0000801b0000811b0000821b0000831b0000841b0000851b0000861b0000871b0000881b0000891b00008a1b00008b1b00008c1b00008d1b00008e1b00008f1b0000 - m_AlignBytes: 16 - groupID: 63 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 6944 - particle2: 6945 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 6945 - particle2: 6946 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 6946 - particle2: 6947 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 6947 - particle2: 6948 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 6948 - particle2: 6949 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 6949 - particle2: 6950 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 6950 - particle2: 6951 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 6951 - particle2: 6952 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 6952 - particle2: 6953 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 6953 - particle2: 6954 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 6954 - particle2: 6955 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &600063429 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 600063430} - - component: {fileID: 600063434} - - component: {fileID: 600063433} - - component: {fileID: 600063432} - - component: {fileID: 600063431} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &600063430 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 600063429} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1241971666} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &600063431 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 600063429} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 600063434} - m_Target: {fileID: 600063430} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &600063432 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 600063429} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &600063433 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 600063429} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 63 ---- !u!114 &600063434 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 600063429} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 901b0000911b0000921b0000931b0000941b0000951b0000961b0000971b0000981b0000991b00009a1b00009b1b00009c1b00009d1b00009e1b00009f1b0000a01b0000a11b0000a21b0000a31b0000a41b0000a51b0000a61b0000a71b0000a81b0000a91b0000aa1b0000ab1b0000ac1b0000ad1b0000ae1b0000af1b0000b01b0000b11b0000b21b0000b31b0000b41b0000b51b0000b61b0000b71b0000b81b0000b91b0000ba1b0000bb1b0000bc1b0000bd1b0000be1b0000bf1b0000c01b0000c11b0000c21b0000c31b0000c41b0000c51b0000c61b0000c71b0000c81b0000c91b0000ca1b0000cb1b0000cc1b0000cd1b0000ce1b0000cf1b0000d01b0000d11b0000d21b0000d31b0000d41b0000d51b0000d61b0000d71b0000d81b0000d91b0000da1b0000db1b0000dc1b0000dd1b0000de1b0000df1b0000e01b0000e11b0000e21b0000e31b0000e41b0000e51b0000e61b0000e71b0000e81b0000e91b0000ea1b0000eb1b0000ec1b0000ed1b0000ee1b0000ef1b0000f01b0000f11b0000f21b0000f31b0000f41b0000f51b0000f61b0000f71b0000f81b0000f91b0000fa1b0000fb1b0000fc1b0000fd1b0000fe1b0000ff1b0000 - m_AlignBytes: 16 - groupID: 64 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 7056 - particle2: 7057 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 7057 - particle2: 7058 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 7058 - particle2: 7059 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 7059 - particle2: 7060 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 7060 - particle2: 7061 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 7061 - particle2: 7062 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 7062 - particle2: 7063 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 7063 - particle2: 7064 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 7064 - particle2: 7065 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 7065 - particle2: 7066 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 7066 - particle2: 7067 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &611757891 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 611757892} - - component: {fileID: 611757896} - - component: {fileID: 611757895} - - component: {fileID: 611757894} - - component: {fileID: 611757893} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &611757892 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 611757891} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 510728467} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &611757893 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 611757891} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 611757896} - m_Target: {fileID: 611757892} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &611757894 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 611757891} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &611757895 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 611757891} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 64 ---- !u!114 &611757896 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 611757891} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 001c0000011c0000021c0000031c0000041c0000051c0000061c0000071c0000081c0000091c00000a1c00000b1c00000c1c00000d1c00000e1c00000f1c0000101c0000111c0000121c0000131c0000141c0000151c0000161c0000171c0000181c0000191c00001a1c00001b1c00001c1c00001d1c00001e1c00001f1c0000201c0000211c0000221c0000231c0000241c0000251c0000261c0000271c0000281c0000291c00002a1c00002b1c00002c1c00002d1c00002e1c00002f1c0000301c0000311c0000321c0000331c0000341c0000351c0000361c0000371c0000381c0000391c00003a1c00003b1c00003c1c00003d1c00003e1c00003f1c0000401c0000411c0000421c0000431c0000441c0000451c0000461c0000471c0000481c0000491c00004a1c00004b1c00004c1c00004d1c00004e1c00004f1c0000501c0000511c0000521c0000531c0000541c0000551c0000561c0000571c0000581c0000591c00005a1c00005b1c00005c1c00005d1c00005e1c00005f1c0000601c0000611c0000621c0000631c0000641c0000651c0000661c0000671c0000681c0000691c00006a1c00006b1c00006c1c00006d1c00006e1c00006f1c0000 - m_AlignBytes: 16 - groupID: 65 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 7168 - particle2: 7169 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 7169 - particle2: 7170 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 7170 - particle2: 7171 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 7171 - particle2: 7172 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 7172 - particle2: 7173 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 7173 - particle2: 7174 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 7174 - particle2: 7175 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 7175 - particle2: 7176 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 7176 - particle2: 7177 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 7177 - particle2: 7178 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 7178 - particle2: 7179 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &620777758 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 620777759} - - component: {fileID: 620777763} - - component: {fileID: 620777762} - - component: {fileID: 620777761} - - component: {fileID: 620777760} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &620777759 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 620777758} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 779073863} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &620777760 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 620777758} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 620777763} - m_Target: {fileID: 620777759} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &620777761 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 620777758} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &620777762 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 620777758} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 65 ---- !u!114 &620777763 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 620777758} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 701c0000711c0000721c0000731c0000741c0000751c0000761c0000771c0000781c0000791c00007a1c00007b1c00007c1c00007d1c00007e1c00007f1c0000801c0000811c0000821c0000831c0000841c0000851c0000861c0000871c0000881c0000891c00008a1c00008b1c00008c1c00008d1c00008e1c00008f1c0000901c0000911c0000921c0000931c0000941c0000951c0000961c0000971c0000981c0000991c00009a1c00009b1c00009c1c00009d1c00009e1c00009f1c0000a01c0000a11c0000a21c0000a31c0000a41c0000a51c0000a61c0000a71c0000a81c0000a91c0000aa1c0000ab1c0000ac1c0000ad1c0000ae1c0000af1c0000b01c0000b11c0000b21c0000b31c0000b41c0000b51c0000b61c0000b71c0000b81c0000b91c0000ba1c0000bb1c0000bc1c0000bd1c0000be1c0000bf1c0000c01c0000c11c0000c21c0000c31c0000c41c0000c51c0000c61c0000c71c0000c81c0000c91c0000ca1c0000cb1c0000cc1c0000cd1c0000ce1c0000cf1c0000d01c0000d11c0000d21c0000d31c0000d41c0000d51c0000d61c0000d71c0000d81c0000d91c0000da1c0000db1c0000dc1c0000dd1c0000de1c0000df1c0000 - m_AlignBytes: 16 - groupID: 66 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 7280 - particle2: 7281 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 7281 - particle2: 7282 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 7282 - particle2: 7283 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 7283 - particle2: 7284 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 7284 - particle2: 7285 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 7285 - particle2: 7286 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 7286 - particle2: 7287 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 7287 - particle2: 7288 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 7288 - particle2: 7289 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 7289 - particle2: 7290 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 7290 - particle2: 7291 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &640325666 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 640325667} - - component: {fileID: 640325671} - - component: {fileID: 640325670} - - component: {fileID: 640325669} - - component: {fileID: 640325668} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &640325667 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 640325666} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1241971666} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &640325668 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 640325666} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 640325671} - m_Target: {fileID: 640325667} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &640325669 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 640325666} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &640325670 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 640325666} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 66 ---- !u!114 &640325671 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 640325666} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: e01c0000e11c0000e21c0000e31c0000e41c0000e51c0000e61c0000e71c0000e81c0000e91c0000ea1c0000eb1c0000ec1c0000ed1c0000ee1c0000ef1c0000f01c0000f11c0000f21c0000f31c0000f41c0000f51c0000f61c0000f71c0000f81c0000f91c0000fa1c0000fb1c0000fc1c0000fd1c0000fe1c0000ff1c0000001d0000011d0000021d0000031d0000041d0000051d0000061d0000071d0000081d0000091d00000a1d00000b1d00000c1d00000d1d00000e1d00000f1d0000101d0000111d0000121d0000131d0000141d0000151d0000161d0000171d0000181d0000191d00001a1d00001b1d00001c1d00001d1d00001e1d00001f1d0000201d0000211d0000221d0000231d0000241d0000251d0000261d0000271d0000281d0000291d00002a1d00002b1d00002c1d00002d1d00002e1d00002f1d0000301d0000311d0000321d0000331d0000341d0000351d0000361d0000371d0000381d0000391d00003a1d00003b1d00003c1d00003d1d00003e1d00003f1d0000401d0000411d0000421d0000431d0000441d0000451d0000461d0000471d0000481d0000491d00004a1d00004b1d00004c1d00004d1d00004e1d00004f1d0000 - m_AlignBytes: 16 - groupID: 67 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 7392 - particle2: 7393 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 7393 - particle2: 7394 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 7394 - particle2: 7395 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 7395 - particle2: 7396 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 7396 - particle2: 7397 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 7397 - particle2: 7398 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 7398 - particle2: 7399 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 7399 - particle2: 7400 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 7400 - particle2: 7401 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 7401 - particle2: 7402 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 7402 - particle2: 7403 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &648480056 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 648480057} - m_Layer: 0 - m_Name: Row (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &648480057 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 648480056} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -1.4} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 820904268} - - {fileID: 990019828} - - {fileID: 1593990336} - - {fileID: 544654644} - - {fileID: 1588242874} - - {fileID: 104614688} - - {fileID: 113190533} - - {fileID: 713725211} - - {fileID: 451433694} - - {fileID: 334659107} - m_Father: {fileID: 1760688768} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &666418978 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 666418979} - - component: {fileID: 666418983} - - component: {fileID: 666418982} - - component: {fileID: 666418981} - - component: {fileID: 666418980} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &666418979 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 666418978} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2009678977} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &666418980 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 666418978} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 666418983} - m_Target: {fileID: 666418979} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &666418981 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 666418978} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &666418982 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 666418978} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 67 ---- !u!114 &666418983 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 666418978} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 501d0000511d0000521d0000531d0000541d0000551d0000561d0000571d0000581d0000591d00005a1d00005b1d00005c1d00005d1d00005e1d00005f1d0000601d0000611d0000621d0000631d0000641d0000651d0000661d0000671d0000681d0000691d00006a1d00006b1d00006c1d00006d1d00006e1d00006f1d0000701d0000711d0000721d0000731d0000741d0000751d0000761d0000771d0000781d0000791d00007a1d00007b1d00007c1d00007d1d00007e1d00007f1d0000801d0000811d0000821d0000831d0000841d0000851d0000861d0000871d0000881d0000891d00008a1d00008b1d00008c1d00008d1d00008e1d00008f1d0000901d0000911d0000921d0000931d0000941d0000951d0000961d0000971d0000981d0000991d00009a1d00009b1d00009c1d00009d1d00009e1d00009f1d0000a01d0000a11d0000a21d0000a31d0000a41d0000a51d0000a61d0000a71d0000a81d0000a91d0000aa1d0000ab1d0000ac1d0000ad1d0000ae1d0000af1d0000b01d0000b11d0000b21d0000b31d0000b41d0000b51d0000b61d0000b71d0000b81d0000b91d0000ba1d0000bb1d0000bc1d0000bd1d0000be1d0000bf1d0000 - m_AlignBytes: 16 - groupID: 68 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 7504 - particle2: 7505 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 7505 - particle2: 7506 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 7506 - particle2: 7507 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 7507 - particle2: 7508 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 7508 - particle2: 7509 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 7509 - particle2: 7510 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 7510 - particle2: 7511 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 7511 - particle2: 7512 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 7512 - particle2: 7513 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 7513 - particle2: 7514 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 7514 - particle2: 7515 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &667569020 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 667569021} - - component: {fileID: 667569025} - - component: {fileID: 667569024} - - component: {fileID: 667569023} - - component: {fileID: 667569022} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &667569021 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 667569020} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 940408952} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &667569022 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 667569020} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 667569025} - m_Target: {fileID: 667569021} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &667569023 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 667569020} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &667569024 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 667569020} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 68 ---- !u!114 &667569025 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 667569020} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: c01d0000c11d0000c21d0000c31d0000c41d0000c51d0000c61d0000c71d0000c81d0000c91d0000ca1d0000cb1d0000cc1d0000cd1d0000ce1d0000cf1d0000d01d0000d11d0000d21d0000d31d0000d41d0000d51d0000d61d0000d71d0000d81d0000d91d0000da1d0000db1d0000dc1d0000dd1d0000de1d0000df1d0000e01d0000e11d0000e21d0000e31d0000e41d0000e51d0000e61d0000e71d0000e81d0000e91d0000ea1d0000eb1d0000ec1d0000ed1d0000ee1d0000ef1d0000f01d0000f11d0000f21d0000f31d0000f41d0000f51d0000f61d0000f71d0000f81d0000f91d0000fa1d0000fb1d0000fc1d0000fd1d0000fe1d0000ff1d0000001e0000011e0000021e0000031e0000041e0000051e0000061e0000071e0000081e0000091e00000a1e00000b1e00000c1e00000d1e00000e1e00000f1e0000101e0000111e0000121e0000131e0000141e0000151e0000161e0000171e0000181e0000191e00001a1e00001b1e00001c1e00001d1e00001e1e00001f1e0000201e0000211e0000221e0000231e0000241e0000251e0000261e0000271e0000281e0000291e00002a1e00002b1e00002c1e00002d1e00002e1e00002f1e0000 - m_AlignBytes: 16 - groupID: 69 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 7616 - particle2: 7617 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 7617 - particle2: 7618 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 7618 - particle2: 7619 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 7619 - particle2: 7620 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 7620 - particle2: 7621 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 7621 - particle2: 7622 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 7622 - particle2: 7623 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 7623 - particle2: 7624 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 7624 - particle2: 7625 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 7625 - particle2: 7626 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 7626 - particle2: 7627 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &674074860 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 674074861} - - component: {fileID: 674074865} - - component: {fileID: 674074864} - - component: {fileID: 674074863} - - component: {fileID: 674074862} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &674074861 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 674074860} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1464717035} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &674074862 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 674074860} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 674074865} - m_Target: {fileID: 674074861} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &674074863 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 674074860} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &674074864 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 674074860} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 69 ---- !u!114 &674074865 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 674074860} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 301e0000311e0000321e0000331e0000341e0000351e0000361e0000371e0000381e0000391e00003a1e00003b1e00003c1e00003d1e00003e1e00003f1e0000401e0000411e0000421e0000431e0000441e0000451e0000461e0000471e0000481e0000491e00004a1e00004b1e00004c1e00004d1e00004e1e00004f1e0000501e0000511e0000521e0000531e0000541e0000551e0000561e0000571e0000581e0000591e00005a1e00005b1e00005c1e00005d1e00005e1e00005f1e0000601e0000611e0000621e0000631e0000641e0000651e0000661e0000671e0000681e0000691e00006a1e00006b1e00006c1e00006d1e00006e1e00006f1e0000701e0000711e0000721e0000731e0000741e0000751e0000761e0000771e0000781e0000791e00007a1e00007b1e00007c1e00007d1e00007e1e00007f1e0000801e0000811e0000821e0000831e0000841e0000851e0000861e0000871e0000881e0000891e00008a1e00008b1e00008c1e00008d1e00008e1e00008f1e0000901e0000911e0000921e0000931e0000941e0000951e0000961e0000971e0000981e0000991e00009a1e00009b1e00009c1e00009d1e00009e1e00009f1e0000 - m_AlignBytes: 16 - groupID: 70 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 7728 - particle2: 7729 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 7729 - particle2: 7730 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 7730 - particle2: 7731 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 7731 - particle2: 7732 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 7732 - particle2: 7733 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 7733 - particle2: 7734 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 7734 - particle2: 7735 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 7735 - particle2: 7736 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 7736 - particle2: 7737 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 7737 - particle2: 7738 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 7738 - particle2: 7739 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &686144123 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 686144124} - - component: {fileID: 686144128} - - component: {fileID: 686144127} - - component: {fileID: 686144126} - - component: {fileID: 686144125} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &686144124 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 686144123} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1464717035} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &686144125 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 686144123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 686144128} - m_Target: {fileID: 686144124} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &686144126 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 686144123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &686144127 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 686144123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 70 ---- !u!114 &686144128 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 686144123} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: a01e0000a11e0000a21e0000a31e0000a41e0000a51e0000a61e0000a71e0000a81e0000a91e0000aa1e0000ab1e0000ac1e0000ad1e0000ae1e0000af1e0000b01e0000b11e0000b21e0000b31e0000b41e0000b51e0000b61e0000b71e0000b81e0000b91e0000ba1e0000bb1e0000bc1e0000bd1e0000be1e0000bf1e0000c01e0000c11e0000c21e0000c31e0000c41e0000c51e0000c61e0000c71e0000c81e0000c91e0000ca1e0000cb1e0000cc1e0000cd1e0000ce1e0000cf1e0000d01e0000d11e0000d21e0000d31e0000d41e0000d51e0000d61e0000d71e0000d81e0000d91e0000da1e0000db1e0000dc1e0000dd1e0000de1e0000df1e0000e01e0000e11e0000e21e0000e31e0000e41e0000e51e0000e61e0000e71e0000e81e0000e91e0000ea1e0000eb1e0000ec1e0000ed1e0000ee1e0000ef1e0000f01e0000f11e0000f21e0000f31e0000f41e0000f51e0000f61e0000f71e0000f81e0000f91e0000fa1e0000fb1e0000fc1e0000fd1e0000fe1e0000ff1e0000001f0000011f0000021f0000031f0000041f0000051f0000061f0000071f0000081f0000091f00000a1f00000b1f00000c1f00000d1f00000e1f00000f1f0000 - m_AlignBytes: 16 - groupID: 71 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 7840 - particle2: 7841 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 7841 - particle2: 7842 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 7842 - particle2: 7843 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 7843 - particle2: 7844 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 7844 - particle2: 7845 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 7845 - particle2: 7846 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 7846 - particle2: 7847 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 7847 - particle2: 7848 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 7848 - particle2: 7849 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 7849 - particle2: 7850 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 7850 - particle2: 7851 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &702256089 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 702256090} - - component: {fileID: 702256094} - - component: {fileID: 702256093} - - component: {fileID: 702256092} - - component: {fileID: 702256091} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &702256090 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 702256089} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 940408952} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &702256091 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 702256089} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 702256094} - m_Target: {fileID: 702256090} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &702256092 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 702256089} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &702256093 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 702256089} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 71 ---- !u!114 &702256094 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 702256089} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 101f0000111f0000121f0000131f0000141f0000151f0000161f0000171f0000181f0000191f00001a1f00001b1f00001c1f00001d1f00001e1f00001f1f0000201f0000211f0000221f0000231f0000241f0000251f0000261f0000271f0000281f0000291f00002a1f00002b1f00002c1f00002d1f00002e1f00002f1f0000301f0000311f0000321f0000331f0000341f0000351f0000361f0000371f0000381f0000391f00003a1f00003b1f00003c1f00003d1f00003e1f00003f1f0000401f0000411f0000421f0000431f0000441f0000451f0000461f0000471f0000481f0000491f00004a1f00004b1f00004c1f00004d1f00004e1f00004f1f0000501f0000511f0000521f0000531f0000541f0000551f0000561f0000571f0000581f0000591f00005a1f00005b1f00005c1f00005d1f00005e1f00005f1f0000601f0000611f0000621f0000631f0000641f0000651f0000661f0000671f0000681f0000691f00006a1f00006b1f00006c1f00006d1f00006e1f00006f1f0000701f0000711f0000721f0000731f0000741f0000751f0000761f0000771f0000781f0000791f00007a1f00007b1f00007c1f00007d1f00007e1f00007f1f0000 - m_AlignBytes: 16 - groupID: 72 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 7952 - particle2: 7953 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 7953 - particle2: 7954 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 7954 - particle2: 7955 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 7955 - particle2: 7956 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 7956 - particle2: 7957 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 7957 - particle2: 7958 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 7958 - particle2: 7959 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 7959 - particle2: 7960 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 7960 - particle2: 7961 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 7961 - particle2: 7962 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 7962 - particle2: 7963 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &713725210 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 713725211} - - component: {fileID: 713725215} - - component: {fileID: 713725214} - - component: {fileID: 713725213} - - component: {fileID: 713725212} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &713725211 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 713725210} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 648480057} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &713725212 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 713725210} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 713725215} - m_Target: {fileID: 713725211} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &713725213 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 713725210} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &713725214 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 713725210} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 72 ---- !u!114 &713725215 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 713725210} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 801f0000811f0000821f0000831f0000841f0000851f0000861f0000871f0000881f0000891f00008a1f00008b1f00008c1f00008d1f00008e1f00008f1f0000901f0000911f0000921f0000931f0000941f0000951f0000961f0000971f0000981f0000991f00009a1f00009b1f00009c1f00009d1f00009e1f00009f1f0000a01f0000a11f0000a21f0000a31f0000a41f0000a51f0000a61f0000a71f0000a81f0000a91f0000aa1f0000ab1f0000ac1f0000ad1f0000ae1f0000af1f0000b01f0000b11f0000b21f0000b31f0000b41f0000b51f0000b61f0000b71f0000b81f0000b91f0000ba1f0000bb1f0000bc1f0000bd1f0000be1f0000bf1f0000c01f0000c11f0000c21f0000c31f0000c41f0000c51f0000c61f0000c71f0000c81f0000c91f0000ca1f0000cb1f0000cc1f0000cd1f0000ce1f0000cf1f0000d01f0000d11f0000d21f0000d31f0000d41f0000d51f0000d61f0000d71f0000d81f0000d91f0000da1f0000db1f0000dc1f0000dd1f0000de1f0000df1f0000e01f0000e11f0000e21f0000e31f0000e41f0000e51f0000e61f0000e71f0000e81f0000e91f0000ea1f0000eb1f0000ec1f0000ed1f0000ee1f0000ef1f0000 - m_AlignBytes: 16 - groupID: 73 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 8064 - particle2: 8065 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 8065 - particle2: 8066 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 8066 - particle2: 8067 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 8067 - particle2: 8068 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 8068 - particle2: 8069 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 8069 - particle2: 8070 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 8070 - particle2: 8071 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 8071 - particle2: 8072 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 8072 - particle2: 8073 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 8073 - particle2: 8074 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 8074 - particle2: 8075 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &713844501 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 713844502} - m_Layer: 0 - m_Name: Row (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &713844502 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 713844501} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -0.8} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 444273476} - - {fileID: 455432480} - - {fileID: 1746497396} - - {fileID: 59144234} - - {fileID: 1919837743} - - {fileID: 238005276} - - {fileID: 514767706} - - {fileID: 1771245892} - - {fileID: 302892551} - - {fileID: 2017265027} - m_Father: {fileID: 1760688768} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &729000485 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 729000486} - - component: {fileID: 729000490} - - component: {fileID: 729000489} - - component: {fileID: 729000488} - - component: {fileID: 729000487} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &729000486 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 729000485} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 510728467} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &729000487 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 729000485} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 729000490} - m_Target: {fileID: 729000486} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &729000488 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 729000485} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &729000489 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 729000485} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 73 ---- !u!114 &729000490 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 729000485} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: f01f0000f11f0000f21f0000f31f0000f41f0000f51f0000f61f0000f71f0000f81f0000f91f0000fa1f0000fb1f0000fc1f0000fd1f0000fe1f0000ff1f0000002000000120000002200000032000000420000005200000062000000720000008200000092000000a2000000b2000000c2000000d2000000e2000000f200000102000001120000012200000132000001420000015200000162000001720000018200000192000001a2000001b2000001c2000001d2000001e2000001f200000202000002120000022200000232000002420000025200000262000002720000028200000292000002a2000002b2000002c2000002d2000002e2000002f200000302000003120000032200000332000003420000035200000362000003720000038200000392000003a2000003b2000003c2000003d2000003e2000003f200000402000004120000042200000432000004420000045200000462000004720000048200000492000004a2000004b2000004c2000004d2000004e2000004f200000502000005120000052200000532000005420000055200000562000005720000058200000592000005a2000005b2000005c2000005d2000005e2000005f200000 - m_AlignBytes: 16 - groupID: 74 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 8176 - particle2: 8177 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 8177 - particle2: 8178 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 8178 - particle2: 8179 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 8179 - particle2: 8180 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 8180 - particle2: 8181 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 8181 - particle2: 8182 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 8182 - particle2: 8183 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 8183 - particle2: 8184 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 8184 - particle2: 8185 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 8185 - particle2: 8186 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 8186 - particle2: 8187 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &733963100 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 733963101} - - component: {fileID: 733963105} - - component: {fileID: 733963104} - - component: {fileID: 733963103} - - component: {fileID: 733963102} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &733963101 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 733963100} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1306593279} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &733963102 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 733963100} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 733963105} - m_Target: {fileID: 733963101} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &733963103 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 733963100} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &733963104 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 733963100} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 74 ---- !u!114 &733963105 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 733963100} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 602000006120000062200000632000006420000065200000662000006720000068200000692000006a2000006b2000006c2000006d2000006e2000006f200000702000007120000072200000732000007420000075200000762000007720000078200000792000007a2000007b2000007c2000007d2000007e2000007f200000802000008120000082200000832000008420000085200000862000008720000088200000892000008a2000008b2000008c2000008d2000008e2000008f200000902000009120000092200000932000009420000095200000962000009720000098200000992000009a2000009b2000009c2000009d2000009e2000009f200000a0200000a1200000a2200000a3200000a4200000a5200000a6200000a7200000a8200000a9200000aa200000ab200000ac200000ad200000ae200000af200000b0200000b1200000b2200000b3200000b4200000b5200000b6200000b7200000b8200000b9200000ba200000bb200000bc200000bd200000be200000bf200000c0200000c1200000c2200000c3200000c4200000c5200000c6200000c7200000c8200000c9200000ca200000cb200000cc200000cd200000ce200000cf200000 - m_AlignBytes: 16 - groupID: 75 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 8288 - particle2: 8289 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 8289 - particle2: 8290 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 8290 - particle2: 8291 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 8291 - particle2: 8292 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 8292 - particle2: 8293 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 8293 - particle2: 8294 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 8294 - particle2: 8295 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 8295 - particle2: 8296 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 8296 - particle2: 8297 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 8297 - particle2: 8298 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 8298 - particle2: 8299 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &746024796 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 746024797} - - component: {fileID: 746024801} - - component: {fileID: 746024800} - - component: {fileID: 746024799} - - component: {fileID: 746024798} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &746024797 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 746024796} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1240601735} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &746024798 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 746024796} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 746024801} - m_Target: {fileID: 746024797} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &746024799 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 746024796} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &746024800 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 746024796} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 75 ---- !u!114 &746024801 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 746024796} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: d0200000d1200000d2200000d3200000d4200000d5200000d6200000d7200000d8200000d9200000da200000db200000dc200000dd200000de200000df200000e0200000e1200000e2200000e3200000e4200000e5200000e6200000e7200000e8200000e9200000ea200000eb200000ec200000ed200000ee200000ef200000f0200000f1200000f2200000f3200000f4200000f5200000f6200000f7200000f8200000f9200000fa200000fb200000fc200000fd200000fe200000ff200000002100000121000002210000032100000421000005210000062100000721000008210000092100000a2100000b2100000c2100000d2100000e2100000f210000102100001121000012210000132100001421000015210000162100001721000018210000192100001a2100001b2100001c2100001d2100001e2100001f210000202100002121000022210000232100002421000025210000262100002721000028210000292100002a2100002b2100002c2100002d2100002e2100002f210000302100003121000032210000332100003421000035210000362100003721000038210000392100003a2100003b2100003c2100003d2100003e2100003f210000 - m_AlignBytes: 16 - groupID: 76 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 8400 - particle2: 8401 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 8401 - particle2: 8402 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 8402 - particle2: 8403 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 8403 - particle2: 8404 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 8404 - particle2: 8405 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 8405 - particle2: 8406 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 8406 - particle2: 8407 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 8407 - particle2: 8408 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 8408 - particle2: 8409 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 8409 - particle2: 8410 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 8410 - particle2: 8411 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &765011063 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 765011064} - - component: {fileID: 765011068} - - component: {fileID: 765011067} - - component: {fileID: 765011066} - - component: {fileID: 765011065} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &765011064 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 765011063} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1798495239} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &765011065 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 765011063} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 765011068} - m_Target: {fileID: 765011064} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &765011066 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 765011063} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &765011067 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 765011063} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 76 ---- !u!114 &765011068 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 765011063} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 402100004121000042210000432100004421000045210000462100004721000048210000492100004a2100004b2100004c2100004d2100004e2100004f210000502100005121000052210000532100005421000055210000562100005721000058210000592100005a2100005b2100005c2100005d2100005e2100005f210000602100006121000062210000632100006421000065210000662100006721000068210000692100006a2100006b2100006c2100006d2100006e2100006f210000702100007121000072210000732100007421000075210000762100007721000078210000792100007a2100007b2100007c2100007d2100007e2100007f210000802100008121000082210000832100008421000085210000862100008721000088210000892100008a2100008b2100008c2100008d2100008e2100008f210000902100009121000092210000932100009421000095210000962100009721000098210000992100009a2100009b2100009c2100009d2100009e2100009f210000a0210000a1210000a2210000a3210000a4210000a5210000a6210000a7210000a8210000a9210000aa210000ab210000ac210000ad210000ae210000af210000 - m_AlignBytes: 16 - groupID: 77 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 8512 - particle2: 8513 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 8513 - particle2: 8514 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 8514 - particle2: 8515 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 8515 - particle2: 8516 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 8516 - particle2: 8517 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 8517 - particle2: 8518 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 8518 - particle2: 8519 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 8519 - particle2: 8520 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 8520 - particle2: 8521 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 8521 - particle2: 8522 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 8522 - particle2: 8523 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &765551416 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 765551417} - - component: {fileID: 765551421} - - component: {fileID: 765551420} - - component: {fileID: 765551419} - - component: {fileID: 765551418} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &765551417 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 765551416} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 779073863} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &765551418 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 765551416} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 765551421} - m_Target: {fileID: 765551417} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &765551419 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 765551416} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &765551420 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 765551416} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 77 ---- !u!114 &765551421 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 765551416} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: b0210000b1210000b2210000b3210000b4210000b5210000b6210000b7210000b8210000b9210000ba210000bb210000bc210000bd210000be210000bf210000c0210000c1210000c2210000c3210000c4210000c5210000c6210000c7210000c8210000c9210000ca210000cb210000cc210000cd210000ce210000cf210000d0210000d1210000d2210000d3210000d4210000d5210000d6210000d7210000d8210000d9210000da210000db210000dc210000dd210000de210000df210000e0210000e1210000e2210000e3210000e4210000e5210000e6210000e7210000e8210000e9210000ea210000eb210000ec210000ed210000ee210000ef210000f0210000f1210000f2210000f3210000f4210000f5210000f6210000f7210000f8210000f9210000fa210000fb210000fc210000fd210000fe210000ff210000002200000122000002220000032200000422000005220000062200000722000008220000092200000a2200000b2200000c2200000d2200000e2200000f220000102200001122000012220000132200001422000015220000162200001722000018220000192200001a2200001b2200001c2200001d2200001e2200001f220000 - m_AlignBytes: 16 - groupID: 78 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 8624 - particle2: 8625 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 8625 - particle2: 8626 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 8626 - particle2: 8627 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 8627 - particle2: 8628 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 8628 - particle2: 8629 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 8629 - particle2: 8630 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 8630 - particle2: 8631 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 8631 - particle2: 8632 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 8632 - particle2: 8633 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 8633 - particle2: 8634 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 8634 - particle2: 8635 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &769380901 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 769380902} - - component: {fileID: 769380906} - - component: {fileID: 769380905} - - component: {fileID: 769380904} - - component: {fileID: 769380903} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &769380902 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 769380901} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2009678977} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &769380903 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 769380901} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 769380906} - m_Target: {fileID: 769380902} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &769380904 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 769380901} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &769380905 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 769380901} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 78 ---- !u!114 &769380906 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 769380901} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 202200002122000022220000232200002422000025220000262200002722000028220000292200002a2200002b2200002c2200002d2200002e2200002f220000302200003122000032220000332200003422000035220000362200003722000038220000392200003a2200003b2200003c2200003d2200003e2200003f220000402200004122000042220000432200004422000045220000462200004722000048220000492200004a2200004b2200004c2200004d2200004e2200004f220000502200005122000052220000532200005422000055220000562200005722000058220000592200005a2200005b2200005c2200005d2200005e2200005f220000602200006122000062220000632200006422000065220000662200006722000068220000692200006a2200006b2200006c2200006d2200006e2200006f220000702200007122000072220000732200007422000075220000762200007722000078220000792200007a2200007b2200007c2200007d2200007e2200007f220000802200008122000082220000832200008422000085220000862200008722000088220000892200008a2200008b2200008c2200008d2200008e2200008f220000 - m_AlignBytes: 16 - groupID: 79 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 8736 - particle2: 8737 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 8737 - particle2: 8738 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 8738 - particle2: 8739 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 8739 - particle2: 8740 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 8740 - particle2: 8741 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 8741 - particle2: 8742 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 8742 - particle2: 8743 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 8743 - particle2: 8744 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 8744 - particle2: 8745 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 8745 - particle2: 8746 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 8746 - particle2: 8747 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &778889993 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 778889994} - - component: {fileID: 778889998} - - component: {fileID: 778889997} - - component: {fileID: 778889996} - - component: {fileID: 778889995} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &778889994 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 778889993} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 940408952} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &778889995 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 778889993} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 778889998} - m_Target: {fileID: 778889994} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &778889996 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 778889993} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &778889997 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 778889993} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 79 ---- !u!114 &778889998 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 778889993} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 902200009122000092220000932200009422000095220000962200009722000098220000992200009a2200009b2200009c2200009d2200009e2200009f220000a0220000a1220000a2220000a3220000a4220000a5220000a6220000a7220000a8220000a9220000aa220000ab220000ac220000ad220000ae220000af220000b0220000b1220000b2220000b3220000b4220000b5220000b6220000b7220000b8220000b9220000ba220000bb220000bc220000bd220000be220000bf220000c0220000c1220000c2220000c3220000c4220000c5220000c6220000c7220000c8220000c9220000ca220000cb220000cc220000cd220000ce220000cf220000d0220000d1220000d2220000d3220000d4220000d5220000d6220000d7220000d8220000d9220000da220000db220000dc220000dd220000de220000df220000e0220000e1220000e2220000e3220000e4220000e5220000e6220000e7220000e8220000e9220000ea220000eb220000ec220000ed220000ee220000ef220000f0220000f1220000f2220000f3220000f4220000f5220000f6220000f7220000f8220000f9220000fa220000fb220000fc220000fd220000fe220000ff220000 - m_AlignBytes: 16 - groupID: 80 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 8848 - particle2: 8849 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 8849 - particle2: 8850 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 8850 - particle2: 8851 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 8851 - particle2: 8852 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 8852 - particle2: 8853 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 8853 - particle2: 8854 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 8854 - particle2: 8855 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 8855 - particle2: 8856 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 8856 - particle2: 8857 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 8857 - particle2: 8858 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 8858 - particle2: 8859 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &779073862 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 779073863} - m_Layer: 0 - m_Name: Row (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &779073863 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 779073862} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -1} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1375015038} - - {fileID: 1994012442} - - {fileID: 123868266} - - {fileID: 1100467796} - - {fileID: 620777759} - - {fileID: 52316903} - - {fileID: 58243450} - - {fileID: 1517801622} - - {fileID: 765551417} - - {fileID: 1300868598} - m_Father: {fileID: 1027659676} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &789375856 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672126} - m_Mesh: {fileID: 4300000, guid: 89e24673c05344d179c516868eb341b8, type: 3} ---- !u!33 &789375858 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672112} - m_Mesh: {fileID: 4300006, guid: 89e24673c05344d179c516868eb341b8, type: 3} ---- !u!33 &789375860 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672114} - m_Mesh: {fileID: 4300004, guid: 89e24673c05344d179c516868eb341b8, type: 3} ---- !u!33 &789375862 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672116} - m_Mesh: {fileID: 4300002, guid: 89e24673c05344d179c516868eb341b8, type: 3} ---- !u!23 &790473136 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672126} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!23 &790473138 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672112} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!23 &790473140 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672114} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!23 &790473142 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672116} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_GlobalIlluminationMeshLod: 0 - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!4 &792243024 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672112} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 792243030} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &792243026 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672114} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 792243030} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &792243028 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672116} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 792243030} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &792243030 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672118} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: 1} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2045321430962147711} - - {fileID: 792243028} - - {fileID: 792243026} - - {fileID: 792243024} - - {fileID: 792243038} - m_Father: {fileID: 1561375948} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!4 &792243038 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672126} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 792243030} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &792672112 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 792243024} - - component: {fileID: 789375858} - - component: {fileID: 790473138} - - component: {fileID: 792672115} - - component: {fileID: 792672113} - m_Layer: 0 - m_Name: pCube4 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &792672113 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672112} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} - m_Name: - m_EditorClassIdentifier: - thickness: 0 - inverted: 0 - material: {fileID: 0} - filter: -65535 - m_SourceCollider: {fileID: 792672115} - m_DistanceField: {fileID: 0} ---- !u!1 &792672114 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 792243026} - - component: {fileID: 789375860} - - component: {fileID: 790473140} - - component: {fileID: 792672119} - - component: {fileID: 792672117} - m_Layer: 0 - m_Name: pCube3 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!135 &792672115 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672112} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Radius: 0.46872288 - m_Center: {x: -0.77275866, y: -0.01624769, z: 0.027971357} ---- !u!1 &792672116 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 792243028} - - component: {fileID: 789375862} - - component: {fileID: 790473142} - - component: {fileID: 792672121} - - component: {fileID: 792672120} - m_Layer: 0 - m_Name: pCube2 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &792672117 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672114} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} - m_Name: - m_EditorClassIdentifier: - thickness: 0 - inverted: 0 - material: {fileID: 0} - filter: -65535 - m_SourceCollider: {fileID: 792672119} - m_DistanceField: {fileID: 0} ---- !u!1 &792672118 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 792243030} - - component: {fileID: 792672122} - m_Layer: 0 - m_Name: Fan (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!135 &792672119 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672114} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Radius: 0.44351313 - m_Center: {x: 0.46067736, y: -0.01624769, z: -0.6795417} ---- !u!114 &792672120 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672116} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} - m_Name: - m_EditorClassIdentifier: - thickness: 0 - inverted: 0 - material: {fileID: 0} - filter: -65535 - m_SourceCollider: {fileID: 792672121} - m_DistanceField: {fileID: 0} ---- !u!135 &792672121 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672116} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Radius: 0.46508226 - m_Center: {x: 0.4708475, y: -0.01624769, z: 0.7047374} ---- !u!114 &792672122 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672118} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dae436d3aef704ae1b22a06a92480162, type: 3} - m_Name: - m_EditorClassIdentifier: - moveUnitsPerSecond: - value: {x: 0, y: 0, z: 0} - space: 1 - rotateDegreesPerSecond: - value: {x: 0, y: -500, z: 0} - space: 1 - ignoreTimescale: 0 ---- !u!1 &792672126 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 792243038} - - component: {fileID: 789375856} - - component: {fileID: 790473136} - - component: {fileID: 792672128} - - component: {fileID: 792672127} - m_Layer: 0 - m_Name: pCylinder1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &792672127 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672126} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} - m_Name: - m_EditorClassIdentifier: - thickness: 0 - inverted: 0 - material: {fileID: 0} - filter: -65535 - m_SourceCollider: {fileID: 792672128} - m_DistanceField: {fileID: 0} ---- !u!135 &792672128 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 792672126} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Radius: 0.4000001 - m_Center: {x: 0.000000044703484, y: 0.18707478, z: -0.000000059604645} ---- !u!1 &811595117 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 811595118} - - component: {fileID: 811595122} - - component: {fileID: 811595121} - - component: {fileID: 811595120} - - component: {fileID: 811595119} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &811595118 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 811595117} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 893001395} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &811595119 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 811595117} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 811595122} - m_Target: {fileID: 811595118} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &811595120 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 811595117} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &811595121 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 811595117} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 80 ---- !u!114 &811595122 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 811595117} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 002300000123000002230000032300000423000005230000062300000723000008230000092300000a2300000b2300000c2300000d2300000e2300000f230000102300001123000012230000132300001423000015230000162300001723000018230000192300001a2300001b2300001c2300001d2300001e2300001f230000202300002123000022230000232300002423000025230000262300002723000028230000292300002a2300002b2300002c2300002d2300002e2300002f230000302300003123000032230000332300003423000035230000362300003723000038230000392300003a2300003b2300003c2300003d2300003e2300003f230000402300004123000042230000432300004423000045230000462300004723000048230000492300004a2300004b2300004c2300004d2300004e2300004f230000502300005123000052230000532300005423000055230000562300005723000058230000592300005a2300005b2300005c2300005d2300005e2300005f230000602300006123000062230000632300006423000065230000662300006723000068230000692300006a2300006b2300006c2300006d2300006e2300006f230000 - m_AlignBytes: 16 - groupID: 81 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 8960 - particle2: 8961 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 8961 - particle2: 8962 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 8962 - particle2: 8963 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 8963 - particle2: 8964 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 8964 - particle2: 8965 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 8965 - particle2: 8966 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 8966 - particle2: 8967 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 8967 - particle2: 8968 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 8968 - particle2: 8969 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 8969 - particle2: 8970 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 8970 - particle2: 8971 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &811913318 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 811913319} - - component: {fileID: 811913323} - - component: {fileID: 811913322} - - component: {fileID: 811913321} - - component: {fileID: 811913320} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &811913319 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 811913318} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 472161722} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &811913320 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 811913318} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 811913323} - m_Target: {fileID: 811913319} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &811913321 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 811913318} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &811913322 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 811913318} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 81 ---- !u!114 &811913323 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 811913318} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 702300007123000072230000732300007423000075230000762300007723000078230000792300007a2300007b2300007c2300007d2300007e2300007f230000802300008123000082230000832300008423000085230000862300008723000088230000892300008a2300008b2300008c2300008d2300008e2300008f230000902300009123000092230000932300009423000095230000962300009723000098230000992300009a2300009b2300009c2300009d2300009e2300009f230000a0230000a1230000a2230000a3230000a4230000a5230000a6230000a7230000a8230000a9230000aa230000ab230000ac230000ad230000ae230000af230000b0230000b1230000b2230000b3230000b4230000b5230000b6230000b7230000b8230000b9230000ba230000bb230000bc230000bd230000be230000bf230000c0230000c1230000c2230000c3230000c4230000c5230000c6230000c7230000c8230000c9230000ca230000cb230000cc230000cd230000ce230000cf230000d0230000d1230000d2230000d3230000d4230000d5230000d6230000d7230000d8230000d9230000da230000db230000dc230000dd230000de230000df230000 - m_AlignBytes: 16 - groupID: 82 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 9072 - particle2: 9073 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 9073 - particle2: 9074 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 9074 - particle2: 9075 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 9075 - particle2: 9076 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 9076 - particle2: 9077 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 9077 - particle2: 9078 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 9078 - particle2: 9079 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 9079 - particle2: 9080 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 9080 - particle2: 9081 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 9081 - particle2: 9082 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 9082 - particle2: 9083 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &820904267 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 820904268} - - component: {fileID: 820904272} - - component: {fileID: 820904271} - - component: {fileID: 820904270} - - component: {fileID: 820904269} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &820904268 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 820904267} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 648480057} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &820904269 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 820904267} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 820904272} - m_Target: {fileID: 820904268} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &820904270 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 820904267} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &820904271 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 820904267} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 82 ---- !u!114 &820904272 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 820904267} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: e0230000e1230000e2230000e3230000e4230000e5230000e6230000e7230000e8230000e9230000ea230000eb230000ec230000ed230000ee230000ef230000f0230000f1230000f2230000f3230000f4230000f5230000f6230000f7230000f8230000f9230000fa230000fb230000fc230000fd230000fe230000ff230000002400000124000002240000032400000424000005240000062400000724000008240000092400000a2400000b2400000c2400000d2400000e2400000f240000102400001124000012240000132400001424000015240000162400001724000018240000192400001a2400001b2400001c2400001d2400001e2400001f240000202400002124000022240000232400002424000025240000262400002724000028240000292400002a2400002b2400002c2400002d2400002e2400002f240000302400003124000032240000332400003424000035240000362400003724000038240000392400003a2400003b2400003c2400003d2400003e2400003f240000402400004124000042240000432400004424000045240000462400004724000048240000492400004a2400004b2400004c2400004d2400004e2400004f240000 - m_AlignBytes: 16 - groupID: 83 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 9184 - particle2: 9185 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 9185 - particle2: 9186 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 9186 - particle2: 9187 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 9187 - particle2: 9188 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 9188 - particle2: 9189 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 9189 - particle2: 9190 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 9190 - particle2: 9191 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 9191 - particle2: 9192 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 9192 - particle2: 9193 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 9193 - particle2: 9194 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 9194 - particle2: 9195 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &824780548 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 824780549} - - component: {fileID: 824780553} - - component: {fileID: 824780552} - - component: {fileID: 824780551} - - component: {fileID: 824780550} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &824780549 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 824780548} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2009678977} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &824780550 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 824780548} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 824780553} - m_Target: {fileID: 824780549} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &824780551 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 824780548} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &824780552 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 824780548} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 83 ---- !u!114 &824780553 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 824780548} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 502400005124000052240000532400005424000055240000562400005724000058240000592400005a2400005b2400005c2400005d2400005e2400005f240000602400006124000062240000632400006424000065240000662400006724000068240000692400006a2400006b2400006c2400006d2400006e2400006f240000702400007124000072240000732400007424000075240000762400007724000078240000792400007a2400007b2400007c2400007d2400007e2400007f240000802400008124000082240000832400008424000085240000862400008724000088240000892400008a2400008b2400008c2400008d2400008e2400008f240000902400009124000092240000932400009424000095240000962400009724000098240000992400009a2400009b2400009c2400009d2400009e2400009f240000a0240000a1240000a2240000a3240000a4240000a5240000a6240000a7240000a8240000a9240000aa240000ab240000ac240000ad240000ae240000af240000b0240000b1240000b2240000b3240000b4240000b5240000b6240000b7240000b8240000b9240000ba240000bb240000bc240000bd240000be240000bf240000 - m_AlignBytes: 16 - groupID: 84 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 9296 - particle2: 9297 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 9297 - particle2: 9298 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 9298 - particle2: 9299 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 9299 - particle2: 9300 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 9300 - particle2: 9301 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 9301 - particle2: 9302 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 9302 - particle2: 9303 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 9303 - particle2: 9304 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 9304 - particle2: 9305 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 9305 - particle2: 9306 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 9306 - particle2: 9307 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &865980437 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 865980438} - - component: {fileID: 865980442} - - component: {fileID: 865980441} - - component: {fileID: 865980440} - - component: {fileID: 865980439} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &865980438 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 865980437} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 510728467} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &865980439 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 865980437} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 865980442} - m_Target: {fileID: 865980438} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &865980440 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 865980437} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &865980441 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 865980437} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 84 ---- !u!114 &865980442 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 865980437} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: c0240000c1240000c2240000c3240000c4240000c5240000c6240000c7240000c8240000c9240000ca240000cb240000cc240000cd240000ce240000cf240000d0240000d1240000d2240000d3240000d4240000d5240000d6240000d7240000d8240000d9240000da240000db240000dc240000dd240000de240000df240000e0240000e1240000e2240000e3240000e4240000e5240000e6240000e7240000e8240000e9240000ea240000eb240000ec240000ed240000ee240000ef240000f0240000f1240000f2240000f3240000f4240000f5240000f6240000f7240000f8240000f9240000fa240000fb240000fc240000fd240000fe240000ff240000002500000125000002250000032500000425000005250000062500000725000008250000092500000a2500000b2500000c2500000d2500000e2500000f250000102500001125000012250000132500001425000015250000162500001725000018250000192500001a2500001b2500001c2500001d2500001e2500001f250000202500002125000022250000232500002425000025250000262500002725000028250000292500002a2500002b2500002c2500002d2500002e2500002f250000 - m_AlignBytes: 16 - groupID: 85 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 9408 - particle2: 9409 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 9409 - particle2: 9410 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 9410 - particle2: 9411 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 9411 - particle2: 9412 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 9412 - particle2: 9413 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 9413 - particle2: 9414 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 9414 - particle2: 9415 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 9415 - particle2: 9416 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 9416 - particle2: 9417 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 9417 - particle2: 9418 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 9418 - particle2: 9419 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &869213057 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 869213058} - - component: {fileID: 869213062} - - component: {fileID: 869213061} - - component: {fileID: 869213060} - - component: {fileID: 869213059} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &869213058 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 869213057} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1062536481} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &869213059 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 869213057} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 869213062} - m_Target: {fileID: 869213058} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &869213060 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 869213057} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &869213061 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 869213057} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 85 ---- !u!114 &869213062 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 869213057} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 302500003125000032250000332500003425000035250000362500003725000038250000392500003a2500003b2500003c2500003d2500003e2500003f250000402500004125000042250000432500004425000045250000462500004725000048250000492500004a2500004b2500004c2500004d2500004e2500004f250000502500005125000052250000532500005425000055250000562500005725000058250000592500005a2500005b2500005c2500005d2500005e2500005f250000602500006125000062250000632500006425000065250000662500006725000068250000692500006a2500006b2500006c2500006d2500006e2500006f250000702500007125000072250000732500007425000075250000762500007725000078250000792500007a2500007b2500007c2500007d2500007e2500007f250000802500008125000082250000832500008425000085250000862500008725000088250000892500008a2500008b2500008c2500008d2500008e2500008f250000902500009125000092250000932500009425000095250000962500009725000098250000992500009a2500009b2500009c2500009d2500009e2500009f250000 - m_AlignBytes: 16 - groupID: 86 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 9520 - particle2: 9521 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 9521 - particle2: 9522 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 9522 - particle2: 9523 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 9523 - particle2: 9524 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 9524 - particle2: 9525 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 9525 - particle2: 9526 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 9526 - particle2: 9527 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 9527 - particle2: 9528 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 9528 - particle2: 9529 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 9529 - particle2: 9530 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 9530 - particle2: 9531 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &881133076 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 881133077} - - component: {fileID: 881133081} - - component: {fileID: 881133080} - - component: {fileID: 881133079} - - component: {fileID: 881133078} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &881133077 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 881133076} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 249029318} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &881133078 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 881133076} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 881133081} - m_Target: {fileID: 881133077} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &881133079 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 881133076} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &881133080 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 881133076} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 86 ---- !u!114 &881133081 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 881133076} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: a0250000a1250000a2250000a3250000a4250000a5250000a6250000a7250000a8250000a9250000aa250000ab250000ac250000ad250000ae250000af250000b0250000b1250000b2250000b3250000b4250000b5250000b6250000b7250000b8250000b9250000ba250000bb250000bc250000bd250000be250000bf250000c0250000c1250000c2250000c3250000c4250000c5250000c6250000c7250000c8250000c9250000ca250000cb250000cc250000cd250000ce250000cf250000d0250000d1250000d2250000d3250000d4250000d5250000d6250000d7250000d8250000d9250000da250000db250000dc250000dd250000de250000df250000e0250000e1250000e2250000e3250000e4250000e5250000e6250000e7250000e8250000e9250000ea250000eb250000ec250000ed250000ee250000ef250000f0250000f1250000f2250000f3250000f4250000f5250000f6250000f7250000f8250000f9250000fa250000fb250000fc250000fd250000fe250000ff250000002600000126000002260000032600000426000005260000062600000726000008260000092600000a2600000b2600000c2600000d2600000e2600000f260000 - m_AlignBytes: 16 - groupID: 87 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 9632 - particle2: 9633 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 9633 - particle2: 9634 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 9634 - particle2: 9635 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 9635 - particle2: 9636 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 9636 - particle2: 9637 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 9637 - particle2: 9638 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 9638 - particle2: 9639 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 9639 - particle2: 9640 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 9640 - particle2: 9641 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 9641 - particle2: 9642 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 9642 - particle2: 9643 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &888913398 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 888913399} - - component: {fileID: 888913403} - - component: {fileID: 888913402} - - component: {fileID: 888913401} - - component: {fileID: 888913400} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &888913399 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 888913398} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1306593279} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &888913400 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 888913398} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 888913403} - m_Target: {fileID: 888913399} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &888913401 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 888913398} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &888913402 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 888913398} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 87 ---- !u!114 &888913403 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 888913398} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 102600001126000012260000132600001426000015260000162600001726000018260000192600001a2600001b2600001c2600001d2600001e2600001f260000202600002126000022260000232600002426000025260000262600002726000028260000292600002a2600002b2600002c2600002d2600002e2600002f260000302600003126000032260000332600003426000035260000362600003726000038260000392600003a2600003b2600003c2600003d2600003e2600003f260000402600004126000042260000432600004426000045260000462600004726000048260000492600004a2600004b2600004c2600004d2600004e2600004f260000502600005126000052260000532600005426000055260000562600005726000058260000592600005a2600005b2600005c2600005d2600005e2600005f260000602600006126000062260000632600006426000065260000662600006726000068260000692600006a2600006b2600006c2600006d2600006e2600006f260000702600007126000072260000732600007426000075260000762600007726000078260000792600007a2600007b2600007c2600007d2600007e2600007f260000 - m_AlignBytes: 16 - groupID: 88 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 9744 - particle2: 9745 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 9745 - particle2: 9746 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 9746 - particle2: 9747 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 9747 - particle2: 9748 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 9748 - particle2: 9749 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 9749 - particle2: 9750 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 9750 - particle2: 9751 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 9751 - particle2: 9752 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 9752 - particle2: 9753 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 9753 - particle2: 9754 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 9754 - particle2: 9755 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &893001394 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 893001395} - m_Layer: 0 - m_Name: Row (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &893001395 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 893001394} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -1.6} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2028909269} - - {fileID: 1521845708} - - {fileID: 1605421489} - - {fileID: 277586514} - - {fileID: 265659789} - - {fileID: 1438254939} - - {fileID: 811595118} - - {fileID: 1299859297} - - {fileID: 165314045} - - {fileID: 1948398665} - m_Father: {fileID: 1027659676} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &938771665 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 938771666} - - component: {fileID: 938771670} - - component: {fileID: 938771669} - - component: {fileID: 938771668} - - component: {fileID: 938771667} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &938771666 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 938771665} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1640435994} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &938771667 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 938771665} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 938771670} - m_Target: {fileID: 938771666} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &938771668 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 938771665} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &938771669 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 938771665} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 88 ---- !u!114 &938771670 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 938771665} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 802600008126000082260000832600008426000085260000862600008726000088260000892600008a2600008b2600008c2600008d2600008e2600008f260000902600009126000092260000932600009426000095260000962600009726000098260000992600009a2600009b2600009c2600009d2600009e2600009f260000a0260000a1260000a2260000a3260000a4260000a5260000a6260000a7260000a8260000a9260000aa260000ab260000ac260000ad260000ae260000af260000b0260000b1260000b2260000b3260000b4260000b5260000b6260000b7260000b8260000b9260000ba260000bb260000bc260000bd260000be260000bf260000c0260000c1260000c2260000c3260000c4260000c5260000c6260000c7260000c8260000c9260000ca260000cb260000cc260000cd260000ce260000cf260000d0260000d1260000d2260000d3260000d4260000d5260000d6260000d7260000d8260000d9260000da260000db260000dc260000dd260000de260000df260000e0260000e1260000e2260000e3260000e4260000e5260000e6260000e7260000e8260000e9260000ea260000eb260000ec260000ed260000ee260000ef260000 - m_AlignBytes: 16 - groupID: 89 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 9856 - particle2: 9857 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 9857 - particle2: 9858 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 9858 - particle2: 9859 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 9859 - particle2: 9860 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 9860 - particle2: 9861 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 9861 - particle2: 9862 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 9862 - particle2: 9863 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 9863 - particle2: 9864 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 9864 - particle2: 9865 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 9865 - particle2: 9866 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 9866 - particle2: 9867 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &940408951 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 940408952} - m_Layer: 0 - m_Name: Row - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &940408952 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 940408951} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1304270659} - - {fileID: 667569021} - - {fileID: 1613103433} - - {fileID: 702256090} - - {fileID: 1152767235} - - {fileID: 1333859662} - - {fileID: 778889994} - - {fileID: 393174417} - - {fileID: 1649225306} - - {fileID: 2033391599} - m_Father: {fileID: 1760688768} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &941225758 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 941225759} - - component: {fileID: 941225763} - - component: {fileID: 941225762} - - component: {fileID: 941225761} - - component: {fileID: 941225760} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &941225759 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 941225758} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1240601735} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &941225760 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 941225758} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 941225763} - m_Target: {fileID: 941225759} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &941225761 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 941225758} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &941225762 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 941225758} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 89 ---- !u!114 &941225763 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 941225758} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: f0260000f1260000f2260000f3260000f4260000f5260000f6260000f7260000f8260000f9260000fa260000fb260000fc260000fd260000fe260000ff260000002700000127000002270000032700000427000005270000062700000727000008270000092700000a2700000b2700000c2700000d2700000e2700000f270000102700001127000012270000132700001427000015270000162700001727000018270000192700001a2700001b2700001c2700001d2700001e2700001f270000202700002127000022270000232700002427000025270000262700002727000028270000292700002a2700002b2700002c2700002d2700002e2700002f270000302700003127000032270000332700003427000035270000362700003727000038270000392700003a2700003b2700003c2700003d2700003e2700003f270000402700004127000042270000432700004427000045270000462700004727000048270000492700004a2700004b2700004c2700004d2700004e2700004f270000502700005127000052270000532700005427000055270000562700005727000058270000592700005a2700005b2700005c2700005d2700005e2700005f270000 - m_AlignBytes: 16 - groupID: 90 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 9968 - particle2: 9969 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 9969 - particle2: 9970 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 9970 - particle2: 9971 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 9971 - particle2: 9972 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 9972 - particle2: 9973 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 9973 - particle2: 9974 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 9974 - particle2: 9975 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 9975 - particle2: 9976 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 9976 - particle2: 9977 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 9977 - particle2: 9978 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 9978 - particle2: 9979 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &949070423 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 949070424} - - component: {fileID: 949070428} - - component: {fileID: 949070427} - - component: {fileID: 949070426} - - component: {fileID: 949070425} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &949070424 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 949070423} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1062536481} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &949070425 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 949070423} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 949070428} - m_Target: {fileID: 949070424} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &949070426 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 949070423} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &949070427 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 949070423} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 90 ---- !u!114 &949070428 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 949070423} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 602700006127000062270000632700006427000065270000662700006727000068270000692700006a2700006b2700006c2700006d2700006e2700006f270000702700007127000072270000732700007427000075270000762700007727000078270000792700007a2700007b2700007c2700007d2700007e2700007f270000802700008127000082270000832700008427000085270000862700008727000088270000892700008a2700008b2700008c2700008d2700008e2700008f270000902700009127000092270000932700009427000095270000962700009727000098270000992700009a2700009b2700009c2700009d2700009e2700009f270000a0270000a1270000a2270000a3270000a4270000a5270000a6270000a7270000a8270000a9270000aa270000ab270000ac270000ad270000ae270000af270000b0270000b1270000b2270000b3270000b4270000b5270000b6270000b7270000b8270000b9270000ba270000bb270000bc270000bd270000be270000bf270000c0270000c1270000c2270000c3270000c4270000c5270000c6270000c7270000c8270000c9270000ca270000cb270000cc270000cd270000ce270000cf270000 - m_AlignBytes: 16 - groupID: 91 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 10080 - particle2: 10081 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 10081 - particle2: 10082 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 10082 - particle2: 10083 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 10083 - particle2: 10084 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 10084 - particle2: 10085 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 10085 - particle2: 10086 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 10086 - particle2: 10087 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 10087 - particle2: 10088 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 10088 - particle2: 10089 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 10089 - particle2: 10090 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 10090 - particle2: 10091 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &949981032 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 949981033} - - component: {fileID: 949981037} - - component: {fileID: 949981036} - - component: {fileID: 949981035} - - component: {fileID: 949981034} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &949981033 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 949981032} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1241971666} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &949981034 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 949981032} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 949981037} - m_Target: {fileID: 949981033} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &949981035 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 949981032} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &949981036 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 949981032} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 91 ---- !u!114 &949981037 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 949981032} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: d0270000d1270000d2270000d3270000d4270000d5270000d6270000d7270000d8270000d9270000da270000db270000dc270000dd270000de270000df270000e0270000e1270000e2270000e3270000e4270000e5270000e6270000e7270000e8270000e9270000ea270000eb270000ec270000ed270000ee270000ef270000f0270000f1270000f2270000f3270000f4270000f5270000f6270000f7270000f8270000f9270000fa270000fb270000fc270000fd270000fe270000ff270000002800000128000002280000032800000428000005280000062800000728000008280000092800000a2800000b2800000c2800000d2800000e2800000f280000102800001128000012280000132800001428000015280000162800001728000018280000192800001a2800001b2800001c2800001d2800001e2800001f280000202800002128000022280000232800002428000025280000262800002728000028280000292800002a2800002b2800002c2800002d2800002e2800002f280000302800003128000032280000332800003428000035280000362800003728000038280000392800003a2800003b2800003c2800003d2800003e2800003f280000 - m_AlignBytes: 16 - groupID: 92 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 10192 - particle2: 10193 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 10193 - particle2: 10194 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 10194 - particle2: 10195 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 10195 - particle2: 10196 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 10196 - particle2: 10197 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 10197 - particle2: 10198 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 10198 - particle2: 10199 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 10199 - particle2: 10200 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 10200 - particle2: 10201 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 10201 - particle2: 10202 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 10202 - particle2: 10203 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &960049598 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 960049599} - - component: {fileID: 960049603} - - component: {fileID: 960049602} - - component: {fileID: 960049601} - - component: {fileID: 960049600} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &960049599 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 960049598} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 249029318} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &960049600 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 960049598} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 960049603} - m_Target: {fileID: 960049599} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &960049601 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 960049598} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &960049602 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 960049598} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 92 ---- !u!114 &960049603 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 960049598} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 402800004128000042280000432800004428000045280000462800004728000048280000492800004a2800004b2800004c2800004d2800004e2800004f280000502800005128000052280000532800005428000055280000562800005728000058280000592800005a2800005b2800005c2800005d2800005e2800005f280000602800006128000062280000632800006428000065280000662800006728000068280000692800006a2800006b2800006c2800006d2800006e2800006f280000702800007128000072280000732800007428000075280000762800007728000078280000792800007a2800007b2800007c2800007d2800007e2800007f280000802800008128000082280000832800008428000085280000862800008728000088280000892800008a2800008b2800008c2800008d2800008e2800008f280000902800009128000092280000932800009428000095280000962800009728000098280000992800009a2800009b2800009c2800009d2800009e2800009f280000a0280000a1280000a2280000a3280000a4280000a5280000a6280000a7280000a8280000a9280000aa280000ab280000ac280000ad280000ae280000af280000 - m_AlignBytes: 16 - groupID: 93 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 10304 - particle2: 10305 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 10305 - particle2: 10306 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 10306 - particle2: 10307 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 10307 - particle2: 10308 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 10308 - particle2: 10309 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 10309 - particle2: 10310 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 10310 - particle2: 10311 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 10311 - particle2: 10312 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 10312 - particle2: 10313 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 10313 - particle2: 10314 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 10314 - particle2: 10315 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &964498382 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 964498383} - - component: {fileID: 964498387} - - component: {fileID: 964498386} - - component: {fileID: 964498385} - - component: {fileID: 964498384} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &964498383 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 964498382} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2009678977} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &964498384 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 964498382} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 964498387} - m_Target: {fileID: 964498383} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &964498385 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 964498382} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &964498386 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 964498382} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 93 ---- !u!114 &964498387 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 964498382} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: b0280000b1280000b2280000b3280000b4280000b5280000b6280000b7280000b8280000b9280000ba280000bb280000bc280000bd280000be280000bf280000c0280000c1280000c2280000c3280000c4280000c5280000c6280000c7280000c8280000c9280000ca280000cb280000cc280000cd280000ce280000cf280000d0280000d1280000d2280000d3280000d4280000d5280000d6280000d7280000d8280000d9280000da280000db280000dc280000dd280000de280000df280000e0280000e1280000e2280000e3280000e4280000e5280000e6280000e7280000e8280000e9280000ea280000eb280000ec280000ed280000ee280000ef280000f0280000f1280000f2280000f3280000f4280000f5280000f6280000f7280000f8280000f9280000fa280000fb280000fc280000fd280000fe280000ff280000002900000129000002290000032900000429000005290000062900000729000008290000092900000a2900000b2900000c2900000d2900000e2900000f290000102900001129000012290000132900001429000015290000162900001729000018290000192900001a2900001b2900001c2900001d2900001e2900001f290000 - m_AlignBytes: 16 - groupID: 94 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 10416 - particle2: 10417 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 10417 - particle2: 10418 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 10418 - particle2: 10419 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 10419 - particle2: 10420 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 10420 - particle2: 10421 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 10421 - particle2: 10422 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 10422 - particle2: 10423 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 10423 - particle2: 10424 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 10424 - particle2: 10425 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 10425 - particle2: 10426 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 10426 - particle2: 10427 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &975387944 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 975387945} - - component: {fileID: 975387949} - - component: {fileID: 975387948} - - component: {fileID: 975387947} - - component: {fileID: 975387946} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &975387945 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 975387944} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1464717035} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &975387946 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 975387944} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 975387949} - m_Target: {fileID: 975387945} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &975387947 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 975387944} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &975387948 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 975387944} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 94 ---- !u!114 &975387949 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 975387944} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 202900002129000022290000232900002429000025290000262900002729000028290000292900002a2900002b2900002c2900002d2900002e2900002f290000302900003129000032290000332900003429000035290000362900003729000038290000392900003a2900003b2900003c2900003d2900003e2900003f290000402900004129000042290000432900004429000045290000462900004729000048290000492900004a2900004b2900004c2900004d2900004e2900004f290000502900005129000052290000532900005429000055290000562900005729000058290000592900005a2900005b2900005c2900005d2900005e2900005f290000602900006129000062290000632900006429000065290000662900006729000068290000692900006a2900006b2900006c2900006d2900006e2900006f290000702900007129000072290000732900007429000075290000762900007729000078290000792900007a2900007b2900007c2900007d2900007e2900007f290000802900008129000082290000832900008429000085290000862900008729000088290000892900008a2900008b2900008c2900008d2900008e2900008f290000 - m_AlignBytes: 16 - groupID: 95 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 10528 - particle2: 10529 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 10529 - particle2: 10530 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 10530 - particle2: 10531 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 10531 - particle2: 10532 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 10532 - particle2: 10533 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 10533 - particle2: 10534 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 10534 - particle2: 10535 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 10535 - particle2: 10536 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 10536 - particle2: 10537 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 10537 - particle2: 10538 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 10538 - particle2: 10539 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &980293276 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 980293277} - - component: {fileID: 980293281} - - component: {fileID: 980293280} - - component: {fileID: 980293279} - - component: {fileID: 980293278} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &980293277 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 980293276} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 510728467} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &980293278 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 980293276} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 980293281} - m_Target: {fileID: 980293277} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &980293279 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 980293276} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &980293280 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 980293276} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 95 ---- !u!114 &980293281 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 980293276} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 902900009129000092290000932900009429000095290000962900009729000098290000992900009a2900009b2900009c2900009d2900009e2900009f290000a0290000a1290000a2290000a3290000a4290000a5290000a6290000a7290000a8290000a9290000aa290000ab290000ac290000ad290000ae290000af290000b0290000b1290000b2290000b3290000b4290000b5290000b6290000b7290000b8290000b9290000ba290000bb290000bc290000bd290000be290000bf290000c0290000c1290000c2290000c3290000c4290000c5290000c6290000c7290000c8290000c9290000ca290000cb290000cc290000cd290000ce290000cf290000d0290000d1290000d2290000d3290000d4290000d5290000d6290000d7290000d8290000d9290000da290000db290000dc290000dd290000de290000df290000e0290000e1290000e2290000e3290000e4290000e5290000e6290000e7290000e8290000e9290000ea290000eb290000ec290000ed290000ee290000ef290000f0290000f1290000f2290000f3290000f4290000f5290000f6290000f7290000f8290000f9290000fa290000fb290000fc290000fd290000fe290000ff290000 - m_AlignBytes: 16 - groupID: 96 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 10640 - particle2: 10641 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 10641 - particle2: 10642 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 10642 - particle2: 10643 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 10643 - particle2: 10644 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 10644 - particle2: 10645 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 10645 - particle2: 10646 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 10646 - particle2: 10647 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 10647 - particle2: 10648 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 10648 - particle2: 10649 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 10649 - particle2: 10650 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 10650 - particle2: 10651 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &983686048 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 983686049} - - component: {fileID: 983686053} - - component: {fileID: 983686052} - - component: {fileID: 983686051} - - component: {fileID: 983686050} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &983686049 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 983686048} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1241971666} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &983686050 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 983686048} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 983686053} - m_Target: {fileID: 983686049} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &983686051 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 983686048} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &983686052 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 983686048} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 96 ---- !u!114 &983686053 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 983686048} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 002a0000012a0000022a0000032a0000042a0000052a0000062a0000072a0000082a0000092a00000a2a00000b2a00000c2a00000d2a00000e2a00000f2a0000102a0000112a0000122a0000132a0000142a0000152a0000162a0000172a0000182a0000192a00001a2a00001b2a00001c2a00001d2a00001e2a00001f2a0000202a0000212a0000222a0000232a0000242a0000252a0000262a0000272a0000282a0000292a00002a2a00002b2a00002c2a00002d2a00002e2a00002f2a0000302a0000312a0000322a0000332a0000342a0000352a0000362a0000372a0000382a0000392a00003a2a00003b2a00003c2a00003d2a00003e2a00003f2a0000402a0000412a0000422a0000432a0000442a0000452a0000462a0000472a0000482a0000492a00004a2a00004b2a00004c2a00004d2a00004e2a00004f2a0000502a0000512a0000522a0000532a0000542a0000552a0000562a0000572a0000582a0000592a00005a2a00005b2a00005c2a00005d2a00005e2a00005f2a0000602a0000612a0000622a0000632a0000642a0000652a0000662a0000672a0000682a0000692a00006a2a00006b2a00006c2a00006d2a00006e2a00006f2a0000 - m_AlignBytes: 16 - groupID: 97 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 10752 - particle2: 10753 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 10753 - particle2: 10754 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 10754 - particle2: 10755 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 10755 - particle2: 10756 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 10756 - particle2: 10757 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 10757 - particle2: 10758 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 10758 - particle2: 10759 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 10759 - particle2: 10760 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 10760 - particle2: 10761 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 10761 - particle2: 10762 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 10762 - particle2: 10763 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &990019827 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 990019828} - - component: {fileID: 990019832} - - component: {fileID: 990019831} - - component: {fileID: 990019830} - - component: {fileID: 990019829} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &990019828 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 990019827} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 648480057} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &990019829 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 990019827} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 990019832} - m_Target: {fileID: 990019828} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &990019830 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 990019827} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &990019831 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 990019827} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 97 ---- !u!114 &990019832 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 990019827} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 702a0000712a0000722a0000732a0000742a0000752a0000762a0000772a0000782a0000792a00007a2a00007b2a00007c2a00007d2a00007e2a00007f2a0000802a0000812a0000822a0000832a0000842a0000852a0000862a0000872a0000882a0000892a00008a2a00008b2a00008c2a00008d2a00008e2a00008f2a0000902a0000912a0000922a0000932a0000942a0000952a0000962a0000972a0000982a0000992a00009a2a00009b2a00009c2a00009d2a00009e2a00009f2a0000a02a0000a12a0000a22a0000a32a0000a42a0000a52a0000a62a0000a72a0000a82a0000a92a0000aa2a0000ab2a0000ac2a0000ad2a0000ae2a0000af2a0000b02a0000b12a0000b22a0000b32a0000b42a0000b52a0000b62a0000b72a0000b82a0000b92a0000ba2a0000bb2a0000bc2a0000bd2a0000be2a0000bf2a0000c02a0000c12a0000c22a0000c32a0000c42a0000c52a0000c62a0000c72a0000c82a0000c92a0000ca2a0000cb2a0000cc2a0000cd2a0000ce2a0000cf2a0000d02a0000d12a0000d22a0000d32a0000d42a0000d52a0000d62a0000d72a0000d82a0000d92a0000da2a0000db2a0000dc2a0000dd2a0000de2a0000df2a0000 - m_AlignBytes: 16 - groupID: 98 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 10864 - particle2: 10865 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 10865 - particle2: 10866 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 10866 - particle2: 10867 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 10867 - particle2: 10868 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 10868 - particle2: 10869 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 10869 - particle2: 10870 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 10870 - particle2: 10871 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 10871 - particle2: 10872 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 10872 - particle2: 10873 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 10873 - particle2: 10874 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 10874 - particle2: 10875 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1001012757 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1001012758} - - component: {fileID: 1001012762} - - component: {fileID: 1001012761} - - component: {fileID: 1001012760} - - component: {fileID: 1001012759} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1001012758 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1001012757} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1977632070} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1001012759 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1001012757} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1001012762} - m_Target: {fileID: 1001012758} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1001012760 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1001012757} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1001012761 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1001012757} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 98 ---- !u!114 &1001012762 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1001012757} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: e02a0000e12a0000e22a0000e32a0000e42a0000e52a0000e62a0000e72a0000e82a0000e92a0000ea2a0000eb2a0000ec2a0000ed2a0000ee2a0000ef2a0000f02a0000f12a0000f22a0000f32a0000f42a0000f52a0000f62a0000f72a0000f82a0000f92a0000fa2a0000fb2a0000fc2a0000fd2a0000fe2a0000ff2a0000002b0000012b0000022b0000032b0000042b0000052b0000062b0000072b0000082b0000092b00000a2b00000b2b00000c2b00000d2b00000e2b00000f2b0000102b0000112b0000122b0000132b0000142b0000152b0000162b0000172b0000182b0000192b00001a2b00001b2b00001c2b00001d2b00001e2b00001f2b0000202b0000212b0000222b0000232b0000242b0000252b0000262b0000272b0000282b0000292b00002a2b00002b2b00002c2b00002d2b00002e2b00002f2b0000302b0000312b0000322b0000332b0000342b0000352b0000362b0000372b0000382b0000392b00003a2b00003b2b00003c2b00003d2b00003e2b00003f2b0000402b0000412b0000422b0000432b0000442b0000452b0000462b0000472b0000482b0000492b00004a2b00004b2b00004c2b00004d2b00004e2b00004f2b0000 - m_AlignBytes: 16 - groupID: 99 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 10976 - particle2: 10977 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 10977 - particle2: 10978 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 10978 - particle2: 10979 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 10979 - particle2: 10980 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 10980 - particle2: 10981 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 10981 - particle2: 10982 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 10982 - particle2: 10983 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 10983 - particle2: 10984 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 10984 - particle2: 10985 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 10985 - particle2: 10986 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 10986 - particle2: 10987 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1001514667 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1001514668} - - component: {fileID: 1001514672} - - component: {fileID: 1001514671} - - component: {fileID: 1001514670} - - component: {fileID: 1001514669} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1001514668 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1001514667} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1464717035} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1001514669 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1001514667} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1001514672} - m_Target: {fileID: 1001514668} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1001514670 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1001514667} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1001514671 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1001514667} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 99 ---- !u!114 &1001514672 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1001514667} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 502b0000512b0000522b0000532b0000542b0000552b0000562b0000572b0000582b0000592b00005a2b00005b2b00005c2b00005d2b00005e2b00005f2b0000602b0000612b0000622b0000632b0000642b0000652b0000662b0000672b0000682b0000692b00006a2b00006b2b00006c2b00006d2b00006e2b00006f2b0000702b0000712b0000722b0000732b0000742b0000752b0000762b0000772b0000782b0000792b00007a2b00007b2b00007c2b00007d2b00007e2b00007f2b0000802b0000812b0000822b0000832b0000842b0000852b0000862b0000872b0000882b0000892b00008a2b00008b2b00008c2b00008d2b00008e2b00008f2b0000902b0000912b0000922b0000932b0000942b0000952b0000962b0000972b0000982b0000992b00009a2b00009b2b00009c2b00009d2b00009e2b00009f2b0000a02b0000a12b0000a22b0000a32b0000a42b0000a52b0000a62b0000a72b0000a82b0000a92b0000aa2b0000ab2b0000ac2b0000ad2b0000ae2b0000af2b0000b02b0000b12b0000b22b0000b32b0000b42b0000b52b0000b62b0000b72b0000b82b0000b92b0000ba2b0000bb2b0000bc2b0000bd2b0000be2b0000bf2b0000 - m_AlignBytes: 16 - groupID: 100 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 11088 - particle2: 11089 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 11089 - particle2: 11090 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 11090 - particle2: 11091 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 11091 - particle2: 11092 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 11092 - particle2: 11093 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 11093 - particle2: 11094 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 11094 - particle2: 11095 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 11095 - particle2: 11096 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 11096 - particle2: 11097 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 11097 - particle2: 11098 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 11098 - particle2: 11099 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1002464891 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1002464896} - - component: {fileID: 1002464895} - - component: {fileID: 1002464893} - - component: {fileID: 1002464892} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1002464892 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - m_Enabled: 1 ---- !u!124 &1002464893 -Behaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - m_Enabled: 1 ---- !u!20 &1002464895 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 75 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1002464896 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1002464891} - serializedVersion: 2 - m_LocalRotation: {x: 0.14555489, y: 0.3786732, z: -0.060435172, w: 0.9120132} - m_LocalPosition: {x: -3.68, y: 4.2, z: -4.1} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 18.136, y: 45.097, z: 0} ---- !u!1 &1022784182 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1022784183} - - component: {fileID: 1022784187} - - component: {fileID: 1022784186} - - component: {fileID: 1022784185} - - component: {fileID: 1022784184} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1022784183 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1022784182} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1798495239} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1022784184 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1022784182} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1022784187} - m_Target: {fileID: 1022784183} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1022784185 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1022784182} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1022784186 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1022784182} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 100 ---- !u!114 &1022784187 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1022784182} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: c02b0000c12b0000c22b0000c32b0000c42b0000c52b0000c62b0000c72b0000c82b0000c92b0000ca2b0000cb2b0000cc2b0000cd2b0000ce2b0000cf2b0000d02b0000d12b0000d22b0000d32b0000d42b0000d52b0000d62b0000d72b0000d82b0000d92b0000da2b0000db2b0000dc2b0000dd2b0000de2b0000df2b0000e02b0000e12b0000e22b0000e32b0000e42b0000e52b0000e62b0000e72b0000e82b0000e92b0000ea2b0000eb2b0000ec2b0000ed2b0000ee2b0000ef2b0000f02b0000f12b0000f22b0000f32b0000f42b0000f52b0000f62b0000f72b0000f82b0000f92b0000fa2b0000fb2b0000fc2b0000fd2b0000fe2b0000ff2b0000002c0000012c0000022c0000032c0000042c0000052c0000062c0000072c0000082c0000092c00000a2c00000b2c00000c2c00000d2c00000e2c00000f2c0000102c0000112c0000122c0000132c0000142c0000152c0000162c0000172c0000182c0000192c00001a2c00001b2c00001c2c00001d2c00001e2c00001f2c0000202c0000212c0000222c0000232c0000242c0000252c0000262c0000272c0000282c0000292c00002a2c00002b2c00002c2c00002d2c00002e2c00002f2c0000 - m_AlignBytes: 16 - groupID: 101 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 11200 - particle2: 11201 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 11201 - particle2: 11202 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 11202 - particle2: 11203 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 11203 - particle2: 11204 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 11204 - particle2: 11205 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 11205 - particle2: 11206 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 11206 - particle2: 11207 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 11207 - particle2: 11208 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 11208 - particle2: 11209 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 11209 - particle2: 11210 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 11210 - particle2: 11211 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1027659675 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1027659676} - m_Layer: 0 - m_Name: Group - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1027659676 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1027659675} - serializedVersion: 2 - m_LocalRotation: {x: 0.0008726948, y: 0, z: 0, w: 0.99999964} - m_LocalPosition: {x: -1.11, y: 1.59, z: 1.61} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 2009678977} - - {fileID: 472161722} - - {fileID: 1306593279} - - {fileID: 1628171963} - - {fileID: 249029318} - - {fileID: 779073863} - - {fileID: 1240601735} - - {fileID: 1640435994} - - {fileID: 893001395} - - {fileID: 1241971666} - m_Father: {fileID: 2102841797} - m_LocalEulerAnglesHint: {x: 0.1, y: 0, z: 0} ---- !u!1 &1040360818 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1040360819} - - component: {fileID: 1040360823} - - component: {fileID: 1040360822} - - component: {fileID: 1040360821} - - component: {fileID: 1040360820} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1040360819 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1040360818} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1464717035} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1040360820 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1040360818} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1040360823} - m_Target: {fileID: 1040360819} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1040360821 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1040360818} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1040360822 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1040360818} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 101 ---- !u!114 &1040360823 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1040360818} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 302c0000312c0000322c0000332c0000342c0000352c0000362c0000372c0000382c0000392c00003a2c00003b2c00003c2c00003d2c00003e2c00003f2c0000402c0000412c0000422c0000432c0000442c0000452c0000462c0000472c0000482c0000492c00004a2c00004b2c00004c2c00004d2c00004e2c00004f2c0000502c0000512c0000522c0000532c0000542c0000552c0000562c0000572c0000582c0000592c00005a2c00005b2c00005c2c00005d2c00005e2c00005f2c0000602c0000612c0000622c0000632c0000642c0000652c0000662c0000672c0000682c0000692c00006a2c00006b2c00006c2c00006d2c00006e2c00006f2c0000702c0000712c0000722c0000732c0000742c0000752c0000762c0000772c0000782c0000792c00007a2c00007b2c00007c2c00007d2c00007e2c00007f2c0000802c0000812c0000822c0000832c0000842c0000852c0000862c0000872c0000882c0000892c00008a2c00008b2c00008c2c00008d2c00008e2c00008f2c0000902c0000912c0000922c0000932c0000942c0000952c0000962c0000972c0000982c0000992c00009a2c00009b2c00009c2c00009d2c00009e2c00009f2c0000 - m_AlignBytes: 16 - groupID: 102 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 11312 - particle2: 11313 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 11313 - particle2: 11314 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 11314 - particle2: 11315 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 11315 - particle2: 11316 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 11316 - particle2: 11317 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 11317 - particle2: 11318 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 11318 - particle2: 11319 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 11319 - particle2: 11320 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 11320 - particle2: 11321 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 11321 - particle2: 11322 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 11322 - particle2: 11323 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1058904399 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1058904400} - - component: {fileID: 1058904404} - - component: {fileID: 1058904403} - - component: {fileID: 1058904402} - - component: {fileID: 1058904401} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1058904400 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1058904399} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 249029318} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1058904401 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1058904399} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1058904404} - m_Target: {fileID: 1058904400} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1058904402 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1058904399} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1058904403 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1058904399} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 102 ---- !u!114 &1058904404 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1058904399} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: a02c0000a12c0000a22c0000a32c0000a42c0000a52c0000a62c0000a72c0000a82c0000a92c0000aa2c0000ab2c0000ac2c0000ad2c0000ae2c0000af2c0000b02c0000b12c0000b22c0000b32c0000b42c0000b52c0000b62c0000b72c0000b82c0000b92c0000ba2c0000bb2c0000bc2c0000bd2c0000be2c0000bf2c0000c02c0000c12c0000c22c0000c32c0000c42c0000c52c0000c62c0000c72c0000c82c0000c92c0000ca2c0000cb2c0000cc2c0000cd2c0000ce2c0000cf2c0000d02c0000d12c0000d22c0000d32c0000d42c0000d52c0000d62c0000d72c0000d82c0000d92c0000da2c0000db2c0000dc2c0000dd2c0000de2c0000df2c0000e02c0000e12c0000e22c0000e32c0000e42c0000e52c0000e62c0000e72c0000e82c0000e92c0000ea2c0000eb2c0000ec2c0000ed2c0000ee2c0000ef2c0000f02c0000f12c0000f22c0000f32c0000f42c0000f52c0000f62c0000f72c0000f82c0000f92c0000fa2c0000fb2c0000fc2c0000fd2c0000fe2c0000ff2c0000002d0000012d0000022d0000032d0000042d0000052d0000062d0000072d0000082d0000092d00000a2d00000b2d00000c2d00000d2d00000e2d00000f2d0000 - m_AlignBytes: 16 - groupID: 103 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 11424 - particle2: 11425 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 11425 - particle2: 11426 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 11426 - particle2: 11427 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 11427 - particle2: 11428 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 11428 - particle2: 11429 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 11429 - particle2: 11430 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 11430 - particle2: 11431 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 11431 - particle2: 11432 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 11432 - particle2: 11433 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 11433 - particle2: 11434 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 11434 - particle2: 11435 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1061430264 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1061430265} - - component: {fileID: 1061430269} - - component: {fileID: 1061430268} - - component: {fileID: 1061430267} - - component: {fileID: 1061430266} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1061430265 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1061430264} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2009678977} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1061430266 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1061430264} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1061430269} - m_Target: {fileID: 1061430265} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1061430267 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1061430264} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1061430268 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1061430264} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 103 ---- !u!114 &1061430269 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1061430264} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 102d0000112d0000122d0000132d0000142d0000152d0000162d0000172d0000182d0000192d00001a2d00001b2d00001c2d00001d2d00001e2d00001f2d0000202d0000212d0000222d0000232d0000242d0000252d0000262d0000272d0000282d0000292d00002a2d00002b2d00002c2d00002d2d00002e2d00002f2d0000302d0000312d0000322d0000332d0000342d0000352d0000362d0000372d0000382d0000392d00003a2d00003b2d00003c2d00003d2d00003e2d00003f2d0000402d0000412d0000422d0000432d0000442d0000452d0000462d0000472d0000482d0000492d00004a2d00004b2d00004c2d00004d2d00004e2d00004f2d0000502d0000512d0000522d0000532d0000542d0000552d0000562d0000572d0000582d0000592d00005a2d00005b2d00005c2d00005d2d00005e2d00005f2d0000602d0000612d0000622d0000632d0000642d0000652d0000662d0000672d0000682d0000692d00006a2d00006b2d00006c2d00006d2d00006e2d00006f2d0000702d0000712d0000722d0000732d0000742d0000752d0000762d0000772d0000782d0000792d00007a2d00007b2d00007c2d00007d2d00007e2d00007f2d0000 - m_AlignBytes: 16 - groupID: 104 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 11536 - particle2: 11537 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 11537 - particle2: 11538 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 11538 - particle2: 11539 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 11539 - particle2: 11540 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 11540 - particle2: 11541 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 11541 - particle2: 11542 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 11542 - particle2: 11543 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 11543 - particle2: 11544 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 11544 - particle2: 11545 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 11545 - particle2: 11546 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 11546 - particle2: 11547 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1062536480 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1062536481} - m_Layer: 0 - m_Name: Row (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1062536481 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1062536480} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -0.6} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1098754171} - - {fileID: 1107509114} - - {fileID: 1121401526} - - {fileID: 139383575} - - {fileID: 1621912098} - - {fileID: 1440395744} - - {fileID: 869213058} - - {fileID: 2058503950} - - {fileID: 949070424} - - {fileID: 156100545} - m_Father: {fileID: 1760688768} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1084473019 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1084473020} - - component: {fileID: 1084473024} - - component: {fileID: 1084473023} - - component: {fileID: 1084473022} - - component: {fileID: 1084473021} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1084473020 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1084473019} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 510728467} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1084473021 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1084473019} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1084473024} - m_Target: {fileID: 1084473020} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1084473022 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1084473019} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1084473023 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1084473019} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 104 ---- !u!114 &1084473024 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1084473019} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 802d0000812d0000822d0000832d0000842d0000852d0000862d0000872d0000882d0000892d00008a2d00008b2d00008c2d00008d2d00008e2d00008f2d0000902d0000912d0000922d0000932d0000942d0000952d0000962d0000972d0000982d0000992d00009a2d00009b2d00009c2d00009d2d00009e2d00009f2d0000a02d0000a12d0000a22d0000a32d0000a42d0000a52d0000a62d0000a72d0000a82d0000a92d0000aa2d0000ab2d0000ac2d0000ad2d0000ae2d0000af2d0000b02d0000b12d0000b22d0000b32d0000b42d0000b52d0000b62d0000b72d0000b82d0000b92d0000ba2d0000bb2d0000bc2d0000bd2d0000be2d0000bf2d0000c02d0000c12d0000c22d0000c32d0000c42d0000c52d0000c62d0000c72d0000c82d0000c92d0000ca2d0000cb2d0000cc2d0000cd2d0000ce2d0000cf2d0000d02d0000d12d0000d22d0000d32d0000d42d0000d52d0000d62d0000d72d0000d82d0000d92d0000da2d0000db2d0000dc2d0000dd2d0000de2d0000df2d0000e02d0000e12d0000e22d0000e32d0000e42d0000e52d0000e62d0000e72d0000e82d0000e92d0000ea2d0000eb2d0000ec2d0000ed2d0000ee2d0000ef2d0000 - m_AlignBytes: 16 - groupID: 105 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 11648 - particle2: 11649 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 11649 - particle2: 11650 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 11650 - particle2: 11651 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 11651 - particle2: 11652 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 11652 - particle2: 11653 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 11653 - particle2: 11654 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 11654 - particle2: 11655 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 11655 - particle2: 11656 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 11656 - particle2: 11657 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 11657 - particle2: 11658 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 11658 - particle2: 11659 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1092735639 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1092735640} - - component: {fileID: 1092735644} - - component: {fileID: 1092735643} - - component: {fileID: 1092735642} - - component: {fileID: 1092735641} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1092735640 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1092735639} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 249029318} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1092735641 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1092735639} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1092735644} - m_Target: {fileID: 1092735640} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1092735642 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1092735639} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1092735643 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1092735639} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 105 ---- !u!114 &1092735644 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1092735639} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: f02d0000f12d0000f22d0000f32d0000f42d0000f52d0000f62d0000f72d0000f82d0000f92d0000fa2d0000fb2d0000fc2d0000fd2d0000fe2d0000ff2d0000002e0000012e0000022e0000032e0000042e0000052e0000062e0000072e0000082e0000092e00000a2e00000b2e00000c2e00000d2e00000e2e00000f2e0000102e0000112e0000122e0000132e0000142e0000152e0000162e0000172e0000182e0000192e00001a2e00001b2e00001c2e00001d2e00001e2e00001f2e0000202e0000212e0000222e0000232e0000242e0000252e0000262e0000272e0000282e0000292e00002a2e00002b2e00002c2e00002d2e00002e2e00002f2e0000302e0000312e0000322e0000332e0000342e0000352e0000362e0000372e0000382e0000392e00003a2e00003b2e00003c2e00003d2e00003e2e00003f2e0000402e0000412e0000422e0000432e0000442e0000452e0000462e0000472e0000482e0000492e00004a2e00004b2e00004c2e00004d2e00004e2e00004f2e0000502e0000512e0000522e0000532e0000542e0000552e0000562e0000572e0000582e0000592e00005a2e00005b2e00005c2e00005d2e00005e2e00005f2e0000 - m_AlignBytes: 16 - groupID: 106 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 11760 - particle2: 11761 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 11761 - particle2: 11762 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 11762 - particle2: 11763 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 11763 - particle2: 11764 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 11764 - particle2: 11765 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 11765 - particle2: 11766 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 11766 - particle2: 11767 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 11767 - particle2: 11768 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 11768 - particle2: 11769 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 11769 - particle2: 11770 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 11770 - particle2: 11771 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1098754170 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1098754171} - - component: {fileID: 1098754175} - - component: {fileID: 1098754174} - - component: {fileID: 1098754173} - - component: {fileID: 1098754172} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1098754171 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1098754170} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1062536481} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1098754172 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1098754170} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1098754175} - m_Target: {fileID: 1098754171} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1098754173 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1098754170} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1098754174 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1098754170} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 106 ---- !u!114 &1098754175 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1098754170} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 602e0000612e0000622e0000632e0000642e0000652e0000662e0000672e0000682e0000692e00006a2e00006b2e00006c2e00006d2e00006e2e00006f2e0000702e0000712e0000722e0000732e0000742e0000752e0000762e0000772e0000782e0000792e00007a2e00007b2e00007c2e00007d2e00007e2e00007f2e0000802e0000812e0000822e0000832e0000842e0000852e0000862e0000872e0000882e0000892e00008a2e00008b2e00008c2e00008d2e00008e2e00008f2e0000902e0000912e0000922e0000932e0000942e0000952e0000962e0000972e0000982e0000992e00009a2e00009b2e00009c2e00009d2e00009e2e00009f2e0000a02e0000a12e0000a22e0000a32e0000a42e0000a52e0000a62e0000a72e0000a82e0000a92e0000aa2e0000ab2e0000ac2e0000ad2e0000ae2e0000af2e0000b02e0000b12e0000b22e0000b32e0000b42e0000b52e0000b62e0000b72e0000b82e0000b92e0000ba2e0000bb2e0000bc2e0000bd2e0000be2e0000bf2e0000c02e0000c12e0000c22e0000c32e0000c42e0000c52e0000c62e0000c72e0000c82e0000c92e0000ca2e0000cb2e0000cc2e0000cd2e0000ce2e0000cf2e0000 - m_AlignBytes: 16 - groupID: 107 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 11872 - particle2: 11873 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 11873 - particle2: 11874 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 11874 - particle2: 11875 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 11875 - particle2: 11876 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 11876 - particle2: 11877 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 11877 - particle2: 11878 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 11878 - particle2: 11879 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 11879 - particle2: 11880 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 11880 - particle2: 11881 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 11881 - particle2: 11882 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 11882 - particle2: 11883 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1100467795 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1100467796} - - component: {fileID: 1100467800} - - component: {fileID: 1100467799} - - component: {fileID: 1100467798} - - component: {fileID: 1100467797} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1100467796 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1100467795} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 779073863} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1100467797 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1100467795} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1100467800} - m_Target: {fileID: 1100467796} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1100467798 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1100467795} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1100467799 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1100467795} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 107 ---- !u!114 &1100467800 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1100467795} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: d02e0000d12e0000d22e0000d32e0000d42e0000d52e0000d62e0000d72e0000d82e0000d92e0000da2e0000db2e0000dc2e0000dd2e0000de2e0000df2e0000e02e0000e12e0000e22e0000e32e0000e42e0000e52e0000e62e0000e72e0000e82e0000e92e0000ea2e0000eb2e0000ec2e0000ed2e0000ee2e0000ef2e0000f02e0000f12e0000f22e0000f32e0000f42e0000f52e0000f62e0000f72e0000f82e0000f92e0000fa2e0000fb2e0000fc2e0000fd2e0000fe2e0000ff2e0000002f0000012f0000022f0000032f0000042f0000052f0000062f0000072f0000082f0000092f00000a2f00000b2f00000c2f00000d2f00000e2f00000f2f0000102f0000112f0000122f0000132f0000142f0000152f0000162f0000172f0000182f0000192f00001a2f00001b2f00001c2f00001d2f00001e2f00001f2f0000202f0000212f0000222f0000232f0000242f0000252f0000262f0000272f0000282f0000292f00002a2f00002b2f00002c2f00002d2f00002e2f00002f2f0000302f0000312f0000322f0000332f0000342f0000352f0000362f0000372f0000382f0000392f00003a2f00003b2f00003c2f00003d2f00003e2f00003f2f0000 - m_AlignBytes: 16 - groupID: 108 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 11984 - particle2: 11985 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 11985 - particle2: 11986 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 11986 - particle2: 11987 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 11987 - particle2: 11988 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 11988 - particle2: 11989 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 11989 - particle2: 11990 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 11990 - particle2: 11991 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 11991 - particle2: 11992 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 11992 - particle2: 11993 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 11993 - particle2: 11994 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 11994 - particle2: 11995 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1101870349 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1101870350} - - component: {fileID: 1101870354} - - component: {fileID: 1101870353} - - component: {fileID: 1101870352} - - component: {fileID: 1101870351} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1101870350 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1101870349} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 249029318} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1101870351 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1101870349} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1101870354} - m_Target: {fileID: 1101870350} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1101870352 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1101870349} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1101870353 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1101870349} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 108 ---- !u!114 &1101870354 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1101870349} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 402f0000412f0000422f0000432f0000442f0000452f0000462f0000472f0000482f0000492f00004a2f00004b2f00004c2f00004d2f00004e2f00004f2f0000502f0000512f0000522f0000532f0000542f0000552f0000562f0000572f0000582f0000592f00005a2f00005b2f00005c2f00005d2f00005e2f00005f2f0000602f0000612f0000622f0000632f0000642f0000652f0000662f0000672f0000682f0000692f00006a2f00006b2f00006c2f00006d2f00006e2f00006f2f0000702f0000712f0000722f0000732f0000742f0000752f0000762f0000772f0000782f0000792f00007a2f00007b2f00007c2f00007d2f00007e2f00007f2f0000802f0000812f0000822f0000832f0000842f0000852f0000862f0000872f0000882f0000892f00008a2f00008b2f00008c2f00008d2f00008e2f00008f2f0000902f0000912f0000922f0000932f0000942f0000952f0000962f0000972f0000982f0000992f00009a2f00009b2f00009c2f00009d2f00009e2f00009f2f0000a02f0000a12f0000a22f0000a32f0000a42f0000a52f0000a62f0000a72f0000a82f0000a92f0000aa2f0000ab2f0000ac2f0000ad2f0000ae2f0000af2f0000 - m_AlignBytes: 16 - groupID: 109 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 12096 - particle2: 12097 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 12097 - particle2: 12098 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 12098 - particle2: 12099 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 12099 - particle2: 12100 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 12100 - particle2: 12101 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 12101 - particle2: 12102 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 12102 - particle2: 12103 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 12103 - particle2: 12104 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 12104 - particle2: 12105 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 12105 - particle2: 12106 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 12106 - particle2: 12107 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1107509113 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1107509114} - - component: {fileID: 1107509118} - - component: {fileID: 1107509117} - - component: {fileID: 1107509116} - - component: {fileID: 1107509115} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1107509114 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1107509113} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1062536481} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1107509115 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1107509113} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1107509118} - m_Target: {fileID: 1107509114} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1107509116 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1107509113} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1107509117 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1107509113} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 109 ---- !u!114 &1107509118 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1107509113} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: b02f0000b12f0000b22f0000b32f0000b42f0000b52f0000b62f0000b72f0000b82f0000b92f0000ba2f0000bb2f0000bc2f0000bd2f0000be2f0000bf2f0000c02f0000c12f0000c22f0000c32f0000c42f0000c52f0000c62f0000c72f0000c82f0000c92f0000ca2f0000cb2f0000cc2f0000cd2f0000ce2f0000cf2f0000d02f0000d12f0000d22f0000d32f0000d42f0000d52f0000d62f0000d72f0000d82f0000d92f0000da2f0000db2f0000dc2f0000dd2f0000de2f0000df2f0000e02f0000e12f0000e22f0000e32f0000e42f0000e52f0000e62f0000e72f0000e82f0000e92f0000ea2f0000eb2f0000ec2f0000ed2f0000ee2f0000ef2f0000f02f0000f12f0000f22f0000f32f0000f42f0000f52f0000f62f0000f72f0000f82f0000f92f0000fa2f0000fb2f0000fc2f0000fd2f0000fe2f0000ff2f0000003000000130000002300000033000000430000005300000063000000730000008300000093000000a3000000b3000000c3000000d3000000e3000000f300000103000001130000012300000133000001430000015300000163000001730000018300000193000001a3000001b3000001c3000001d3000001e3000001f300000 - m_AlignBytes: 16 - groupID: 110 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 12208 - particle2: 12209 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 12209 - particle2: 12210 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 12210 - particle2: 12211 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 12211 - particle2: 12212 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 12212 - particle2: 12213 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 12213 - particle2: 12214 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 12214 - particle2: 12215 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 12215 - particle2: 12216 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 12216 - particle2: 12217 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 12217 - particle2: 12218 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 12218 - particle2: 12219 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1117186088 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1117186089} - - component: {fileID: 1117186093} - - component: {fileID: 1117186092} - - component: {fileID: 1117186091} - - component: {fileID: 1117186090} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1117186089 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1117186088} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1464717035} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1117186090 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1117186088} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1117186093} - m_Target: {fileID: 1117186089} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1117186091 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1117186088} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1117186092 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1117186088} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 110 ---- !u!114 &1117186093 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1117186088} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 203000002130000022300000233000002430000025300000263000002730000028300000293000002a3000002b3000002c3000002d3000002e3000002f300000303000003130000032300000333000003430000035300000363000003730000038300000393000003a3000003b3000003c3000003d3000003e3000003f300000403000004130000042300000433000004430000045300000463000004730000048300000493000004a3000004b3000004c3000004d3000004e3000004f300000503000005130000052300000533000005430000055300000563000005730000058300000593000005a3000005b3000005c3000005d3000005e3000005f300000603000006130000062300000633000006430000065300000663000006730000068300000693000006a3000006b3000006c3000006d3000006e3000006f300000703000007130000072300000733000007430000075300000763000007730000078300000793000007a3000007b3000007c3000007d3000007e3000007f300000803000008130000082300000833000008430000085300000863000008730000088300000893000008a3000008b3000008c3000008d3000008e3000008f300000 - m_AlignBytes: 16 - groupID: 111 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 12320 - particle2: 12321 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 12321 - particle2: 12322 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 12322 - particle2: 12323 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 12323 - particle2: 12324 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 12324 - particle2: 12325 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 12325 - particle2: 12326 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 12326 - particle2: 12327 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 12327 - particle2: 12328 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 12328 - particle2: 12329 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 12329 - particle2: 12330 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 12330 - particle2: 12331 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1121401525 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1121401526} - - component: {fileID: 1121401530} - - component: {fileID: 1121401529} - - component: {fileID: 1121401528} - - component: {fileID: 1121401527} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1121401526 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1121401525} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1062536481} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1121401527 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1121401525} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1121401530} - m_Target: {fileID: 1121401526} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1121401528 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1121401525} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1121401529 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1121401525} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 111 ---- !u!114 &1121401530 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1121401525} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 903000009130000092300000933000009430000095300000963000009730000098300000993000009a3000009b3000009c3000009d3000009e3000009f300000a0300000a1300000a2300000a3300000a4300000a5300000a6300000a7300000a8300000a9300000aa300000ab300000ac300000ad300000ae300000af300000b0300000b1300000b2300000b3300000b4300000b5300000b6300000b7300000b8300000b9300000ba300000bb300000bc300000bd300000be300000bf300000c0300000c1300000c2300000c3300000c4300000c5300000c6300000c7300000c8300000c9300000ca300000cb300000cc300000cd300000ce300000cf300000d0300000d1300000d2300000d3300000d4300000d5300000d6300000d7300000d8300000d9300000da300000db300000dc300000dd300000de300000df300000e0300000e1300000e2300000e3300000e4300000e5300000e6300000e7300000e8300000e9300000ea300000eb300000ec300000ed300000ee300000ef300000f0300000f1300000f2300000f3300000f4300000f5300000f6300000f7300000f8300000f9300000fa300000fb300000fc300000fd300000fe300000ff300000 - m_AlignBytes: 16 - groupID: 112 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 12432 - particle2: 12433 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 12433 - particle2: 12434 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 12434 - particle2: 12435 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 12435 - particle2: 12436 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 12436 - particle2: 12437 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 12437 - particle2: 12438 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 12438 - particle2: 12439 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 12439 - particle2: 12440 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 12440 - particle2: 12441 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 12441 - particle2: 12442 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 12442 - particle2: 12443 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1143427709 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1143427710} - - component: {fileID: 1143427714} - - component: {fileID: 1143427713} - - component: {fileID: 1143427712} - - component: {fileID: 1143427711} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1143427710 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1143427709} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 54623967} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1143427711 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1143427709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1143427714} - m_Target: {fileID: 1143427710} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1143427712 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1143427709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1143427713 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1143427709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 112 ---- !u!114 &1143427714 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1143427709} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 003100000131000002310000033100000431000005310000063100000731000008310000093100000a3100000b3100000c3100000d3100000e3100000f310000103100001131000012310000133100001431000015310000163100001731000018310000193100001a3100001b3100001c3100001d3100001e3100001f310000203100002131000022310000233100002431000025310000263100002731000028310000293100002a3100002b3100002c3100002d3100002e3100002f310000303100003131000032310000333100003431000035310000363100003731000038310000393100003a3100003b3100003c3100003d3100003e3100003f310000403100004131000042310000433100004431000045310000463100004731000048310000493100004a3100004b3100004c3100004d3100004e3100004f310000503100005131000052310000533100005431000055310000563100005731000058310000593100005a3100005b3100005c3100005d3100005e3100005f310000603100006131000062310000633100006431000065310000663100006731000068310000693100006a3100006b3100006c3100006d3100006e3100006f310000 - m_AlignBytes: 16 - groupID: 113 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 12544 - particle2: 12545 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 12545 - particle2: 12546 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 12546 - particle2: 12547 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 12547 - particle2: 12548 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 12548 - particle2: 12549 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 12549 - particle2: 12550 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 12550 - particle2: 12551 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 12551 - particle2: 12552 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 12552 - particle2: 12553 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 12553 - particle2: 12554 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 12554 - particle2: 12555 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1143771885 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1143771886} - - component: {fileID: 1143771890} - - component: {fileID: 1143771889} - - component: {fileID: 1143771888} - - component: {fileID: 1143771887} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1143771886 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1143771885} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 510728467} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1143771887 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1143771885} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1143771890} - m_Target: {fileID: 1143771886} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1143771888 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1143771885} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1143771889 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1143771885} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 113 ---- !u!114 &1143771890 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1143771885} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 703100007131000072310000733100007431000075310000763100007731000078310000793100007a3100007b3100007c3100007d3100007e3100007f310000803100008131000082310000833100008431000085310000863100008731000088310000893100008a3100008b3100008c3100008d3100008e3100008f310000903100009131000092310000933100009431000095310000963100009731000098310000993100009a3100009b3100009c3100009d3100009e3100009f310000a0310000a1310000a2310000a3310000a4310000a5310000a6310000a7310000a8310000a9310000aa310000ab310000ac310000ad310000ae310000af310000b0310000b1310000b2310000b3310000b4310000b5310000b6310000b7310000b8310000b9310000ba310000bb310000bc310000bd310000be310000bf310000c0310000c1310000c2310000c3310000c4310000c5310000c6310000c7310000c8310000c9310000ca310000cb310000cc310000cd310000ce310000cf310000d0310000d1310000d2310000d3310000d4310000d5310000d6310000d7310000d8310000d9310000da310000db310000dc310000dd310000de310000df310000 - m_AlignBytes: 16 - groupID: 114 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 12656 - particle2: 12657 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 12657 - particle2: 12658 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 12658 - particle2: 12659 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 12659 - particle2: 12660 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 12660 - particle2: 12661 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 12661 - particle2: 12662 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 12662 - particle2: 12663 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 12663 - particle2: 12664 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 12664 - particle2: 12665 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 12665 - particle2: 12666 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 12666 - particle2: 12667 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1152767234 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1152767235} - - component: {fileID: 1152767239} - - component: {fileID: 1152767238} - - component: {fileID: 1152767237} - - component: {fileID: 1152767236} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1152767235 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1152767234} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 940408952} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1152767236 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1152767234} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1152767239} - m_Target: {fileID: 1152767235} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1152767237 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1152767234} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1152767238 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1152767234} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 114 ---- !u!114 &1152767239 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1152767234} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: e0310000e1310000e2310000e3310000e4310000e5310000e6310000e7310000e8310000e9310000ea310000eb310000ec310000ed310000ee310000ef310000f0310000f1310000f2310000f3310000f4310000f5310000f6310000f7310000f8310000f9310000fa310000fb310000fc310000fd310000fe310000ff310000003200000132000002320000033200000432000005320000063200000732000008320000093200000a3200000b3200000c3200000d3200000e3200000f320000103200001132000012320000133200001432000015320000163200001732000018320000193200001a3200001b3200001c3200001d3200001e3200001f320000203200002132000022320000233200002432000025320000263200002732000028320000293200002a3200002b3200002c3200002d3200002e3200002f320000303200003132000032320000333200003432000035320000363200003732000038320000393200003a3200003b3200003c3200003d3200003e3200003f320000403200004132000042320000433200004432000045320000463200004732000048320000493200004a3200004b3200004c3200004d3200004e3200004f320000 - m_AlignBytes: 16 - groupID: 115 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 12768 - particle2: 12769 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 12769 - particle2: 12770 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 12770 - particle2: 12771 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 12771 - particle2: 12772 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 12772 - particle2: 12773 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 12773 - particle2: 12774 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 12774 - particle2: 12775 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 12775 - particle2: 12776 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 12776 - particle2: 12777 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 12777 - particle2: 12778 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 12778 - particle2: 12779 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1153529339 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1153529340} - - component: {fileID: 1153529344} - - component: {fileID: 1153529343} - - component: {fileID: 1153529342} - - component: {fileID: 1153529341} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1153529340 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1153529339} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 249029318} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1153529341 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1153529339} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1153529344} - m_Target: {fileID: 1153529340} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1153529342 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1153529339} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1153529343 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1153529339} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 115 ---- !u!114 &1153529344 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1153529339} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 503200005132000052320000533200005432000055320000563200005732000058320000593200005a3200005b3200005c3200005d3200005e3200005f320000603200006132000062320000633200006432000065320000663200006732000068320000693200006a3200006b3200006c3200006d3200006e3200006f320000703200007132000072320000733200007432000075320000763200007732000078320000793200007a3200007b3200007c3200007d3200007e3200007f320000803200008132000082320000833200008432000085320000863200008732000088320000893200008a3200008b3200008c3200008d3200008e3200008f320000903200009132000092320000933200009432000095320000963200009732000098320000993200009a3200009b3200009c3200009d3200009e3200009f320000a0320000a1320000a2320000a3320000a4320000a5320000a6320000a7320000a8320000a9320000aa320000ab320000ac320000ad320000ae320000af320000b0320000b1320000b2320000b3320000b4320000b5320000b6320000b7320000b8320000b9320000ba320000bb320000bc320000bd320000be320000bf320000 - m_AlignBytes: 16 - groupID: 116 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 12880 - particle2: 12881 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 12881 - particle2: 12882 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 12882 - particle2: 12883 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 12883 - particle2: 12884 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 12884 - particle2: 12885 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 12885 - particle2: 12886 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 12886 - particle2: 12887 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 12887 - particle2: 12888 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 12888 - particle2: 12889 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 12889 - particle2: 12890 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 12890 - particle2: 12891 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1175446144 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1175446146} - - component: {fileID: 1175446145} - - component: {fileID: 1175446147} - m_Layer: 0 - m_Name: Directional Light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!108 &1175446145 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1175446144} - m_Enabled: 1 - serializedVersion: 11 - m_Type: 1 - m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.802082 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.03 - m_NormalBias: 0.01 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingLayerMask: 1 - m_Lightmapping: 4 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ForceVisible: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 - m_LightUnit: 1 - m_LuxAtDistance: 1 - m_EnableSpotReflector: 1 ---- !u!4 &1175446146 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1175446144} - serializedVersion: 2 - m_LocalRotation: {x: 0.41595167, y: -0.26247028, z: 0.26683384, w: 0.82879025} - m_LocalPosition: {x: 0, y: 3, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 56.052002, y: -22.431002, z: 23.642} ---- !u!114 &1175446147 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1175446144} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData - m_UsePipelineSettings: 1 - m_AdditionalLightsShadowResolutionTier: 2 - m_CustomShadowLayers: 0 - m_LightCookieSize: {x: 1, y: 1} - m_LightCookieOffset: {x: 0, y: 0} - m_SoftShadowQuality: 0 - m_RenderingLayersMask: - serializedVersion: 0 - m_Bits: 1 - m_ShadowRenderingLayersMask: - serializedVersion: 0 - m_Bits: 1 - m_Version: 4 - m_LightLayerMask: 1 - m_ShadowLayerMask: 1 - m_RenderingLayers: 1 - m_ShadowRenderingLayers: 1 ---- !u!1 &1189976173 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1189976174} - - component: {fileID: 1189976178} - - component: {fileID: 1189976177} - - component: {fileID: 1189976176} - - component: {fileID: 1189976175} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1189976174 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1189976173} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1977632070} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1189976175 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1189976173} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1189976178} - m_Target: {fileID: 1189976174} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1189976176 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1189976173} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1189976177 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1189976173} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 116 ---- !u!114 &1189976178 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1189976173} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: c0320000c1320000c2320000c3320000c4320000c5320000c6320000c7320000c8320000c9320000ca320000cb320000cc320000cd320000ce320000cf320000d0320000d1320000d2320000d3320000d4320000d5320000d6320000d7320000d8320000d9320000da320000db320000dc320000dd320000de320000df320000e0320000e1320000e2320000e3320000e4320000e5320000e6320000e7320000e8320000e9320000ea320000eb320000ec320000ed320000ee320000ef320000f0320000f1320000f2320000f3320000f4320000f5320000f6320000f7320000f8320000f9320000fa320000fb320000fc320000fd320000fe320000ff320000003300000133000002330000033300000433000005330000063300000733000008330000093300000a3300000b3300000c3300000d3300000e3300000f330000103300001133000012330000133300001433000015330000163300001733000018330000193300001a3300001b3300001c3300001d3300001e3300001f330000203300002133000022330000233300002433000025330000263300002733000028330000293300002a3300002b3300002c3300002d3300002e3300002f330000 - m_AlignBytes: 16 - groupID: 117 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 12992 - particle2: 12993 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 12993 - particle2: 12994 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 12994 - particle2: 12995 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 12995 - particle2: 12996 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 12996 - particle2: 12997 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 12997 - particle2: 12998 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 12998 - particle2: 12999 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 12999 - particle2: 13000 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 13000 - particle2: 13001 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 13001 - particle2: 13002 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 13002 - particle2: 13003 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1228595149 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1228595150} - - component: {fileID: 1228595154} - - component: {fileID: 1228595153} - - component: {fileID: 1228595152} - - component: {fileID: 1228595151} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1228595150 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1228595149} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1306593279} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1228595151 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1228595149} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1228595154} - m_Target: {fileID: 1228595150} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1228595152 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1228595149} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1228595153 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1228595149} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 117 ---- !u!114 &1228595154 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1228595149} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 303300003133000032330000333300003433000035330000363300003733000038330000393300003a3300003b3300003c3300003d3300003e3300003f330000403300004133000042330000433300004433000045330000463300004733000048330000493300004a3300004b3300004c3300004d3300004e3300004f330000503300005133000052330000533300005433000055330000563300005733000058330000593300005a3300005b3300005c3300005d3300005e3300005f330000603300006133000062330000633300006433000065330000663300006733000068330000693300006a3300006b3300006c3300006d3300006e3300006f330000703300007133000072330000733300007433000075330000763300007733000078330000793300007a3300007b3300007c3300007d3300007e3300007f330000803300008133000082330000833300008433000085330000863300008733000088330000893300008a3300008b3300008c3300008d3300008e3300008f330000903300009133000092330000933300009433000095330000963300009733000098330000993300009a3300009b3300009c3300009d3300009e3300009f330000 - m_AlignBytes: 16 - groupID: 118 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 13104 - particle2: 13105 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 13105 - particle2: 13106 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 13106 - particle2: 13107 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 13107 - particle2: 13108 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 13108 - particle2: 13109 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 13109 - particle2: 13110 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 13110 - particle2: 13111 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 13111 - particle2: 13112 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 13112 - particle2: 13113 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 13113 - particle2: 13114 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 13114 - particle2: 13115 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1237247125 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1237247126} - - component: {fileID: 1237247130} - - component: {fileID: 1237247129} - - component: {fileID: 1237247128} - - component: {fileID: 1237247127} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1237247126 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1237247125} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1241971666} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1237247127 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1237247125} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1237247130} - m_Target: {fileID: 1237247126} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1237247128 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1237247125} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1237247129 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1237247125} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 118 ---- !u!114 &1237247130 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1237247125} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: a0330000a1330000a2330000a3330000a4330000a5330000a6330000a7330000a8330000a9330000aa330000ab330000ac330000ad330000ae330000af330000b0330000b1330000b2330000b3330000b4330000b5330000b6330000b7330000b8330000b9330000ba330000bb330000bc330000bd330000be330000bf330000c0330000c1330000c2330000c3330000c4330000c5330000c6330000c7330000c8330000c9330000ca330000cb330000cc330000cd330000ce330000cf330000d0330000d1330000d2330000d3330000d4330000d5330000d6330000d7330000d8330000d9330000da330000db330000dc330000dd330000de330000df330000e0330000e1330000e2330000e3330000e4330000e5330000e6330000e7330000e8330000e9330000ea330000eb330000ec330000ed330000ee330000ef330000f0330000f1330000f2330000f3330000f4330000f5330000f6330000f7330000f8330000f9330000fa330000fb330000fc330000fd330000fe330000ff330000003400000134000002340000033400000434000005340000063400000734000008340000093400000a3400000b3400000c3400000d3400000e3400000f340000 - m_AlignBytes: 16 - groupID: 119 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 13216 - particle2: 13217 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 13217 - particle2: 13218 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 13218 - particle2: 13219 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 13219 - particle2: 13220 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 13220 - particle2: 13221 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 13221 - particle2: 13222 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 13222 - particle2: 13223 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 13223 - particle2: 13224 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 13224 - particle2: 13225 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 13225 - particle2: 13226 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 13226 - particle2: 13227 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1240601734 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1240601735} - m_Layer: 0 - m_Name: Row (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1240601735 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1240601734} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -1.2} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 941225759} - - {fileID: 1551337444} - - {fileID: 503533459} - - {fileID: 531482358} - - {fileID: 1937961235} - - {fileID: 39329229} - - {fileID: 356687288} - - {fileID: 1288966894} - - {fileID: 1595267027} - - {fileID: 746024797} - m_Father: {fileID: 1027659676} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1241971665 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1241971666} - m_Layer: 0 - m_Name: Row (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1241971666 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1241971665} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -1.8} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 949981033} - - {fileID: 1268175475} - - {fileID: 1237247126} - - {fileID: 640325667} - - {fileID: 386703047} - - {fileID: 600063430} - - {fileID: 1336151026} - - {fileID: 1812706183} - - {fileID: 983686049} - - {fileID: 1901308916} - m_Father: {fileID: 1027659676} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1268175474 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1268175475} - - component: {fileID: 1268175479} - - component: {fileID: 1268175478} - - component: {fileID: 1268175477} - - component: {fileID: 1268175476} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1268175475 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1268175474} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1241971666} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1268175476 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1268175474} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1268175479} - m_Target: {fileID: 1268175475} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1268175477 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1268175474} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1268175478 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1268175474} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 119 ---- !u!114 &1268175479 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1268175474} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 103400001134000012340000133400001434000015340000163400001734000018340000193400001a3400001b3400001c3400001d3400001e3400001f340000203400002134000022340000233400002434000025340000263400002734000028340000293400002a3400002b3400002c3400002d3400002e3400002f340000303400003134000032340000333400003434000035340000363400003734000038340000393400003a3400003b3400003c3400003d3400003e3400003f340000403400004134000042340000433400004434000045340000463400004734000048340000493400004a3400004b3400004c3400004d3400004e3400004f340000503400005134000052340000533400005434000055340000563400005734000058340000593400005a3400005b3400005c3400005d3400005e3400005f340000603400006134000062340000633400006434000065340000663400006734000068340000693400006a3400006b3400006c3400006d3400006e3400006f340000703400007134000072340000733400007434000075340000763400007734000078340000793400007a3400007b3400007c3400007d3400007e3400007f340000 - m_AlignBytes: 16 - groupID: 120 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 13328 - particle2: 13329 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 13329 - particle2: 13330 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 13330 - particle2: 13331 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 13331 - particle2: 13332 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 13332 - particle2: 13333 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 13333 - particle2: 13334 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 13334 - particle2: 13335 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 13335 - particle2: 13336 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 13336 - particle2: 13337 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 13337 - particle2: 13338 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 13338 - particle2: 13339 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1288966893 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1288966894} - - component: {fileID: 1288966898} - - component: {fileID: 1288966897} - - component: {fileID: 1288966896} - - component: {fileID: 1288966895} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1288966894 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1288966893} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1240601735} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1288966895 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1288966893} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1288966898} - m_Target: {fileID: 1288966894} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1288966896 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1288966893} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1288966897 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1288966893} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 120 ---- !u!114 &1288966898 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1288966893} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 803400008134000082340000833400008434000085340000863400008734000088340000893400008a3400008b3400008c3400008d3400008e3400008f340000903400009134000092340000933400009434000095340000963400009734000098340000993400009a3400009b3400009c3400009d3400009e3400009f340000a0340000a1340000a2340000a3340000a4340000a5340000a6340000a7340000a8340000a9340000aa340000ab340000ac340000ad340000ae340000af340000b0340000b1340000b2340000b3340000b4340000b5340000b6340000b7340000b8340000b9340000ba340000bb340000bc340000bd340000be340000bf340000c0340000c1340000c2340000c3340000c4340000c5340000c6340000c7340000c8340000c9340000ca340000cb340000cc340000cd340000ce340000cf340000d0340000d1340000d2340000d3340000d4340000d5340000d6340000d7340000d8340000d9340000da340000db340000dc340000dd340000de340000df340000e0340000e1340000e2340000e3340000e4340000e5340000e6340000e7340000e8340000e9340000ea340000eb340000ec340000ed340000ee340000ef340000 - m_AlignBytes: 16 - groupID: 121 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 13440 - particle2: 13441 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 13441 - particle2: 13442 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 13442 - particle2: 13443 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 13443 - particle2: 13444 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 13444 - particle2: 13445 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 13445 - particle2: 13446 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 13446 - particle2: 13447 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 13447 - particle2: 13448 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 13448 - particle2: 13449 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 13449 - particle2: 13450 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 13450 - particle2: 13451 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1297311440 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1297311441} - - component: {fileID: 1297311445} - - component: {fileID: 1297311444} - - component: {fileID: 1297311443} - - component: {fileID: 1297311442} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1297311441 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1297311440} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1640435994} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1297311442 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1297311440} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1297311445} - m_Target: {fileID: 1297311441} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1297311443 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1297311440} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1297311444 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1297311440} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 121 ---- !u!114 &1297311445 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1297311440} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: f0340000f1340000f2340000f3340000f4340000f5340000f6340000f7340000f8340000f9340000fa340000fb340000fc340000fd340000fe340000ff340000003500000135000002350000033500000435000005350000063500000735000008350000093500000a3500000b3500000c3500000d3500000e3500000f350000103500001135000012350000133500001435000015350000163500001735000018350000193500001a3500001b3500001c3500001d3500001e3500001f350000203500002135000022350000233500002435000025350000263500002735000028350000293500002a3500002b3500002c3500002d3500002e3500002f350000303500003135000032350000333500003435000035350000363500003735000038350000393500003a3500003b3500003c3500003d3500003e3500003f350000403500004135000042350000433500004435000045350000463500004735000048350000493500004a3500004b3500004c3500004d3500004e3500004f350000503500005135000052350000533500005435000055350000563500005735000058350000593500005a3500005b3500005c3500005d3500005e3500005f350000 - m_AlignBytes: 16 - groupID: 122 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 13552 - particle2: 13553 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 13553 - particle2: 13554 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 13554 - particle2: 13555 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 13555 - particle2: 13556 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 13556 - particle2: 13557 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 13557 - particle2: 13558 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 13558 - particle2: 13559 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 13559 - particle2: 13560 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 13560 - particle2: 13561 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 13561 - particle2: 13562 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 13562 - particle2: 13563 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1299859296 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1299859297} - - component: {fileID: 1299859301} - - component: {fileID: 1299859300} - - component: {fileID: 1299859299} - - component: {fileID: 1299859298} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1299859297 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1299859296} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 893001395} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1299859298 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1299859296} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1299859301} - m_Target: {fileID: 1299859297} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1299859299 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1299859296} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1299859300 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1299859296} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 122 ---- !u!114 &1299859301 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1299859296} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 603500006135000062350000633500006435000065350000663500006735000068350000693500006a3500006b3500006c3500006d3500006e3500006f350000703500007135000072350000733500007435000075350000763500007735000078350000793500007a3500007b3500007c3500007d3500007e3500007f350000803500008135000082350000833500008435000085350000863500008735000088350000893500008a3500008b3500008c3500008d3500008e3500008f350000903500009135000092350000933500009435000095350000963500009735000098350000993500009a3500009b3500009c3500009d3500009e3500009f350000a0350000a1350000a2350000a3350000a4350000a5350000a6350000a7350000a8350000a9350000aa350000ab350000ac350000ad350000ae350000af350000b0350000b1350000b2350000b3350000b4350000b5350000b6350000b7350000b8350000b9350000ba350000bb350000bc350000bd350000be350000bf350000c0350000c1350000c2350000c3350000c4350000c5350000c6350000c7350000c8350000c9350000ca350000cb350000cc350000cd350000ce350000cf350000 - m_AlignBytes: 16 - groupID: 123 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 13664 - particle2: 13665 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 13665 - particle2: 13666 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 13666 - particle2: 13667 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 13667 - particle2: 13668 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 13668 - particle2: 13669 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 13669 - particle2: 13670 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 13670 - particle2: 13671 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 13671 - particle2: 13672 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 13672 - particle2: 13673 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 13673 - particle2: 13674 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 13674 - particle2: 13675 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1300868597 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1300868598} - - component: {fileID: 1300868602} - - component: {fileID: 1300868601} - - component: {fileID: 1300868600} - - component: {fileID: 1300868599} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1300868598 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1300868597} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 779073863} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1300868599 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1300868597} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1300868602} - m_Target: {fileID: 1300868598} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1300868600 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1300868597} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1300868601 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1300868597} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 123 ---- !u!114 &1300868602 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1300868597} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: d0350000d1350000d2350000d3350000d4350000d5350000d6350000d7350000d8350000d9350000da350000db350000dc350000dd350000de350000df350000e0350000e1350000e2350000e3350000e4350000e5350000e6350000e7350000e8350000e9350000ea350000eb350000ec350000ed350000ee350000ef350000f0350000f1350000f2350000f3350000f4350000f5350000f6350000f7350000f8350000f9350000fa350000fb350000fc350000fd350000fe350000ff350000003600000136000002360000033600000436000005360000063600000736000008360000093600000a3600000b3600000c3600000d3600000e3600000f360000103600001136000012360000133600001436000015360000163600001736000018360000193600001a3600001b3600001c3600001d3600001e3600001f360000203600002136000022360000233600002436000025360000263600002736000028360000293600002a3600002b3600002c3600002d3600002e3600002f360000303600003136000032360000333600003436000035360000363600003736000038360000393600003a3600003b3600003c3600003d3600003e3600003f360000 - m_AlignBytes: 16 - groupID: 124 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 13776 - particle2: 13777 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 13777 - particle2: 13778 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 13778 - particle2: 13779 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 13779 - particle2: 13780 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 13780 - particle2: 13781 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 13781 - particle2: 13782 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 13782 - particle2: 13783 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 13783 - particle2: 13784 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 13784 - particle2: 13785 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 13785 - particle2: 13786 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 13786 - particle2: 13787 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1304270658 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1304270659} - - component: {fileID: 1304270663} - - component: {fileID: 1304270662} - - component: {fileID: 1304270661} - - component: {fileID: 1304270660} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1304270659 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1304270658} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 940408952} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1304270660 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1304270658} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1304270663} - m_Target: {fileID: 1304270659} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1304270661 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1304270658} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1304270662 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1304270658} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 124 ---- !u!114 &1304270663 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1304270658} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 403600004136000042360000433600004436000045360000463600004736000048360000493600004a3600004b3600004c3600004d3600004e3600004f360000503600005136000052360000533600005436000055360000563600005736000058360000593600005a3600005b3600005c3600005d3600005e3600005f360000603600006136000062360000633600006436000065360000663600006736000068360000693600006a3600006b3600006c3600006d3600006e3600006f360000703600007136000072360000733600007436000075360000763600007736000078360000793600007a3600007b3600007c3600007d3600007e3600007f360000803600008136000082360000833600008436000085360000863600008736000088360000893600008a3600008b3600008c3600008d3600008e3600008f360000903600009136000092360000933600009436000095360000963600009736000098360000993600009a3600009b3600009c3600009d3600009e3600009f360000a0360000a1360000a2360000a3360000a4360000a5360000a6360000a7360000a8360000a9360000aa360000ab360000ac360000ad360000ae360000af360000 - m_AlignBytes: 16 - groupID: 125 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 13888 - particle2: 13889 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 13889 - particle2: 13890 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 13890 - particle2: 13891 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 13891 - particle2: 13892 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 13892 - particle2: 13893 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 13893 - particle2: 13894 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 13894 - particle2: 13895 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 13895 - particle2: 13896 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 13896 - particle2: 13897 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 13897 - particle2: 13898 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 13898 - particle2: 13899 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1306593278 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1306593279} - m_Layer: 0 - m_Name: Row (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1306593279 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1306593278} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -0.4} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1758285766} - - {fileID: 888913399} - - {fileID: 474752659} - - {fileID: 1886039167} - - {fileID: 547327667} - - {fileID: 170149755} - - {fileID: 360658608} - - {fileID: 733963101} - - {fileID: 1964761414} - - {fileID: 1228595150} - m_Father: {fileID: 1027659676} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1332770745 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1332770746} - - component: {fileID: 1332770750} - - component: {fileID: 1332770749} - - component: {fileID: 1332770748} - - component: {fileID: 1332770747} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1332770746 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1332770745} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1628171963} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1332770747 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1332770745} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1332770750} - m_Target: {fileID: 1332770746} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1332770748 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1332770745} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1332770749 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1332770745} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 125 ---- !u!114 &1332770750 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1332770745} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: b0360000b1360000b2360000b3360000b4360000b5360000b6360000b7360000b8360000b9360000ba360000bb360000bc360000bd360000be360000bf360000c0360000c1360000c2360000c3360000c4360000c5360000c6360000c7360000c8360000c9360000ca360000cb360000cc360000cd360000ce360000cf360000d0360000d1360000d2360000d3360000d4360000d5360000d6360000d7360000d8360000d9360000da360000db360000dc360000dd360000de360000df360000e0360000e1360000e2360000e3360000e4360000e5360000e6360000e7360000e8360000e9360000ea360000eb360000ec360000ed360000ee360000ef360000f0360000f1360000f2360000f3360000f4360000f5360000f6360000f7360000f8360000f9360000fa360000fb360000fc360000fd360000fe360000ff360000003700000137000002370000033700000437000005370000063700000737000008370000093700000a3700000b3700000c3700000d3700000e3700000f370000103700001137000012370000133700001437000015370000163700001737000018370000193700001a3700001b3700001c3700001d3700001e3700001f370000 - m_AlignBytes: 16 - groupID: 126 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 14000 - particle2: 14001 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 14001 - particle2: 14002 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 14002 - particle2: 14003 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 14003 - particle2: 14004 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 14004 - particle2: 14005 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 14005 - particle2: 14006 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 14006 - particle2: 14007 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 14007 - particle2: 14008 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 14008 - particle2: 14009 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 14009 - particle2: 14010 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 14010 - particle2: 14011 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1333859661 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1333859662} - - component: {fileID: 1333859666} - - component: {fileID: 1333859665} - - component: {fileID: 1333859664} - - component: {fileID: 1333859663} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1333859662 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1333859661} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 940408952} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1333859663 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1333859661} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1333859666} - m_Target: {fileID: 1333859662} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1333859664 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1333859661} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1333859665 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1333859661} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 126 ---- !u!114 &1333859666 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1333859661} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 203700002137000022370000233700002437000025370000263700002737000028370000293700002a3700002b3700002c3700002d3700002e3700002f370000303700003137000032370000333700003437000035370000363700003737000038370000393700003a3700003b3700003c3700003d3700003e3700003f370000403700004137000042370000433700004437000045370000463700004737000048370000493700004a3700004b3700004c3700004d3700004e3700004f370000503700005137000052370000533700005437000055370000563700005737000058370000593700005a3700005b3700005c3700005d3700005e3700005f370000603700006137000062370000633700006437000065370000663700006737000068370000693700006a3700006b3700006c3700006d3700006e3700006f370000703700007137000072370000733700007437000075370000763700007737000078370000793700007a3700007b3700007c3700007d3700007e3700007f370000803700008137000082370000833700008437000085370000863700008737000088370000893700008a3700008b3700008c3700008d3700008e3700008f370000 - m_AlignBytes: 16 - groupID: 127 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 14112 - particle2: 14113 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 14113 - particle2: 14114 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 14114 - particle2: 14115 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 14115 - particle2: 14116 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 14116 - particle2: 14117 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 14117 - particle2: 14118 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 14118 - particle2: 14119 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 14119 - particle2: 14120 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 14120 - particle2: 14121 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 14121 - particle2: 14122 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 14122 - particle2: 14123 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1336151025 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1336151026} - - component: {fileID: 1336151030} - - component: {fileID: 1336151029} - - component: {fileID: 1336151028} - - component: {fileID: 1336151027} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1336151026 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1336151025} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1241971666} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1336151027 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1336151025} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1336151030} - m_Target: {fileID: 1336151026} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1336151028 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1336151025} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1336151029 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1336151025} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 127 ---- !u!114 &1336151030 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1336151025} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 903700009137000092370000933700009437000095370000963700009737000098370000993700009a3700009b3700009c3700009d3700009e3700009f370000a0370000a1370000a2370000a3370000a4370000a5370000a6370000a7370000a8370000a9370000aa370000ab370000ac370000ad370000ae370000af370000b0370000b1370000b2370000b3370000b4370000b5370000b6370000b7370000b8370000b9370000ba370000bb370000bc370000bd370000be370000bf370000c0370000c1370000c2370000c3370000c4370000c5370000c6370000c7370000c8370000c9370000ca370000cb370000cc370000cd370000ce370000cf370000d0370000d1370000d2370000d3370000d4370000d5370000d6370000d7370000d8370000d9370000da370000db370000dc370000dd370000de370000df370000e0370000e1370000e2370000e3370000e4370000e5370000e6370000e7370000e8370000e9370000ea370000eb370000ec370000ed370000ee370000ef370000f0370000f1370000f2370000f3370000f4370000f5370000f6370000f7370000f8370000f9370000fa370000fb370000fc370000fd370000fe370000ff370000 - m_AlignBytes: 16 - groupID: 128 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 14224 - particle2: 14225 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 14225 - particle2: 14226 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 14226 - particle2: 14227 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 14227 - particle2: 14228 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 14228 - particle2: 14229 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 14229 - particle2: 14230 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 14230 - particle2: 14231 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 14231 - particle2: 14232 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 14232 - particle2: 14233 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 14233 - particle2: 14234 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 14234 - particle2: 14235 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1374969020 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1374969021} - - component: {fileID: 1374969025} - - component: {fileID: 1374969024} - - component: {fileID: 1374969023} - - component: {fileID: 1374969022} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1374969021 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1374969020} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1640435994} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1374969022 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1374969020} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1374969025} - m_Target: {fileID: 1374969021} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1374969023 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1374969020} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1374969024 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1374969020} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 128 ---- !u!114 &1374969025 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1374969020} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 003800000138000002380000033800000438000005380000063800000738000008380000093800000a3800000b3800000c3800000d3800000e3800000f380000103800001138000012380000133800001438000015380000163800001738000018380000193800001a3800001b3800001c3800001d3800001e3800001f380000203800002138000022380000233800002438000025380000263800002738000028380000293800002a3800002b3800002c3800002d3800002e3800002f380000303800003138000032380000333800003438000035380000363800003738000038380000393800003a3800003b3800003c3800003d3800003e3800003f380000403800004138000042380000433800004438000045380000463800004738000048380000493800004a3800004b3800004c3800004d3800004e3800004f380000503800005138000052380000533800005438000055380000563800005738000058380000593800005a3800005b3800005c3800005d3800005e3800005f380000603800006138000062380000633800006438000065380000663800006738000068380000693800006a3800006b3800006c3800006d3800006e3800006f380000 - m_AlignBytes: 16 - groupID: 129 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 14336 - particle2: 14337 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 14337 - particle2: 14338 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 14338 - particle2: 14339 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 14339 - particle2: 14340 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 14340 - particle2: 14341 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 14341 - particle2: 14342 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 14342 - particle2: 14343 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 14343 - particle2: 14344 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 14344 - particle2: 14345 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 14345 - particle2: 14346 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 14346 - particle2: 14347 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1375015037 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1375015038} - - component: {fileID: 1375015042} - - component: {fileID: 1375015041} - - component: {fileID: 1375015040} - - component: {fileID: 1375015039} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1375015038 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1375015037} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 779073863} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1375015039 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1375015037} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1375015042} - m_Target: {fileID: 1375015038} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1375015040 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1375015037} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1375015041 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1375015037} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 129 ---- !u!114 &1375015042 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1375015037} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 703800007138000072380000733800007438000075380000763800007738000078380000793800007a3800007b3800007c3800007d3800007e3800007f380000803800008138000082380000833800008438000085380000863800008738000088380000893800008a3800008b3800008c3800008d3800008e3800008f380000903800009138000092380000933800009438000095380000963800009738000098380000993800009a3800009b3800009c3800009d3800009e3800009f380000a0380000a1380000a2380000a3380000a4380000a5380000a6380000a7380000a8380000a9380000aa380000ab380000ac380000ad380000ae380000af380000b0380000b1380000b2380000b3380000b4380000b5380000b6380000b7380000b8380000b9380000ba380000bb380000bc380000bd380000be380000bf380000c0380000c1380000c2380000c3380000c4380000c5380000c6380000c7380000c8380000c9380000ca380000cb380000cc380000cd380000ce380000cf380000d0380000d1380000d2380000d3380000d4380000d5380000d6380000d7380000d8380000d9380000da380000db380000dc380000dd380000de380000df380000 - m_AlignBytes: 16 - groupID: 130 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 14448 - particle2: 14449 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 14449 - particle2: 14450 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 14450 - particle2: 14451 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 14451 - particle2: 14452 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 14452 - particle2: 14453 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 14453 - particle2: 14454 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 14454 - particle2: 14455 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 14455 - particle2: 14456 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 14456 - particle2: 14457 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 14457 - particle2: 14458 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 14458 - particle2: 14459 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1424048100 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1424048101} - - component: {fileID: 1424048105} - - component: {fileID: 1424048104} - - component: {fileID: 1424048103} - - component: {fileID: 1424048102} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1424048101 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1424048100} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 510728467} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1424048102 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1424048100} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1424048105} - m_Target: {fileID: 1424048101} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1424048103 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1424048100} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1424048104 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1424048100} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 130 ---- !u!114 &1424048105 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1424048100} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: e0380000e1380000e2380000e3380000e4380000e5380000e6380000e7380000e8380000e9380000ea380000eb380000ec380000ed380000ee380000ef380000f0380000f1380000f2380000f3380000f4380000f5380000f6380000f7380000f8380000f9380000fa380000fb380000fc380000fd380000fe380000ff380000003900000139000002390000033900000439000005390000063900000739000008390000093900000a3900000b3900000c3900000d3900000e3900000f390000103900001139000012390000133900001439000015390000163900001739000018390000193900001a3900001b3900001c3900001d3900001e3900001f390000203900002139000022390000233900002439000025390000263900002739000028390000293900002a3900002b3900002c3900002d3900002e3900002f390000303900003139000032390000333900003439000035390000363900003739000038390000393900003a3900003b3900003c3900003d3900003e3900003f390000403900004139000042390000433900004439000045390000463900004739000048390000493900004a3900004b3900004c3900004d3900004e3900004f390000 - m_AlignBytes: 16 - groupID: 131 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 14560 - particle2: 14561 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 14561 - particle2: 14562 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 14562 - particle2: 14563 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 14563 - particle2: 14564 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 14564 - particle2: 14565 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 14565 - particle2: 14566 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 14566 - particle2: 14567 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 14567 - particle2: 14568 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 14568 - particle2: 14569 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 14569 - particle2: 14570 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 14570 - particle2: 14571 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1431270382 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1431270383} - - component: {fileID: 1431270387} - - component: {fileID: 1431270386} - - component: {fileID: 1431270385} - - component: {fileID: 1431270384} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1431270383 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1431270382} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1464717035} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1431270384 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1431270382} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1431270387} - m_Target: {fileID: 1431270383} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1431270385 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1431270382} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1431270386 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1431270382} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 131 ---- !u!114 &1431270387 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1431270382} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 503900005139000052390000533900005439000055390000563900005739000058390000593900005a3900005b3900005c3900005d3900005e3900005f390000603900006139000062390000633900006439000065390000663900006739000068390000693900006a3900006b3900006c3900006d3900006e3900006f390000703900007139000072390000733900007439000075390000763900007739000078390000793900007a3900007b3900007c3900007d3900007e3900007f390000803900008139000082390000833900008439000085390000863900008739000088390000893900008a3900008b3900008c3900008d3900008e3900008f390000903900009139000092390000933900009439000095390000963900009739000098390000993900009a3900009b3900009c3900009d3900009e3900009f390000a0390000a1390000a2390000a3390000a4390000a5390000a6390000a7390000a8390000a9390000aa390000ab390000ac390000ad390000ae390000af390000b0390000b1390000b2390000b3390000b4390000b5390000b6390000b7390000b8390000b9390000ba390000bb390000bc390000bd390000be390000bf390000 - m_AlignBytes: 16 - groupID: 132 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 14672 - particle2: 14673 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 14673 - particle2: 14674 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 14674 - particle2: 14675 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 14675 - particle2: 14676 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 14676 - particle2: 14677 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 14677 - particle2: 14678 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 14678 - particle2: 14679 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 14679 - particle2: 14680 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 14680 - particle2: 14681 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 14681 - particle2: 14682 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 14682 - particle2: 14683 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1437781648 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1437781649} - - component: {fileID: 1437781653} - - component: {fileID: 1437781652} - - component: {fileID: 1437781651} - - component: {fileID: 1437781650} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1437781649 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1437781648} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2009678977} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1437781650 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1437781648} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1437781653} - m_Target: {fileID: 1437781649} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1437781651 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1437781648} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1437781652 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1437781648} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 132 ---- !u!114 &1437781653 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1437781648} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: c0390000c1390000c2390000c3390000c4390000c5390000c6390000c7390000c8390000c9390000ca390000cb390000cc390000cd390000ce390000cf390000d0390000d1390000d2390000d3390000d4390000d5390000d6390000d7390000d8390000d9390000da390000db390000dc390000dd390000de390000df390000e0390000e1390000e2390000e3390000e4390000e5390000e6390000e7390000e8390000e9390000ea390000eb390000ec390000ed390000ee390000ef390000f0390000f1390000f2390000f3390000f4390000f5390000f6390000f7390000f8390000f9390000fa390000fb390000fc390000fd390000fe390000ff390000003a0000013a0000023a0000033a0000043a0000053a0000063a0000073a0000083a0000093a00000a3a00000b3a00000c3a00000d3a00000e3a00000f3a0000103a0000113a0000123a0000133a0000143a0000153a0000163a0000173a0000183a0000193a00001a3a00001b3a00001c3a00001d3a00001e3a00001f3a0000203a0000213a0000223a0000233a0000243a0000253a0000263a0000273a0000283a0000293a00002a3a00002b3a00002c3a00002d3a00002e3a00002f3a0000 - m_AlignBytes: 16 - groupID: 133 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 14784 - particle2: 14785 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 14785 - particle2: 14786 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 14786 - particle2: 14787 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 14787 - particle2: 14788 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 14788 - particle2: 14789 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 14789 - particle2: 14790 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 14790 - particle2: 14791 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 14791 - particle2: 14792 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 14792 - particle2: 14793 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 14793 - particle2: 14794 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 14794 - particle2: 14795 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1438254938 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1438254939} - - component: {fileID: 1438254943} - - component: {fileID: 1438254942} - - component: {fileID: 1438254941} - - component: {fileID: 1438254940} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1438254939 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1438254938} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 893001395} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1438254940 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1438254938} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1438254943} - m_Target: {fileID: 1438254939} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1438254941 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1438254938} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1438254942 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1438254938} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 133 ---- !u!114 &1438254943 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1438254938} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 303a0000313a0000323a0000333a0000343a0000353a0000363a0000373a0000383a0000393a00003a3a00003b3a00003c3a00003d3a00003e3a00003f3a0000403a0000413a0000423a0000433a0000443a0000453a0000463a0000473a0000483a0000493a00004a3a00004b3a00004c3a00004d3a00004e3a00004f3a0000503a0000513a0000523a0000533a0000543a0000553a0000563a0000573a0000583a0000593a00005a3a00005b3a00005c3a00005d3a00005e3a00005f3a0000603a0000613a0000623a0000633a0000643a0000653a0000663a0000673a0000683a0000693a00006a3a00006b3a00006c3a00006d3a00006e3a00006f3a0000703a0000713a0000723a0000733a0000743a0000753a0000763a0000773a0000783a0000793a00007a3a00007b3a00007c3a00007d3a00007e3a00007f3a0000803a0000813a0000823a0000833a0000843a0000853a0000863a0000873a0000883a0000893a00008a3a00008b3a00008c3a00008d3a00008e3a00008f3a0000903a0000913a0000923a0000933a0000943a0000953a0000963a0000973a0000983a0000993a00009a3a00009b3a00009c3a00009d3a00009e3a00009f3a0000 - m_AlignBytes: 16 - groupID: 134 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 14896 - particle2: 14897 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 14897 - particle2: 14898 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 14898 - particle2: 14899 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 14899 - particle2: 14900 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 14900 - particle2: 14901 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 14901 - particle2: 14902 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 14902 - particle2: 14903 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 14903 - particle2: 14904 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 14904 - particle2: 14905 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 14905 - particle2: 14906 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 14906 - particle2: 14907 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1440395743 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1440395744} - - component: {fileID: 1440395748} - - component: {fileID: 1440395747} - - component: {fileID: 1440395746} - - component: {fileID: 1440395745} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1440395744 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1440395743} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1062536481} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1440395745 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1440395743} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1440395748} - m_Target: {fileID: 1440395744} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1440395746 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1440395743} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1440395747 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1440395743} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 134 ---- !u!114 &1440395748 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1440395743} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: a03a0000a13a0000a23a0000a33a0000a43a0000a53a0000a63a0000a73a0000a83a0000a93a0000aa3a0000ab3a0000ac3a0000ad3a0000ae3a0000af3a0000b03a0000b13a0000b23a0000b33a0000b43a0000b53a0000b63a0000b73a0000b83a0000b93a0000ba3a0000bb3a0000bc3a0000bd3a0000be3a0000bf3a0000c03a0000c13a0000c23a0000c33a0000c43a0000c53a0000c63a0000c73a0000c83a0000c93a0000ca3a0000cb3a0000cc3a0000cd3a0000ce3a0000cf3a0000d03a0000d13a0000d23a0000d33a0000d43a0000d53a0000d63a0000d73a0000d83a0000d93a0000da3a0000db3a0000dc3a0000dd3a0000de3a0000df3a0000e03a0000e13a0000e23a0000e33a0000e43a0000e53a0000e63a0000e73a0000e83a0000e93a0000ea3a0000eb3a0000ec3a0000ed3a0000ee3a0000ef3a0000f03a0000f13a0000f23a0000f33a0000f43a0000f53a0000f63a0000f73a0000f83a0000f93a0000fa3a0000fb3a0000fc3a0000fd3a0000fe3a0000ff3a0000003b0000013b0000023b0000033b0000043b0000053b0000063b0000073b0000083b0000093b00000a3b00000b3b00000c3b00000d3b00000e3b00000f3b0000 - m_AlignBytes: 16 - groupID: 135 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 15008 - particle2: 15009 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 15009 - particle2: 15010 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 15010 - particle2: 15011 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 15011 - particle2: 15012 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 15012 - particle2: 15013 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 15013 - particle2: 15014 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 15014 - particle2: 15015 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 15015 - particle2: 15016 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 15016 - particle2: 15017 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 15017 - particle2: 15018 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 15018 - particle2: 15019 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1454186979 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1454186980} - - component: {fileID: 1454186984} - - component: {fileID: 1454186983} - - component: {fileID: 1454186982} - - component: {fileID: 1454186981} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1454186980 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1454186979} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1628171963} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1454186981 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1454186979} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1454186984} - m_Target: {fileID: 1454186980} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1454186982 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1454186979} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1454186983 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1454186979} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 135 ---- !u!114 &1454186984 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1454186979} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 103b0000113b0000123b0000133b0000143b0000153b0000163b0000173b0000183b0000193b00001a3b00001b3b00001c3b00001d3b00001e3b00001f3b0000203b0000213b0000223b0000233b0000243b0000253b0000263b0000273b0000283b0000293b00002a3b00002b3b00002c3b00002d3b00002e3b00002f3b0000303b0000313b0000323b0000333b0000343b0000353b0000363b0000373b0000383b0000393b00003a3b00003b3b00003c3b00003d3b00003e3b00003f3b0000403b0000413b0000423b0000433b0000443b0000453b0000463b0000473b0000483b0000493b00004a3b00004b3b00004c3b00004d3b00004e3b00004f3b0000503b0000513b0000523b0000533b0000543b0000553b0000563b0000573b0000583b0000593b00005a3b00005b3b00005c3b00005d3b00005e3b00005f3b0000603b0000613b0000623b0000633b0000643b0000653b0000663b0000673b0000683b0000693b00006a3b00006b3b00006c3b00006d3b00006e3b00006f3b0000703b0000713b0000723b0000733b0000743b0000753b0000763b0000773b0000783b0000793b00007a3b00007b3b00007c3b00007d3b00007e3b00007f3b0000 - m_AlignBytes: 16 - groupID: 136 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 15120 - particle2: 15121 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 15121 - particle2: 15122 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 15122 - particle2: 15123 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 15123 - particle2: 15124 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 15124 - particle2: 15125 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 15125 - particle2: 15126 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 15126 - particle2: 15127 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 15127 - particle2: 15128 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 15128 - particle2: 15129 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 15129 - particle2: 15130 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 15130 - particle2: 15131 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1461467371 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1461467372} - - component: {fileID: 1461467376} - - component: {fileID: 1461467375} - - component: {fileID: 1461467374} - - component: {fileID: 1461467373} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1461467372 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1461467371} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 54623967} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1461467373 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1461467371} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1461467376} - m_Target: {fileID: 1461467372} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1461467374 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1461467371} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1461467375 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1461467371} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 136 ---- !u!114 &1461467376 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1461467371} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 803b0000813b0000823b0000833b0000843b0000853b0000863b0000873b0000883b0000893b00008a3b00008b3b00008c3b00008d3b00008e3b00008f3b0000903b0000913b0000923b0000933b0000943b0000953b0000963b0000973b0000983b0000993b00009a3b00009b3b00009c3b00009d3b00009e3b00009f3b0000a03b0000a13b0000a23b0000a33b0000a43b0000a53b0000a63b0000a73b0000a83b0000a93b0000aa3b0000ab3b0000ac3b0000ad3b0000ae3b0000af3b0000b03b0000b13b0000b23b0000b33b0000b43b0000b53b0000b63b0000b73b0000b83b0000b93b0000ba3b0000bb3b0000bc3b0000bd3b0000be3b0000bf3b0000c03b0000c13b0000c23b0000c33b0000c43b0000c53b0000c63b0000c73b0000c83b0000c93b0000ca3b0000cb3b0000cc3b0000cd3b0000ce3b0000cf3b0000d03b0000d13b0000d23b0000d33b0000d43b0000d53b0000d63b0000d73b0000d83b0000d93b0000da3b0000db3b0000dc3b0000dd3b0000de3b0000df3b0000e03b0000e13b0000e23b0000e33b0000e43b0000e53b0000e63b0000e73b0000e83b0000e93b0000ea3b0000eb3b0000ec3b0000ed3b0000ee3b0000ef3b0000 - m_AlignBytes: 16 - groupID: 137 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 15232 - particle2: 15233 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 15233 - particle2: 15234 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 15234 - particle2: 15235 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 15235 - particle2: 15236 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 15236 - particle2: 15237 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 15237 - particle2: 15238 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 15238 - particle2: 15239 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 15239 - particle2: 15240 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 15240 - particle2: 15241 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 15241 - particle2: 15242 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 15242 - particle2: 15243 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1464717034 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1464717035} - m_Layer: 0 - m_Name: Row (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1464717035 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1464717034} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -0.2} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1117186089} - - {fileID: 1635734355} - - {fileID: 1431270383} - - {fileID: 2127388785} - - {fileID: 975387945} - - {fileID: 1001514668} - - {fileID: 1040360819} - - {fileID: 674074861} - - {fileID: 1970184123} - - {fileID: 686144124} - m_Father: {fileID: 1760688768} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1472901346 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1472901347} - - component: {fileID: 1472901351} - - component: {fileID: 1472901350} - - component: {fileID: 1472901349} - - component: {fileID: 1472901348} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1472901347 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1472901346} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1977632070} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1472901348 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1472901346} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1472901351} - m_Target: {fileID: 1472901347} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1472901349 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1472901346} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1472901350 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1472901346} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 137 ---- !u!114 &1472901351 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1472901346} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: f03b0000f13b0000f23b0000f33b0000f43b0000f53b0000f63b0000f73b0000f83b0000f93b0000fa3b0000fb3b0000fc3b0000fd3b0000fe3b0000ff3b0000003c0000013c0000023c0000033c0000043c0000053c0000063c0000073c0000083c0000093c00000a3c00000b3c00000c3c00000d3c00000e3c00000f3c0000103c0000113c0000123c0000133c0000143c0000153c0000163c0000173c0000183c0000193c00001a3c00001b3c00001c3c00001d3c00001e3c00001f3c0000203c0000213c0000223c0000233c0000243c0000253c0000263c0000273c0000283c0000293c00002a3c00002b3c00002c3c00002d3c00002e3c00002f3c0000303c0000313c0000323c0000333c0000343c0000353c0000363c0000373c0000383c0000393c00003a3c00003b3c00003c3c00003d3c00003e3c00003f3c0000403c0000413c0000423c0000433c0000443c0000453c0000463c0000473c0000483c0000493c00004a3c00004b3c00004c3c00004d3c00004e3c00004f3c0000503c0000513c0000523c0000533c0000543c0000553c0000563c0000573c0000583c0000593c00005a3c00005b3c00005c3c00005d3c00005e3c00005f3c0000 - m_AlignBytes: 16 - groupID: 138 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 15344 - particle2: 15345 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 15345 - particle2: 15346 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 15346 - particle2: 15347 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 15347 - particle2: 15348 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 15348 - particle2: 15349 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 15349 - particle2: 15350 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 15350 - particle2: 15351 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 15351 - particle2: 15352 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 15352 - particle2: 15353 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 15353 - particle2: 15354 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 15354 - particle2: 15355 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1479240941 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1479240942} - - component: {fileID: 1479240946} - - component: {fileID: 1479240945} - - component: {fileID: 1479240944} - - component: {fileID: 1479240943} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1479240942 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1479240941} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1798495239} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1479240943 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1479240941} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1479240946} - m_Target: {fileID: 1479240942} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1479240944 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1479240941} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1479240945 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1479240941} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 138 ---- !u!114 &1479240946 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1479240941} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 603c0000613c0000623c0000633c0000643c0000653c0000663c0000673c0000683c0000693c00006a3c00006b3c00006c3c00006d3c00006e3c00006f3c0000703c0000713c0000723c0000733c0000743c0000753c0000763c0000773c0000783c0000793c00007a3c00007b3c00007c3c00007d3c00007e3c00007f3c0000803c0000813c0000823c0000833c0000843c0000853c0000863c0000873c0000883c0000893c00008a3c00008b3c00008c3c00008d3c00008e3c00008f3c0000903c0000913c0000923c0000933c0000943c0000953c0000963c0000973c0000983c0000993c00009a3c00009b3c00009c3c00009d3c00009e3c00009f3c0000a03c0000a13c0000a23c0000a33c0000a43c0000a53c0000a63c0000a73c0000a83c0000a93c0000aa3c0000ab3c0000ac3c0000ad3c0000ae3c0000af3c0000b03c0000b13c0000b23c0000b33c0000b43c0000b53c0000b63c0000b73c0000b83c0000b93c0000ba3c0000bb3c0000bc3c0000bd3c0000be3c0000bf3c0000c03c0000c13c0000c23c0000c33c0000c43c0000c53c0000c63c0000c73c0000c83c0000c93c0000ca3c0000cb3c0000cc3c0000cd3c0000ce3c0000cf3c0000 - m_AlignBytes: 16 - groupID: 139 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 15456 - particle2: 15457 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 15457 - particle2: 15458 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 15458 - particle2: 15459 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 15459 - particle2: 15460 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 15460 - particle2: 15461 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 15461 - particle2: 15462 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 15462 - particle2: 15463 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 15463 - particle2: 15464 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 15464 - particle2: 15465 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 15465 - particle2: 15466 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 15466 - particle2: 15467 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1501728738 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1501728739} - - component: {fileID: 1501728743} - - component: {fileID: 1501728742} - - component: {fileID: 1501728741} - - component: {fileID: 1501728740} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1501728739 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1501728738} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1640435994} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1501728740 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1501728738} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1501728743} - m_Target: {fileID: 1501728739} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1501728741 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1501728738} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1501728742 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1501728738} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 139 ---- !u!114 &1501728743 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1501728738} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: d03c0000d13c0000d23c0000d33c0000d43c0000d53c0000d63c0000d73c0000d83c0000d93c0000da3c0000db3c0000dc3c0000dd3c0000de3c0000df3c0000e03c0000e13c0000e23c0000e33c0000e43c0000e53c0000e63c0000e73c0000e83c0000e93c0000ea3c0000eb3c0000ec3c0000ed3c0000ee3c0000ef3c0000f03c0000f13c0000f23c0000f33c0000f43c0000f53c0000f63c0000f73c0000f83c0000f93c0000fa3c0000fb3c0000fc3c0000fd3c0000fe3c0000ff3c0000003d0000013d0000023d0000033d0000043d0000053d0000063d0000073d0000083d0000093d00000a3d00000b3d00000c3d00000d3d00000e3d00000f3d0000103d0000113d0000123d0000133d0000143d0000153d0000163d0000173d0000183d0000193d00001a3d00001b3d00001c3d00001d3d00001e3d00001f3d0000203d0000213d0000223d0000233d0000243d0000253d0000263d0000273d0000283d0000293d00002a3d00002b3d00002c3d00002d3d00002e3d00002f3d0000303d0000313d0000323d0000333d0000343d0000353d0000363d0000373d0000383d0000393d00003a3d00003b3d00003c3d00003d3d00003e3d00003f3d0000 - m_AlignBytes: 16 - groupID: 140 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 15568 - particle2: 15569 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 15569 - particle2: 15570 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 15570 - particle2: 15571 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 15571 - particle2: 15572 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 15572 - particle2: 15573 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 15573 - particle2: 15574 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 15574 - particle2: 15575 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 15575 - particle2: 15576 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 15576 - particle2: 15577 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 15577 - particle2: 15578 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 15578 - particle2: 15579 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1503252369 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1503252370} - - component: {fileID: 1503252374} - - component: {fileID: 1503252373} - - component: {fileID: 1503252372} - - component: {fileID: 1503252371} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1503252370 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1503252369} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 472161722} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1503252371 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1503252369} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1503252374} - m_Target: {fileID: 1503252370} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1503252372 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1503252369} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1503252373 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1503252369} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 140 ---- !u!114 &1503252374 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1503252369} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 403d0000413d0000423d0000433d0000443d0000453d0000463d0000473d0000483d0000493d00004a3d00004b3d00004c3d00004d3d00004e3d00004f3d0000503d0000513d0000523d0000533d0000543d0000553d0000563d0000573d0000583d0000593d00005a3d00005b3d00005c3d00005d3d00005e3d00005f3d0000603d0000613d0000623d0000633d0000643d0000653d0000663d0000673d0000683d0000693d00006a3d00006b3d00006c3d00006d3d00006e3d00006f3d0000703d0000713d0000723d0000733d0000743d0000753d0000763d0000773d0000783d0000793d00007a3d00007b3d00007c3d00007d3d00007e3d00007f3d0000803d0000813d0000823d0000833d0000843d0000853d0000863d0000873d0000883d0000893d00008a3d00008b3d00008c3d00008d3d00008e3d00008f3d0000903d0000913d0000923d0000933d0000943d0000953d0000963d0000973d0000983d0000993d00009a3d00009b3d00009c3d00009d3d00009e3d00009f3d0000a03d0000a13d0000a23d0000a33d0000a43d0000a53d0000a63d0000a73d0000a83d0000a93d0000aa3d0000ab3d0000ac3d0000ad3d0000ae3d0000af3d0000 - m_AlignBytes: 16 - groupID: 141 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 15680 - particle2: 15681 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 15681 - particle2: 15682 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 15682 - particle2: 15683 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 15683 - particle2: 15684 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 15684 - particle2: 15685 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 15685 - particle2: 15686 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 15686 - particle2: 15687 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 15687 - particle2: 15688 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 15688 - particle2: 15689 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 15689 - particle2: 15690 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 15690 - particle2: 15691 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1517801621 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1517801622} - - component: {fileID: 1517801626} - - component: {fileID: 1517801625} - - component: {fileID: 1517801624} - - component: {fileID: 1517801623} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1517801622 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1517801621} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 779073863} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1517801623 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1517801621} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1517801626} - m_Target: {fileID: 1517801622} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1517801624 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1517801621} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1517801625 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1517801621} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 141 ---- !u!114 &1517801626 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1517801621} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: b03d0000b13d0000b23d0000b33d0000b43d0000b53d0000b63d0000b73d0000b83d0000b93d0000ba3d0000bb3d0000bc3d0000bd3d0000be3d0000bf3d0000c03d0000c13d0000c23d0000c33d0000c43d0000c53d0000c63d0000c73d0000c83d0000c93d0000ca3d0000cb3d0000cc3d0000cd3d0000ce3d0000cf3d0000d03d0000d13d0000d23d0000d33d0000d43d0000d53d0000d63d0000d73d0000d83d0000d93d0000da3d0000db3d0000dc3d0000dd3d0000de3d0000df3d0000e03d0000e13d0000e23d0000e33d0000e43d0000e53d0000e63d0000e73d0000e83d0000e93d0000ea3d0000eb3d0000ec3d0000ed3d0000ee3d0000ef3d0000f03d0000f13d0000f23d0000f33d0000f43d0000f53d0000f63d0000f73d0000f83d0000f93d0000fa3d0000fb3d0000fc3d0000fd3d0000fe3d0000ff3d0000003e0000013e0000023e0000033e0000043e0000053e0000063e0000073e0000083e0000093e00000a3e00000b3e00000c3e00000d3e00000e3e00000f3e0000103e0000113e0000123e0000133e0000143e0000153e0000163e0000173e0000183e0000193e00001a3e00001b3e00001c3e00001d3e00001e3e00001f3e0000 - m_AlignBytes: 16 - groupID: 142 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 15792 - particle2: 15793 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 15793 - particle2: 15794 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 15794 - particle2: 15795 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 15795 - particle2: 15796 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 15796 - particle2: 15797 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 15797 - particle2: 15798 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 15798 - particle2: 15799 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 15799 - particle2: 15800 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 15800 - particle2: 15801 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 15801 - particle2: 15802 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 15802 - particle2: 15803 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1521845707 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1521845708} - - component: {fileID: 1521845712} - - component: {fileID: 1521845711} - - component: {fileID: 1521845710} - - component: {fileID: 1521845709} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1521845708 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1521845707} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 893001395} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1521845709 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1521845707} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1521845712} - m_Target: {fileID: 1521845708} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1521845710 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1521845707} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1521845711 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1521845707} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 142 ---- !u!114 &1521845712 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1521845707} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 203e0000213e0000223e0000233e0000243e0000253e0000263e0000273e0000283e0000293e00002a3e00002b3e00002c3e00002d3e00002e3e00002f3e0000303e0000313e0000323e0000333e0000343e0000353e0000363e0000373e0000383e0000393e00003a3e00003b3e00003c3e00003d3e00003e3e00003f3e0000403e0000413e0000423e0000433e0000443e0000453e0000463e0000473e0000483e0000493e00004a3e00004b3e00004c3e00004d3e00004e3e00004f3e0000503e0000513e0000523e0000533e0000543e0000553e0000563e0000573e0000583e0000593e00005a3e00005b3e00005c3e00005d3e00005e3e00005f3e0000603e0000613e0000623e0000633e0000643e0000653e0000663e0000673e0000683e0000693e00006a3e00006b3e00006c3e00006d3e00006e3e00006f3e0000703e0000713e0000723e0000733e0000743e0000753e0000763e0000773e0000783e0000793e00007a3e00007b3e00007c3e00007d3e00007e3e00007f3e0000803e0000813e0000823e0000833e0000843e0000853e0000863e0000873e0000883e0000893e00008a3e00008b3e00008c3e00008d3e00008e3e00008f3e0000 - m_AlignBytes: 16 - groupID: 143 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 15904 - particle2: 15905 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 15905 - particle2: 15906 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 15906 - particle2: 15907 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 15907 - particle2: 15908 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 15908 - particle2: 15909 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 15909 - particle2: 15910 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 15910 - particle2: 15911 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 15911 - particle2: 15912 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 15912 - particle2: 15913 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 15913 - particle2: 15914 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 15914 - particle2: 15915 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1523215162 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1523215163} - - component: {fileID: 1523215167} - - component: {fileID: 1523215166} - - component: {fileID: 1523215165} - - component: {fileID: 1523215164} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1523215163 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1523215162} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 426164209} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1523215164 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1523215162} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1523215167} - m_Target: {fileID: 1523215163} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1523215165 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1523215162} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1523215166 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1523215162} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 143 ---- !u!114 &1523215167 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1523215162} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 903e0000913e0000923e0000933e0000943e0000953e0000963e0000973e0000983e0000993e00009a3e00009b3e00009c3e00009d3e00009e3e00009f3e0000a03e0000a13e0000a23e0000a33e0000a43e0000a53e0000a63e0000a73e0000a83e0000a93e0000aa3e0000ab3e0000ac3e0000ad3e0000ae3e0000af3e0000b03e0000b13e0000b23e0000b33e0000b43e0000b53e0000b63e0000b73e0000b83e0000b93e0000ba3e0000bb3e0000bc3e0000bd3e0000be3e0000bf3e0000c03e0000c13e0000c23e0000c33e0000c43e0000c53e0000c63e0000c73e0000c83e0000c93e0000ca3e0000cb3e0000cc3e0000cd3e0000ce3e0000cf3e0000d03e0000d13e0000d23e0000d33e0000d43e0000d53e0000d63e0000d73e0000d83e0000d93e0000da3e0000db3e0000dc3e0000dd3e0000de3e0000df3e0000e03e0000e13e0000e23e0000e33e0000e43e0000e53e0000e63e0000e73e0000e83e0000e93e0000ea3e0000eb3e0000ec3e0000ed3e0000ee3e0000ef3e0000f03e0000f13e0000f23e0000f33e0000f43e0000f53e0000f63e0000f73e0000f83e0000f93e0000fa3e0000fb3e0000fc3e0000fd3e0000fe3e0000ff3e0000 - m_AlignBytes: 16 - groupID: 144 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 16016 - particle2: 16017 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 16017 - particle2: 16018 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 16018 - particle2: 16019 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 16019 - particle2: 16020 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 16020 - particle2: 16021 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 16021 - particle2: 16022 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 16022 - particle2: 16023 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 16023 - particle2: 16024 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 16024 - particle2: 16025 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 16025 - particle2: 16026 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 16026 - particle2: 16027 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1537736704 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1537736705} - - component: {fileID: 1537736709} - - component: {fileID: 1537736708} - - component: {fileID: 1537736707} - - component: {fileID: 1537736706} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1537736705 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1537736704} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 472161722} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1537736706 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1537736704} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1537736709} - m_Target: {fileID: 1537736705} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1537736707 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1537736704} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1537736708 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1537736704} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 144 ---- !u!114 &1537736709 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1537736704} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 003f0000013f0000023f0000033f0000043f0000053f0000063f0000073f0000083f0000093f00000a3f00000b3f00000c3f00000d3f00000e3f00000f3f0000103f0000113f0000123f0000133f0000143f0000153f0000163f0000173f0000183f0000193f00001a3f00001b3f00001c3f00001d3f00001e3f00001f3f0000203f0000213f0000223f0000233f0000243f0000253f0000263f0000273f0000283f0000293f00002a3f00002b3f00002c3f00002d3f00002e3f00002f3f0000303f0000313f0000323f0000333f0000343f0000353f0000363f0000373f0000383f0000393f00003a3f00003b3f00003c3f00003d3f00003e3f00003f3f0000403f0000413f0000423f0000433f0000443f0000453f0000463f0000473f0000483f0000493f00004a3f00004b3f00004c3f00004d3f00004e3f00004f3f0000503f0000513f0000523f0000533f0000543f0000553f0000563f0000573f0000583f0000593f00005a3f00005b3f00005c3f00005d3f00005e3f00005f3f0000603f0000613f0000623f0000633f0000643f0000653f0000663f0000673f0000683f0000693f00006a3f00006b3f00006c3f00006d3f00006e3f00006f3f0000 - m_AlignBytes: 16 - groupID: 145 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 16128 - particle2: 16129 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 16129 - particle2: 16130 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 16130 - particle2: 16131 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 16131 - particle2: 16132 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 16132 - particle2: 16133 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 16133 - particle2: 16134 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 16134 - particle2: 16135 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 16135 - particle2: 16136 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 16136 - particle2: 16137 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 16137 - particle2: 16138 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 16138 - particle2: 16139 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1551337443 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1551337444} - - component: {fileID: 1551337448} - - component: {fileID: 1551337447} - - component: {fileID: 1551337446} - - component: {fileID: 1551337445} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1551337444 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1551337443} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1240601735} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1551337445 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1551337443} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1551337448} - m_Target: {fileID: 1551337444} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1551337446 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1551337443} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1551337447 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1551337443} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 145 ---- !u!114 &1551337448 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1551337443} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 703f0000713f0000723f0000733f0000743f0000753f0000763f0000773f0000783f0000793f00007a3f00007b3f00007c3f00007d3f00007e3f00007f3f0000803f0000813f0000823f0000833f0000843f0000853f0000863f0000873f0000883f0000893f00008a3f00008b3f00008c3f00008d3f00008e3f00008f3f0000903f0000913f0000923f0000933f0000943f0000953f0000963f0000973f0000983f0000993f00009a3f00009b3f00009c3f00009d3f00009e3f00009f3f0000a03f0000a13f0000a23f0000a33f0000a43f0000a53f0000a63f0000a73f0000a83f0000a93f0000aa3f0000ab3f0000ac3f0000ad3f0000ae3f0000af3f0000b03f0000b13f0000b23f0000b33f0000b43f0000b53f0000b63f0000b73f0000b83f0000b93f0000ba3f0000bb3f0000bc3f0000bd3f0000be3f0000bf3f0000c03f0000c13f0000c23f0000c33f0000c43f0000c53f0000c63f0000c73f0000c83f0000c93f0000ca3f0000cb3f0000cc3f0000cd3f0000ce3f0000cf3f0000d03f0000d13f0000d23f0000d33f0000d43f0000d53f0000d63f0000d73f0000d83f0000d93f0000da3f0000db3f0000dc3f0000dd3f0000de3f0000df3f0000 - m_AlignBytes: 16 - groupID: 146 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 16240 - particle2: 16241 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 16241 - particle2: 16242 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 16242 - particle2: 16243 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 16243 - particle2: 16244 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 16244 - particle2: 16245 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 16245 - particle2: 16246 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 16246 - particle2: 16247 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 16247 - particle2: 16248 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 16248 - particle2: 16249 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 16249 - particle2: 16250 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 16250 - particle2: 16251 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1561375947 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1561375948} - - component: {fileID: 1561375949} - m_Layer: 0 - m_Name: FanRoot - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1561375948 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1561375947} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.25, y: 0, z: 2} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 792243030} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!95 &1561375949 -Animator: - serializedVersion: 7 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1561375947} - m_Enabled: 1 - m_Avatar: {fileID: 0} - m_Controller: {fileID: 9100000, guid: 07415f30e4149416b920c1da07bdc3b7, type: 2} - m_CullingMode: 0 - m_UpdateMode: 0 - m_ApplyRootMotion: 0 - m_LinearVelocityBlending: 0 - m_StabilizeFeet: 0 - m_AnimatePhysics: 0 - m_WarningMessage: - m_HasTransformHierarchy: 1 - m_AllowConstantClipSamplingOptimization: 1 - m_KeepAnimatorStateOnDisable: 0 - m_WriteDefaultValuesOnDisable: 0 ---- !u!1 &1569249537 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1569249538} - - component: {fileID: 1569249542} - - component: {fileID: 1569249541} - - component: {fileID: 1569249540} - - component: {fileID: 1569249539} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1569249538 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1569249537} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 249029318} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1569249539 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1569249537} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1569249542} - m_Target: {fileID: 1569249538} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1569249540 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1569249537} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1569249541 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1569249537} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 146 ---- !u!114 &1569249542 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1569249537} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: e03f0000e13f0000e23f0000e33f0000e43f0000e53f0000e63f0000e73f0000e83f0000e93f0000ea3f0000eb3f0000ec3f0000ed3f0000ee3f0000ef3f0000f03f0000f13f0000f23f0000f33f0000f43f0000f53f0000f63f0000f73f0000f83f0000f93f0000fa3f0000fb3f0000fc3f0000fd3f0000fe3f0000ff3f0000004000000140000002400000034000000440000005400000064000000740000008400000094000000a4000000b4000000c4000000d4000000e4000000f400000104000001140000012400000134000001440000015400000164000001740000018400000194000001a4000001b4000001c4000001d4000001e4000001f400000204000002140000022400000234000002440000025400000264000002740000028400000294000002a4000002b4000002c4000002d4000002e4000002f400000304000003140000032400000334000003440000035400000364000003740000038400000394000003a4000003b4000003c4000003d4000003e4000003f400000404000004140000042400000434000004440000045400000464000004740000048400000494000004a4000004b4000004c4000004d4000004e4000004f400000 - m_AlignBytes: 16 - groupID: 147 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 16352 - particle2: 16353 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 16353 - particle2: 16354 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 16354 - particle2: 16355 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 16355 - particle2: 16356 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 16356 - particle2: 16357 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 16357 - particle2: 16358 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 16358 - particle2: 16359 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 16359 - particle2: 16360 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 16360 - particle2: 16361 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 16361 - particle2: 16362 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 16362 - particle2: 16363 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1572775138 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1572775139} - - component: {fileID: 1572775143} - - component: {fileID: 1572775142} - - component: {fileID: 1572775141} - - component: {fileID: 1572775140} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1572775139 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1572775138} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1628171963} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1572775140 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1572775138} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1572775143} - m_Target: {fileID: 1572775139} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1572775141 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1572775138} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1572775142 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1572775138} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 147 ---- !u!114 &1572775143 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1572775138} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 504000005140000052400000534000005440000055400000564000005740000058400000594000005a4000005b4000005c4000005d4000005e4000005f400000604000006140000062400000634000006440000065400000664000006740000068400000694000006a4000006b4000006c4000006d4000006e4000006f400000704000007140000072400000734000007440000075400000764000007740000078400000794000007a4000007b4000007c4000007d4000007e4000007f400000804000008140000082400000834000008440000085400000864000008740000088400000894000008a4000008b4000008c4000008d4000008e4000008f400000904000009140000092400000934000009440000095400000964000009740000098400000994000009a4000009b4000009c4000009d4000009e4000009f400000a0400000a1400000a2400000a3400000a4400000a5400000a6400000a7400000a8400000a9400000aa400000ab400000ac400000ad400000ae400000af400000b0400000b1400000b2400000b3400000b4400000b5400000b6400000b7400000b8400000b9400000ba400000bb400000bc400000bd400000be400000bf400000 - m_AlignBytes: 16 - groupID: 148 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 16464 - particle2: 16465 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 16465 - particle2: 16466 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 16466 - particle2: 16467 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 16467 - particle2: 16468 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 16468 - particle2: 16469 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 16469 - particle2: 16470 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 16470 - particle2: 16471 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 16471 - particle2: 16472 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 16472 - particle2: 16473 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 16473 - particle2: 16474 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 16474 - particle2: 16475 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1588242873 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1588242874} - - component: {fileID: 1588242878} - - component: {fileID: 1588242877} - - component: {fileID: 1588242876} - - component: {fileID: 1588242875} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1588242874 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1588242873} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 648480057} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1588242875 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1588242873} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1588242878} - m_Target: {fileID: 1588242874} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1588242876 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1588242873} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1588242877 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1588242873} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 148 ---- !u!114 &1588242878 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1588242873} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: c0400000c1400000c2400000c3400000c4400000c5400000c6400000c7400000c8400000c9400000ca400000cb400000cc400000cd400000ce400000cf400000d0400000d1400000d2400000d3400000d4400000d5400000d6400000d7400000d8400000d9400000da400000db400000dc400000dd400000de400000df400000e0400000e1400000e2400000e3400000e4400000e5400000e6400000e7400000e8400000e9400000ea400000eb400000ec400000ed400000ee400000ef400000f0400000f1400000f2400000f3400000f4400000f5400000f6400000f7400000f8400000f9400000fa400000fb400000fc400000fd400000fe400000ff400000004100000141000002410000034100000441000005410000064100000741000008410000094100000a4100000b4100000c4100000d4100000e4100000f410000104100001141000012410000134100001441000015410000164100001741000018410000194100001a4100001b4100001c4100001d4100001e4100001f410000204100002141000022410000234100002441000025410000264100002741000028410000294100002a4100002b4100002c4100002d4100002e4100002f410000 - m_AlignBytes: 16 - groupID: 149 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 16576 - particle2: 16577 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 16577 - particle2: 16578 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 16578 - particle2: 16579 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 16579 - particle2: 16580 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 16580 - particle2: 16581 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 16581 - particle2: 16582 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 16582 - particle2: 16583 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 16583 - particle2: 16584 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 16584 - particle2: 16585 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 16585 - particle2: 16586 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 16586 - particle2: 16587 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1593990335 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1593990336} - - component: {fileID: 1593990340} - - component: {fileID: 1593990339} - - component: {fileID: 1593990338} - - component: {fileID: 1593990337} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1593990336 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1593990335} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 648480057} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1593990337 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1593990335} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1593990340} - m_Target: {fileID: 1593990336} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1593990338 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1593990335} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1593990339 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1593990335} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 149 ---- !u!114 &1593990340 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1593990335} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 304100003141000032410000334100003441000035410000364100003741000038410000394100003a4100003b4100003c4100003d4100003e4100003f410000404100004141000042410000434100004441000045410000464100004741000048410000494100004a4100004b4100004c4100004d4100004e4100004f410000504100005141000052410000534100005441000055410000564100005741000058410000594100005a4100005b4100005c4100005d4100005e4100005f410000604100006141000062410000634100006441000065410000664100006741000068410000694100006a4100006b4100006c4100006d4100006e4100006f410000704100007141000072410000734100007441000075410000764100007741000078410000794100007a4100007b4100007c4100007d4100007e4100007f410000804100008141000082410000834100008441000085410000864100008741000088410000894100008a4100008b4100008c4100008d4100008e4100008f410000904100009141000092410000934100009441000095410000964100009741000098410000994100009a4100009b4100009c4100009d4100009e4100009f410000 - m_AlignBytes: 16 - groupID: 150 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 16688 - particle2: 16689 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 16689 - particle2: 16690 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 16690 - particle2: 16691 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 16691 - particle2: 16692 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 16692 - particle2: 16693 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 16693 - particle2: 16694 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 16694 - particle2: 16695 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 16695 - particle2: 16696 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 16696 - particle2: 16697 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 16697 - particle2: 16698 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 16698 - particle2: 16699 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1595267026 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1595267027} - - component: {fileID: 1595267031} - - component: {fileID: 1595267030} - - component: {fileID: 1595267029} - - component: {fileID: 1595267028} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1595267027 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1595267026} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1240601735} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1595267028 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1595267026} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1595267031} - m_Target: {fileID: 1595267027} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1595267029 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1595267026} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1595267030 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1595267026} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 150 ---- !u!114 &1595267031 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1595267026} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: a0410000a1410000a2410000a3410000a4410000a5410000a6410000a7410000a8410000a9410000aa410000ab410000ac410000ad410000ae410000af410000b0410000b1410000b2410000b3410000b4410000b5410000b6410000b7410000b8410000b9410000ba410000bb410000bc410000bd410000be410000bf410000c0410000c1410000c2410000c3410000c4410000c5410000c6410000c7410000c8410000c9410000ca410000cb410000cc410000cd410000ce410000cf410000d0410000d1410000d2410000d3410000d4410000d5410000d6410000d7410000d8410000d9410000da410000db410000dc410000dd410000de410000df410000e0410000e1410000e2410000e3410000e4410000e5410000e6410000e7410000e8410000e9410000ea410000eb410000ec410000ed410000ee410000ef410000f0410000f1410000f2410000f3410000f4410000f5410000f6410000f7410000f8410000f9410000fa410000fb410000fc410000fd410000fe410000ff410000004200000142000002420000034200000442000005420000064200000742000008420000094200000a4200000b4200000c4200000d4200000e4200000f420000 - m_AlignBytes: 16 - groupID: 151 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 16800 - particle2: 16801 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 16801 - particle2: 16802 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 16802 - particle2: 16803 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 16803 - particle2: 16804 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 16804 - particle2: 16805 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 16805 - particle2: 16806 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 16806 - particle2: 16807 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 16807 - particle2: 16808 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 16808 - particle2: 16809 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 16809 - particle2: 16810 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 16810 - particle2: 16811 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1600426036 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1600426037} - - component: {fileID: 1600426041} - - component: {fileID: 1600426040} - - component: {fileID: 1600426039} - - component: {fileID: 1600426038} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1600426037 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1600426036} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1977632070} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1600426038 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1600426036} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1600426041} - m_Target: {fileID: 1600426037} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1600426039 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1600426036} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1600426040 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1600426036} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 151 ---- !u!114 &1600426041 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1600426036} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 104200001142000012420000134200001442000015420000164200001742000018420000194200001a4200001b4200001c4200001d4200001e4200001f420000204200002142000022420000234200002442000025420000264200002742000028420000294200002a4200002b4200002c4200002d4200002e4200002f420000304200003142000032420000334200003442000035420000364200003742000038420000394200003a4200003b4200003c4200003d4200003e4200003f420000404200004142000042420000434200004442000045420000464200004742000048420000494200004a4200004b4200004c4200004d4200004e4200004f420000504200005142000052420000534200005442000055420000564200005742000058420000594200005a4200005b4200005c4200005d4200005e4200005f420000604200006142000062420000634200006442000065420000664200006742000068420000694200006a4200006b4200006c4200006d4200006e4200006f420000704200007142000072420000734200007442000075420000764200007742000078420000794200007a4200007b4200007c4200007d4200007e4200007f420000 - m_AlignBytes: 16 - groupID: 152 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 16912 - particle2: 16913 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 16913 - particle2: 16914 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 16914 - particle2: 16915 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 16915 - particle2: 16916 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 16916 - particle2: 16917 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 16917 - particle2: 16918 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 16918 - particle2: 16919 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 16919 - particle2: 16920 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 16920 - particle2: 16921 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 16921 - particle2: 16922 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 16922 - particle2: 16923 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1605421488 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1605421489} - - component: {fileID: 1605421493} - - component: {fileID: 1605421492} - - component: {fileID: 1605421491} - - component: {fileID: 1605421490} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1605421489 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1605421488} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 893001395} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1605421490 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1605421488} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1605421493} - m_Target: {fileID: 1605421489} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1605421491 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1605421488} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1605421492 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1605421488} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 152 ---- !u!114 &1605421493 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1605421488} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 804200008142000082420000834200008442000085420000864200008742000088420000894200008a4200008b4200008c4200008d4200008e4200008f420000904200009142000092420000934200009442000095420000964200009742000098420000994200009a4200009b4200009c4200009d4200009e4200009f420000a0420000a1420000a2420000a3420000a4420000a5420000a6420000a7420000a8420000a9420000aa420000ab420000ac420000ad420000ae420000af420000b0420000b1420000b2420000b3420000b4420000b5420000b6420000b7420000b8420000b9420000ba420000bb420000bc420000bd420000be420000bf420000c0420000c1420000c2420000c3420000c4420000c5420000c6420000c7420000c8420000c9420000ca420000cb420000cc420000cd420000ce420000cf420000d0420000d1420000d2420000d3420000d4420000d5420000d6420000d7420000d8420000d9420000da420000db420000dc420000dd420000de420000df420000e0420000e1420000e2420000e3420000e4420000e5420000e6420000e7420000e8420000e9420000ea420000eb420000ec420000ed420000ee420000ef420000 - m_AlignBytes: 16 - groupID: 153 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 17024 - particle2: 17025 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 17025 - particle2: 17026 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 17026 - particle2: 17027 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 17027 - particle2: 17028 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 17028 - particle2: 17029 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 17029 - particle2: 17030 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 17030 - particle2: 17031 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 17031 - particle2: 17032 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 17032 - particle2: 17033 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 17033 - particle2: 17034 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 17034 - particle2: 17035 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1613103432 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1613103433} - - component: {fileID: 1613103437} - - component: {fileID: 1613103436} - - component: {fileID: 1613103435} - - component: {fileID: 1613103434} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1613103433 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1613103432} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 940408952} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1613103434 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1613103432} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1613103437} - m_Target: {fileID: 1613103433} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1613103435 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1613103432} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1613103436 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1613103432} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 153 ---- !u!114 &1613103437 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1613103432} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: f0420000f1420000f2420000f3420000f4420000f5420000f6420000f7420000f8420000f9420000fa420000fb420000fc420000fd420000fe420000ff420000004300000143000002430000034300000443000005430000064300000743000008430000094300000a4300000b4300000c4300000d4300000e4300000f430000104300001143000012430000134300001443000015430000164300001743000018430000194300001a4300001b4300001c4300001d4300001e4300001f430000204300002143000022430000234300002443000025430000264300002743000028430000294300002a4300002b4300002c4300002d4300002e4300002f430000304300003143000032430000334300003443000035430000364300003743000038430000394300003a4300003b4300003c4300003d4300003e4300003f430000404300004143000042430000434300004443000045430000464300004743000048430000494300004a4300004b4300004c4300004d4300004e4300004f430000504300005143000052430000534300005443000055430000564300005743000058430000594300005a4300005b4300005c4300005d4300005e4300005f430000 - m_AlignBytes: 16 - groupID: 154 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 17136 - particle2: 17137 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 17137 - particle2: 17138 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 17138 - particle2: 17139 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 17139 - particle2: 17140 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 17140 - particle2: 17141 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 17141 - particle2: 17142 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 17142 - particle2: 17143 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 17143 - particle2: 17144 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 17144 - particle2: 17145 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 17145 - particle2: 17146 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 17146 - particle2: 17147 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1621912097 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1621912098} - - component: {fileID: 1621912102} - - component: {fileID: 1621912101} - - component: {fileID: 1621912100} - - component: {fileID: 1621912099} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1621912098 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1621912097} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1062536481} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1621912099 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1621912097} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1621912102} - m_Target: {fileID: 1621912098} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1621912100 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1621912097} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1621912101 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1621912097} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 154 ---- !u!114 &1621912102 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1621912097} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 604300006143000062430000634300006443000065430000664300006743000068430000694300006a4300006b4300006c4300006d4300006e4300006f430000704300007143000072430000734300007443000075430000764300007743000078430000794300007a4300007b4300007c4300007d4300007e4300007f430000804300008143000082430000834300008443000085430000864300008743000088430000894300008a4300008b4300008c4300008d4300008e4300008f430000904300009143000092430000934300009443000095430000964300009743000098430000994300009a4300009b4300009c4300009d4300009e4300009f430000a0430000a1430000a2430000a3430000a4430000a5430000a6430000a7430000a8430000a9430000aa430000ab430000ac430000ad430000ae430000af430000b0430000b1430000b2430000b3430000b4430000b5430000b6430000b7430000b8430000b9430000ba430000bb430000bc430000bd430000be430000bf430000c0430000c1430000c2430000c3430000c4430000c5430000c6430000c7430000c8430000c9430000ca430000cb430000cc430000cd430000ce430000cf430000 - m_AlignBytes: 16 - groupID: 155 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 17248 - particle2: 17249 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 17249 - particle2: 17250 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 17250 - particle2: 17251 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 17251 - particle2: 17252 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 17252 - particle2: 17253 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 17253 - particle2: 17254 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 17254 - particle2: 17255 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 17255 - particle2: 17256 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 17256 - particle2: 17257 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 17257 - particle2: 17258 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 17258 - particle2: 17259 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1628171962 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1628171963} - m_Layer: 0 - m_Name: Row (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1628171963 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1628171962} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -0.6} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 449353293} - - {fileID: 1946747526} - - {fileID: 1572775139} - - {fileID: 1646474109} - - {fileID: 1824546302} - - {fileID: 549530596} - - {fileID: 1454186980} - - {fileID: 1734157832} - - {fileID: 1332770746} - - {fileID: 353133264} - m_Father: {fileID: 1027659676} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1632801443 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1632801444} - - component: {fileID: 1632801448} - - component: {fileID: 1632801447} - - component: {fileID: 1632801446} - - component: {fileID: 1632801445} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1632801444 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1632801443} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1798495239} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1632801445 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1632801443} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1632801448} - m_Target: {fileID: 1632801444} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1632801446 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1632801443} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1632801447 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1632801443} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 155 ---- !u!114 &1632801448 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1632801443} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: d0430000d1430000d2430000d3430000d4430000d5430000d6430000d7430000d8430000d9430000da430000db430000dc430000dd430000de430000df430000e0430000e1430000e2430000e3430000e4430000e5430000e6430000e7430000e8430000e9430000ea430000eb430000ec430000ed430000ee430000ef430000f0430000f1430000f2430000f3430000f4430000f5430000f6430000f7430000f8430000f9430000fa430000fb430000fc430000fd430000fe430000ff430000004400000144000002440000034400000444000005440000064400000744000008440000094400000a4400000b4400000c4400000d4400000e4400000f440000104400001144000012440000134400001444000015440000164400001744000018440000194400001a4400001b4400001c4400001d4400001e4400001f440000204400002144000022440000234400002444000025440000264400002744000028440000294400002a4400002b4400002c4400002d4400002e4400002f440000304400003144000032440000334400003444000035440000364400003744000038440000394400003a4400003b4400003c4400003d4400003e4400003f440000 - m_AlignBytes: 16 - groupID: 156 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 17360 - particle2: 17361 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 17361 - particle2: 17362 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 17362 - particle2: 17363 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 17363 - particle2: 17364 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 17364 - particle2: 17365 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 17365 - particle2: 17366 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 17366 - particle2: 17367 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 17367 - particle2: 17368 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 17368 - particle2: 17369 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 17369 - particle2: 17370 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 17370 - particle2: 17371 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1634777943 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1634777944} - - component: {fileID: 1634777948} - - component: {fileID: 1634777947} - - component: {fileID: 1634777946} - - component: {fileID: 1634777945} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1634777944 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1634777943} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1977632070} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1634777945 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1634777943} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1634777948} - m_Target: {fileID: 1634777944} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1634777946 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1634777943} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1634777947 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1634777943} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 156 ---- !u!114 &1634777948 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1634777943} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 404400004144000042440000434400004444000045440000464400004744000048440000494400004a4400004b4400004c4400004d4400004e4400004f440000504400005144000052440000534400005444000055440000564400005744000058440000594400005a4400005b4400005c4400005d4400005e4400005f440000604400006144000062440000634400006444000065440000664400006744000068440000694400006a4400006b4400006c4400006d4400006e4400006f440000704400007144000072440000734400007444000075440000764400007744000078440000794400007a4400007b4400007c4400007d4400007e4400007f440000804400008144000082440000834400008444000085440000864400008744000088440000894400008a4400008b4400008c4400008d4400008e4400008f440000904400009144000092440000934400009444000095440000964400009744000098440000994400009a4400009b4400009c4400009d4400009e4400009f440000a0440000a1440000a2440000a3440000a4440000a5440000a6440000a7440000a8440000a9440000aa440000ab440000ac440000ad440000ae440000af440000 - m_AlignBytes: 16 - groupID: 157 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 17472 - particle2: 17473 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 17473 - particle2: 17474 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 17474 - particle2: 17475 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 17475 - particle2: 17476 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 17476 - particle2: 17477 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 17477 - particle2: 17478 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 17478 - particle2: 17479 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 17479 - particle2: 17480 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 17480 - particle2: 17481 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 17481 - particle2: 17482 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 17482 - particle2: 17483 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1635734354 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1635734355} - - component: {fileID: 1635734359} - - component: {fileID: 1635734358} - - component: {fileID: 1635734357} - - component: {fileID: 1635734356} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1635734355 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1635734354} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1464717035} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1635734356 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1635734354} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1635734359} - m_Target: {fileID: 1635734355} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1635734357 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1635734354} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1635734358 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1635734354} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 157 ---- !u!114 &1635734359 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1635734354} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: b0440000b1440000b2440000b3440000b4440000b5440000b6440000b7440000b8440000b9440000ba440000bb440000bc440000bd440000be440000bf440000c0440000c1440000c2440000c3440000c4440000c5440000c6440000c7440000c8440000c9440000ca440000cb440000cc440000cd440000ce440000cf440000d0440000d1440000d2440000d3440000d4440000d5440000d6440000d7440000d8440000d9440000da440000db440000dc440000dd440000de440000df440000e0440000e1440000e2440000e3440000e4440000e5440000e6440000e7440000e8440000e9440000ea440000eb440000ec440000ed440000ee440000ef440000f0440000f1440000f2440000f3440000f4440000f5440000f6440000f7440000f8440000f9440000fa440000fb440000fc440000fd440000fe440000ff440000004500000145000002450000034500000445000005450000064500000745000008450000094500000a4500000b4500000c4500000d4500000e4500000f450000104500001145000012450000134500001445000015450000164500001745000018450000194500001a4500001b4500001c4500001d4500001e4500001f450000 - m_AlignBytes: 16 - groupID: 158 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 17584 - particle2: 17585 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 17585 - particle2: 17586 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 17586 - particle2: 17587 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 17587 - particle2: 17588 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 17588 - particle2: 17589 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 17589 - particle2: 17590 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 17590 - particle2: 17591 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 17591 - particle2: 17592 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 17592 - particle2: 17593 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 17593 - particle2: 17594 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 17594 - particle2: 17595 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1640435993 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1640435994} - m_Layer: 0 - m_Name: Row (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1640435994 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1640435993} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -1.4} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 938771666} - - {fileID: 1374969021} - - {fileID: 1501728739} - - {fileID: 1297311441} - - {fileID: 1853955320} - - {fileID: 1808557641} - - {fileID: 1923931438} - - {fileID: 386305778} - - {fileID: 452192106} - - {fileID: 1822342381} - m_Father: {fileID: 1027659676} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1646474108 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1646474109} - - component: {fileID: 1646474113} - - component: {fileID: 1646474112} - - component: {fileID: 1646474111} - - component: {fileID: 1646474110} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1646474109 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1646474108} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1628171963} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1646474110 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1646474108} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1646474113} - m_Target: {fileID: 1646474109} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1646474111 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1646474108} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1646474112 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1646474108} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 158 ---- !u!114 &1646474113 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1646474108} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 204500002145000022450000234500002445000025450000264500002745000028450000294500002a4500002b4500002c4500002d4500002e4500002f450000304500003145000032450000334500003445000035450000364500003745000038450000394500003a4500003b4500003c4500003d4500003e4500003f450000404500004145000042450000434500004445000045450000464500004745000048450000494500004a4500004b4500004c4500004d4500004e4500004f450000504500005145000052450000534500005445000055450000564500005745000058450000594500005a4500005b4500005c4500005d4500005e4500005f450000604500006145000062450000634500006445000065450000664500006745000068450000694500006a4500006b4500006c4500006d4500006e4500006f450000704500007145000072450000734500007445000075450000764500007745000078450000794500007a4500007b4500007c4500007d4500007e4500007f450000804500008145000082450000834500008445000085450000864500008745000088450000894500008a4500008b4500008c4500008d4500008e4500008f450000 - m_AlignBytes: 16 - groupID: 159 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 17696 - particle2: 17697 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 17697 - particle2: 17698 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 17698 - particle2: 17699 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 17699 - particle2: 17700 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 17700 - particle2: 17701 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 17701 - particle2: 17702 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 17702 - particle2: 17703 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 17703 - particle2: 17704 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 17704 - particle2: 17705 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 17705 - particle2: 17706 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 17706 - particle2: 17707 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1649225305 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1649225306} - - component: {fileID: 1649225310} - - component: {fileID: 1649225309} - - component: {fileID: 1649225308} - - component: {fileID: 1649225307} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1649225306 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1649225305} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 940408952} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1649225307 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1649225305} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1649225310} - m_Target: {fileID: 1649225306} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1649225308 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1649225305} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1649225309 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1649225305} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 159 ---- !u!114 &1649225310 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1649225305} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 904500009145000092450000934500009445000095450000964500009745000098450000994500009a4500009b4500009c4500009d4500009e4500009f450000a0450000a1450000a2450000a3450000a4450000a5450000a6450000a7450000a8450000a9450000aa450000ab450000ac450000ad450000ae450000af450000b0450000b1450000b2450000b3450000b4450000b5450000b6450000b7450000b8450000b9450000ba450000bb450000bc450000bd450000be450000bf450000c0450000c1450000c2450000c3450000c4450000c5450000c6450000c7450000c8450000c9450000ca450000cb450000cc450000cd450000ce450000cf450000d0450000d1450000d2450000d3450000d4450000d5450000d6450000d7450000d8450000d9450000da450000db450000dc450000dd450000de450000df450000e0450000e1450000e2450000e3450000e4450000e5450000e6450000e7450000e8450000e9450000ea450000eb450000ec450000ed450000ee450000ef450000f0450000f1450000f2450000f3450000f4450000f5450000f6450000f7450000f8450000f9450000fa450000fb450000fc450000fd450000fe450000ff450000 - m_AlignBytes: 16 - groupID: 160 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 17808 - particle2: 17809 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 17809 - particle2: 17810 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 17810 - particle2: 17811 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 17811 - particle2: 17812 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 17812 - particle2: 17813 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 17813 - particle2: 17814 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 17814 - particle2: 17815 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 17815 - particle2: 17816 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 17816 - particle2: 17817 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 17817 - particle2: 17818 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 17818 - particle2: 17819 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1707229807 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1707229808} - - component: {fileID: 1707229812} - - component: {fileID: 1707229811} - - component: {fileID: 1707229810} - - component: {fileID: 1707229809} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1707229808 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1707229807} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 54623967} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1707229809 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1707229807} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1707229812} - m_Target: {fileID: 1707229808} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1707229810 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1707229807} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1707229811 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1707229807} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 160 ---- !u!114 &1707229812 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1707229807} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 004600000146000002460000034600000446000005460000064600000746000008460000094600000a4600000b4600000c4600000d4600000e4600000f460000104600001146000012460000134600001446000015460000164600001746000018460000194600001a4600001b4600001c4600001d4600001e4600001f460000204600002146000022460000234600002446000025460000264600002746000028460000294600002a4600002b4600002c4600002d4600002e4600002f460000304600003146000032460000334600003446000035460000364600003746000038460000394600003a4600003b4600003c4600003d4600003e4600003f460000404600004146000042460000434600004446000045460000464600004746000048460000494600004a4600004b4600004c4600004d4600004e4600004f460000504600005146000052460000534600005446000055460000564600005746000058460000594600005a4600005b4600005c4600005d4600005e4600005f460000604600006146000062460000634600006446000065460000664600006746000068460000694600006a4600006b4600006c4600006d4600006e4600006f460000 - m_AlignBytes: 16 - groupID: 161 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 17920 - particle2: 17921 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 17921 - particle2: 17922 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 17922 - particle2: 17923 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 17923 - particle2: 17924 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 17924 - particle2: 17925 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 17925 - particle2: 17926 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 17926 - particle2: 17927 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 17927 - particle2: 17928 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 17928 - particle2: 17929 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 17929 - particle2: 17930 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 17930 - particle2: 17931 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1734157831 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1734157832} - - component: {fileID: 1734157836} - - component: {fileID: 1734157835} - - component: {fileID: 1734157834} - - component: {fileID: 1734157833} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1734157832 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1734157831} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1628171963} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1734157833 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1734157831} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1734157836} - m_Target: {fileID: 1734157832} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1734157834 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1734157831} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1734157835 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1734157831} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 161 ---- !u!114 &1734157836 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1734157831} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 704600007146000072460000734600007446000075460000764600007746000078460000794600007a4600007b4600007c4600007d4600007e4600007f460000804600008146000082460000834600008446000085460000864600008746000088460000894600008a4600008b4600008c4600008d4600008e4600008f460000904600009146000092460000934600009446000095460000964600009746000098460000994600009a4600009b4600009c4600009d4600009e4600009f460000a0460000a1460000a2460000a3460000a4460000a5460000a6460000a7460000a8460000a9460000aa460000ab460000ac460000ad460000ae460000af460000b0460000b1460000b2460000b3460000b4460000b5460000b6460000b7460000b8460000b9460000ba460000bb460000bc460000bd460000be460000bf460000c0460000c1460000c2460000c3460000c4460000c5460000c6460000c7460000c8460000c9460000ca460000cb460000cc460000cd460000ce460000cf460000d0460000d1460000d2460000d3460000d4460000d5460000d6460000d7460000d8460000d9460000da460000db460000dc460000dd460000de460000df460000 - m_AlignBytes: 16 - groupID: 162 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 18032 - particle2: 18033 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 18033 - particle2: 18034 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 18034 - particle2: 18035 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 18035 - particle2: 18036 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 18036 - particle2: 18037 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 18037 - particle2: 18038 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 18038 - particle2: 18039 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 18039 - particle2: 18040 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 18040 - particle2: 18041 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 18041 - particle2: 18042 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 18042 - particle2: 18043 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1739484932 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1739484933} - - component: {fileID: 1739484937} - - component: {fileID: 1739484936} - - component: {fileID: 1739484935} - - component: {fileID: 1739484934} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1739484933 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1739484932} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 510728467} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1739484934 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1739484932} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1739484937} - m_Target: {fileID: 1739484933} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1739484935 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1739484932} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1739484936 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1739484932} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 162 ---- !u!114 &1739484937 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1739484932} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: e0460000e1460000e2460000e3460000e4460000e5460000e6460000e7460000e8460000e9460000ea460000eb460000ec460000ed460000ee460000ef460000f0460000f1460000f2460000f3460000f4460000f5460000f6460000f7460000f8460000f9460000fa460000fb460000fc460000fd460000fe460000ff460000004700000147000002470000034700000447000005470000064700000747000008470000094700000a4700000b4700000c4700000d4700000e4700000f470000104700001147000012470000134700001447000015470000164700001747000018470000194700001a4700001b4700001c4700001d4700001e4700001f470000204700002147000022470000234700002447000025470000264700002747000028470000294700002a4700002b4700002c4700002d4700002e4700002f470000304700003147000032470000334700003447000035470000364700003747000038470000394700003a4700003b4700003c4700003d4700003e4700003f470000404700004147000042470000434700004447000045470000464700004747000048470000494700004a4700004b4700004c4700004d4700004e4700004f470000 - m_AlignBytes: 16 - groupID: 163 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 18144 - particle2: 18145 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 18145 - particle2: 18146 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 18146 - particle2: 18147 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 18147 - particle2: 18148 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 18148 - particle2: 18149 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 18149 - particle2: 18150 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 18150 - particle2: 18151 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 18151 - particle2: 18152 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 18152 - particle2: 18153 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 18153 - particle2: 18154 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 18154 - particle2: 18155 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1743992357 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1743992358} - - component: {fileID: 1743992362} - - component: {fileID: 1743992361} - - component: {fileID: 1743992360} - - component: {fileID: 1743992359} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1743992358 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1743992357} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 249029318} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1743992359 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1743992357} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1743992362} - m_Target: {fileID: 1743992358} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1743992360 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1743992357} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1743992361 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1743992357} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 163 ---- !u!114 &1743992362 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1743992357} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 504700005147000052470000534700005447000055470000564700005747000058470000594700005a4700005b4700005c4700005d4700005e4700005f470000604700006147000062470000634700006447000065470000664700006747000068470000694700006a4700006b4700006c4700006d4700006e4700006f470000704700007147000072470000734700007447000075470000764700007747000078470000794700007a4700007b4700007c4700007d4700007e4700007f470000804700008147000082470000834700008447000085470000864700008747000088470000894700008a4700008b4700008c4700008d4700008e4700008f470000904700009147000092470000934700009447000095470000964700009747000098470000994700009a4700009b4700009c4700009d4700009e4700009f470000a0470000a1470000a2470000a3470000a4470000a5470000a6470000a7470000a8470000a9470000aa470000ab470000ac470000ad470000ae470000af470000b0470000b1470000b2470000b3470000b4470000b5470000b6470000b7470000b8470000b9470000ba470000bb470000bc470000bd470000be470000bf470000 - m_AlignBytes: 16 - groupID: 164 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 18256 - particle2: 18257 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 18257 - particle2: 18258 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 18258 - particle2: 18259 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 18259 - particle2: 18260 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 18260 - particle2: 18261 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 18261 - particle2: 18262 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 18262 - particle2: 18263 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 18263 - particle2: 18264 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 18264 - particle2: 18265 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 18265 - particle2: 18266 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 18266 - particle2: 18267 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1746497395 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1746497396} - - component: {fileID: 1746497400} - - component: {fileID: 1746497399} - - component: {fileID: 1746497398} - - component: {fileID: 1746497397} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1746497396 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1746497395} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 713844502} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1746497397 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1746497395} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1746497400} - m_Target: {fileID: 1746497396} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1746497398 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1746497395} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1746497399 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1746497395} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 164 ---- !u!114 &1746497400 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1746497395} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: c0470000c1470000c2470000c3470000c4470000c5470000c6470000c7470000c8470000c9470000ca470000cb470000cc470000cd470000ce470000cf470000d0470000d1470000d2470000d3470000d4470000d5470000d6470000d7470000d8470000d9470000da470000db470000dc470000dd470000de470000df470000e0470000e1470000e2470000e3470000e4470000e5470000e6470000e7470000e8470000e9470000ea470000eb470000ec470000ed470000ee470000ef470000f0470000f1470000f2470000f3470000f4470000f5470000f6470000f7470000f8470000f9470000fa470000fb470000fc470000fd470000fe470000ff470000004800000148000002480000034800000448000005480000064800000748000008480000094800000a4800000b4800000c4800000d4800000e4800000f480000104800001148000012480000134800001448000015480000164800001748000018480000194800001a4800001b4800001c4800001d4800001e4800001f480000204800002148000022480000234800002448000025480000264800002748000028480000294800002a4800002b4800002c4800002d4800002e4800002f480000 - m_AlignBytes: 16 - groupID: 165 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 18368 - particle2: 18369 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 18369 - particle2: 18370 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 18370 - particle2: 18371 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 18371 - particle2: 18372 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 18372 - particle2: 18373 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 18373 - particle2: 18374 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 18374 - particle2: 18375 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 18375 - particle2: 18376 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 18376 - particle2: 18377 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 18377 - particle2: 18378 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 18378 - particle2: 18379 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1753057673 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1753057674} - - component: {fileID: 1753057678} - - component: {fileID: 1753057677} - - component: {fileID: 1753057676} - - component: {fileID: 1753057675} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1753057674 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1753057673} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 426164209} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1753057675 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1753057673} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1753057678} - m_Target: {fileID: 1753057674} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1753057676 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1753057673} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1753057677 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1753057673} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 165 ---- !u!114 &1753057678 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1753057673} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 304800003148000032480000334800003448000035480000364800003748000038480000394800003a4800003b4800003c4800003d4800003e4800003f480000404800004148000042480000434800004448000045480000464800004748000048480000494800004a4800004b4800004c4800004d4800004e4800004f480000504800005148000052480000534800005448000055480000564800005748000058480000594800005a4800005b4800005c4800005d4800005e4800005f480000604800006148000062480000634800006448000065480000664800006748000068480000694800006a4800006b4800006c4800006d4800006e4800006f480000704800007148000072480000734800007448000075480000764800007748000078480000794800007a4800007b4800007c4800007d4800007e4800007f480000804800008148000082480000834800008448000085480000864800008748000088480000894800008a4800008b4800008c4800008d4800008e4800008f480000904800009148000092480000934800009448000095480000964800009748000098480000994800009a4800009b4800009c4800009d4800009e4800009f480000 - m_AlignBytes: 16 - groupID: 166 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 18480 - particle2: 18481 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 18481 - particle2: 18482 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 18482 - particle2: 18483 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 18483 - particle2: 18484 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 18484 - particle2: 18485 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 18485 - particle2: 18486 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 18486 - particle2: 18487 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 18487 - particle2: 18488 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 18488 - particle2: 18489 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 18489 - particle2: 18490 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 18490 - particle2: 18491 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1758285765 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1758285766} - - component: {fileID: 1758285770} - - component: {fileID: 1758285769} - - component: {fileID: 1758285768} - - component: {fileID: 1758285767} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1758285766 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1758285765} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1306593279} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1758285767 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1758285765} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1758285770} - m_Target: {fileID: 1758285766} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1758285768 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1758285765} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1758285769 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1758285765} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 166 ---- !u!114 &1758285770 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1758285765} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: a0480000a1480000a2480000a3480000a4480000a5480000a6480000a7480000a8480000a9480000aa480000ab480000ac480000ad480000ae480000af480000b0480000b1480000b2480000b3480000b4480000b5480000b6480000b7480000b8480000b9480000ba480000bb480000bc480000bd480000be480000bf480000c0480000c1480000c2480000c3480000c4480000c5480000c6480000c7480000c8480000c9480000ca480000cb480000cc480000cd480000ce480000cf480000d0480000d1480000d2480000d3480000d4480000d5480000d6480000d7480000d8480000d9480000da480000db480000dc480000dd480000de480000df480000e0480000e1480000e2480000e3480000e4480000e5480000e6480000e7480000e8480000e9480000ea480000eb480000ec480000ed480000ee480000ef480000f0480000f1480000f2480000f3480000f4480000f5480000f6480000f7480000f8480000f9480000fa480000fb480000fc480000fd480000fe480000ff480000004900000149000002490000034900000449000005490000064900000749000008490000094900000a4900000b4900000c4900000d4900000e4900000f490000 - m_AlignBytes: 16 - groupID: 167 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 18592 - particle2: 18593 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 18593 - particle2: 18594 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 18594 - particle2: 18595 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 18595 - particle2: 18596 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 18596 - particle2: 18597 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 18597 - particle2: 18598 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 18598 - particle2: 18599 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 18599 - particle2: 18600 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 18600 - particle2: 18601 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 18601 - particle2: 18602 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 18602 - particle2: 18603 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1760688767 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1760688768} - m_Layer: 0 - m_Name: Group (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1760688768 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1760688767} - serializedVersion: 2 - m_LocalRotation: {x: 0.0008726948, y: 0, z: 0, w: 0.99999964} - m_LocalPosition: {x: -1.11, y: 1.59, z: -0.39} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 940408952} - - {fileID: 1464717035} - - {fileID: 510728467} - - {fileID: 1062536481} - - {fileID: 713844502} - - {fileID: 1977632070} - - {fileID: 54623967} - - {fileID: 648480057} - - {fileID: 426164209} - - {fileID: 1798495239} - m_Father: {fileID: 2102841797} - m_LocalEulerAnglesHint: {x: 0.1, y: 0, z: 0} ---- !u!1 &1771245891 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1771245892} - - component: {fileID: 1771245896} - - component: {fileID: 1771245895} - - component: {fileID: 1771245894} - - component: {fileID: 1771245893} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1771245892 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1771245891} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 713844502} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1771245893 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1771245891} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1771245896} - m_Target: {fileID: 1771245892} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1771245894 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1771245891} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1771245895 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1771245891} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 167 ---- !u!114 &1771245896 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1771245891} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 104900001149000012490000134900001449000015490000164900001749000018490000194900001a4900001b4900001c4900001d4900001e4900001f490000204900002149000022490000234900002449000025490000264900002749000028490000294900002a4900002b4900002c4900002d4900002e4900002f490000304900003149000032490000334900003449000035490000364900003749000038490000394900003a4900003b4900003c4900003d4900003e4900003f490000404900004149000042490000434900004449000045490000464900004749000048490000494900004a4900004b4900004c4900004d4900004e4900004f490000504900005149000052490000534900005449000055490000564900005749000058490000594900005a4900005b4900005c4900005d4900005e4900005f490000604900006149000062490000634900006449000065490000664900006749000068490000694900006a4900006b4900006c4900006d4900006e4900006f490000704900007149000072490000734900007449000075490000764900007749000078490000794900007a4900007b4900007c4900007d4900007e4900007f490000 - m_AlignBytes: 16 - groupID: 168 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 18704 - particle2: 18705 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 18705 - particle2: 18706 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 18706 - particle2: 18707 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 18707 - particle2: 18708 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 18708 - particle2: 18709 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 18709 - particle2: 18710 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 18710 - particle2: 18711 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 18711 - particle2: 18712 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 18712 - particle2: 18713 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 18713 - particle2: 18714 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 18714 - particle2: 18715 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1772381103 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1772381104} - - component: {fileID: 1772381108} - - component: {fileID: 1772381107} - - component: {fileID: 1772381106} - - component: {fileID: 1772381105} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1772381104 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1772381103} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1798495239} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1772381105 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1772381103} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1772381108} - m_Target: {fileID: 1772381104} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1772381106 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1772381103} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1772381107 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1772381103} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 168 ---- !u!114 &1772381108 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1772381103} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 804900008149000082490000834900008449000085490000864900008749000088490000894900008a4900008b4900008c4900008d4900008e4900008f490000904900009149000092490000934900009449000095490000964900009749000098490000994900009a4900009b4900009c4900009d4900009e4900009f490000a0490000a1490000a2490000a3490000a4490000a5490000a6490000a7490000a8490000a9490000aa490000ab490000ac490000ad490000ae490000af490000b0490000b1490000b2490000b3490000b4490000b5490000b6490000b7490000b8490000b9490000ba490000bb490000bc490000bd490000be490000bf490000c0490000c1490000c2490000c3490000c4490000c5490000c6490000c7490000c8490000c9490000ca490000cb490000cc490000cd490000ce490000cf490000d0490000d1490000d2490000d3490000d4490000d5490000d6490000d7490000d8490000d9490000da490000db490000dc490000dd490000de490000df490000e0490000e1490000e2490000e3490000e4490000e5490000e6490000e7490000e8490000e9490000ea490000eb490000ec490000ed490000ee490000ef490000 - m_AlignBytes: 16 - groupID: 169 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 18816 - particle2: 18817 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 18817 - particle2: 18818 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 18818 - particle2: 18819 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 18819 - particle2: 18820 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 18820 - particle2: 18821 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 18821 - particle2: 18822 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 18822 - particle2: 18823 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 18823 - particle2: 18824 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 18824 - particle2: 18825 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 18825 - particle2: 18826 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 18826 - particle2: 18827 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1789705480 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1789705481} - - component: {fileID: 1789705485} - - component: {fileID: 1789705484} - - component: {fileID: 1789705483} - - component: {fileID: 1789705482} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1789705481 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1789705480} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 426164209} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1789705482 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1789705480} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1789705485} - m_Target: {fileID: 1789705481} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1789705483 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1789705480} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1789705484 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1789705480} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 169 ---- !u!114 &1789705485 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1789705480} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: f0490000f1490000f2490000f3490000f4490000f5490000f6490000f7490000f8490000f9490000fa490000fb490000fc490000fd490000fe490000ff490000004a0000014a0000024a0000034a0000044a0000054a0000064a0000074a0000084a0000094a00000a4a00000b4a00000c4a00000d4a00000e4a00000f4a0000104a0000114a0000124a0000134a0000144a0000154a0000164a0000174a0000184a0000194a00001a4a00001b4a00001c4a00001d4a00001e4a00001f4a0000204a0000214a0000224a0000234a0000244a0000254a0000264a0000274a0000284a0000294a00002a4a00002b4a00002c4a00002d4a00002e4a00002f4a0000304a0000314a0000324a0000334a0000344a0000354a0000364a0000374a0000384a0000394a00003a4a00003b4a00003c4a00003d4a00003e4a00003f4a0000404a0000414a0000424a0000434a0000444a0000454a0000464a0000474a0000484a0000494a00004a4a00004b4a00004c4a00004d4a00004e4a00004f4a0000504a0000514a0000524a0000534a0000544a0000554a0000564a0000574a0000584a0000594a00005a4a00005b4a00005c4a00005d4a00005e4a00005f4a0000 - m_AlignBytes: 16 - groupID: 170 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 18928 - particle2: 18929 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 18929 - particle2: 18930 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 18930 - particle2: 18931 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 18931 - particle2: 18932 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 18932 - particle2: 18933 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 18933 - particle2: 18934 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 18934 - particle2: 18935 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 18935 - particle2: 18936 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 18936 - particle2: 18937 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 18937 - particle2: 18938 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 18938 - particle2: 18939 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1796031223 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1796031224} - - component: {fileID: 1796031228} - - component: {fileID: 1796031227} - - component: {fileID: 1796031226} - - component: {fileID: 1796031225} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1796031224 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1796031223} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 54623967} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1796031225 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1796031223} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1796031228} - m_Target: {fileID: 1796031224} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1796031226 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1796031223} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1796031227 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1796031223} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 170 ---- !u!114 &1796031228 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1796031223} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 604a0000614a0000624a0000634a0000644a0000654a0000664a0000674a0000684a0000694a00006a4a00006b4a00006c4a00006d4a00006e4a00006f4a0000704a0000714a0000724a0000734a0000744a0000754a0000764a0000774a0000784a0000794a00007a4a00007b4a00007c4a00007d4a00007e4a00007f4a0000804a0000814a0000824a0000834a0000844a0000854a0000864a0000874a0000884a0000894a00008a4a00008b4a00008c4a00008d4a00008e4a00008f4a0000904a0000914a0000924a0000934a0000944a0000954a0000964a0000974a0000984a0000994a00009a4a00009b4a00009c4a00009d4a00009e4a00009f4a0000a04a0000a14a0000a24a0000a34a0000a44a0000a54a0000a64a0000a74a0000a84a0000a94a0000aa4a0000ab4a0000ac4a0000ad4a0000ae4a0000af4a0000b04a0000b14a0000b24a0000b34a0000b44a0000b54a0000b64a0000b74a0000b84a0000b94a0000ba4a0000bb4a0000bc4a0000bd4a0000be4a0000bf4a0000c04a0000c14a0000c24a0000c34a0000c44a0000c54a0000c64a0000c74a0000c84a0000c94a0000ca4a0000cb4a0000cc4a0000cd4a0000ce4a0000cf4a0000 - m_AlignBytes: 16 - groupID: 171 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 19040 - particle2: 19041 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 19041 - particle2: 19042 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 19042 - particle2: 19043 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 19043 - particle2: 19044 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 19044 - particle2: 19045 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 19045 - particle2: 19046 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 19046 - particle2: 19047 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 19047 - particle2: 19048 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 19048 - particle2: 19049 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 19049 - particle2: 19050 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 19050 - particle2: 19051 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1798495238 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1798495239} - m_Layer: 0 - m_Name: Row (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1798495239 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1798495238} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -1.8} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 258800385} - - {fileID: 23157} - - {fileID: 1479240942} - - {fileID: 765011064} - - {fileID: 1022784183} - - {fileID: 1988484819} - - {fileID: 1632801444} - - {fileID: 469876705} - - {fileID: 1772381104} - - {fileID: 84035660} - m_Father: {fileID: 1760688768} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1808557640 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1808557641} - - component: {fileID: 1808557645} - - component: {fileID: 1808557644} - - component: {fileID: 1808557643} - - component: {fileID: 1808557642} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1808557641 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1808557640} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1640435994} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1808557642 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1808557640} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1808557645} - m_Target: {fileID: 1808557641} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1808557643 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1808557640} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1808557644 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1808557640} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 171 ---- !u!114 &1808557645 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1808557640} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: d04a0000d14a0000d24a0000d34a0000d44a0000d54a0000d64a0000d74a0000d84a0000d94a0000da4a0000db4a0000dc4a0000dd4a0000de4a0000df4a0000e04a0000e14a0000e24a0000e34a0000e44a0000e54a0000e64a0000e74a0000e84a0000e94a0000ea4a0000eb4a0000ec4a0000ed4a0000ee4a0000ef4a0000f04a0000f14a0000f24a0000f34a0000f44a0000f54a0000f64a0000f74a0000f84a0000f94a0000fa4a0000fb4a0000fc4a0000fd4a0000fe4a0000ff4a0000004b0000014b0000024b0000034b0000044b0000054b0000064b0000074b0000084b0000094b00000a4b00000b4b00000c4b00000d4b00000e4b00000f4b0000104b0000114b0000124b0000134b0000144b0000154b0000164b0000174b0000184b0000194b00001a4b00001b4b00001c4b00001d4b00001e4b00001f4b0000204b0000214b0000224b0000234b0000244b0000254b0000264b0000274b0000284b0000294b00002a4b00002b4b00002c4b00002d4b00002e4b00002f4b0000304b0000314b0000324b0000334b0000344b0000354b0000364b0000374b0000384b0000394b00003a4b00003b4b00003c4b00003d4b00003e4b00003f4b0000 - m_AlignBytes: 16 - groupID: 172 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 19152 - particle2: 19153 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 19153 - particle2: 19154 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 19154 - particle2: 19155 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 19155 - particle2: 19156 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 19156 - particle2: 19157 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 19157 - particle2: 19158 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 19158 - particle2: 19159 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 19159 - particle2: 19160 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 19160 - particle2: 19161 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 19161 - particle2: 19162 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 19162 - particle2: 19163 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1812706182 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1812706183} - - component: {fileID: 1812706187} - - component: {fileID: 1812706186} - - component: {fileID: 1812706185} - - component: {fileID: 1812706184} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1812706183 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1812706182} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1241971666} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1812706184 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1812706182} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1812706187} - m_Target: {fileID: 1812706183} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1812706185 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1812706182} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1812706186 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1812706182} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 172 ---- !u!114 &1812706187 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1812706182} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 404b0000414b0000424b0000434b0000444b0000454b0000464b0000474b0000484b0000494b00004a4b00004b4b00004c4b00004d4b00004e4b00004f4b0000504b0000514b0000524b0000534b0000544b0000554b0000564b0000574b0000584b0000594b00005a4b00005b4b00005c4b00005d4b00005e4b00005f4b0000604b0000614b0000624b0000634b0000644b0000654b0000664b0000674b0000684b0000694b00006a4b00006b4b00006c4b00006d4b00006e4b00006f4b0000704b0000714b0000724b0000734b0000744b0000754b0000764b0000774b0000784b0000794b00007a4b00007b4b00007c4b00007d4b00007e4b00007f4b0000804b0000814b0000824b0000834b0000844b0000854b0000864b0000874b0000884b0000894b00008a4b00008b4b00008c4b00008d4b00008e4b00008f4b0000904b0000914b0000924b0000934b0000944b0000954b0000964b0000974b0000984b0000994b00009a4b00009b4b00009c4b00009d4b00009e4b00009f4b0000a04b0000a14b0000a24b0000a34b0000a44b0000a54b0000a64b0000a74b0000a84b0000a94b0000aa4b0000ab4b0000ac4b0000ad4b0000ae4b0000af4b0000 - m_AlignBytes: 16 - groupID: 173 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 19264 - particle2: 19265 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 19265 - particle2: 19266 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 19266 - particle2: 19267 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 19267 - particle2: 19268 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 19268 - particle2: 19269 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 19269 - particle2: 19270 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 19270 - particle2: 19271 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 19271 - particle2: 19272 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 19272 - particle2: 19273 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 19273 - particle2: 19274 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 19274 - particle2: 19275 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1822342380 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1822342381} - - component: {fileID: 1822342385} - - component: {fileID: 1822342384} - - component: {fileID: 1822342383} - - component: {fileID: 1822342382} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1822342381 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1822342380} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1640435994} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1822342382 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1822342380} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1822342385} - m_Target: {fileID: 1822342381} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1822342383 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1822342380} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1822342384 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1822342380} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 173 ---- !u!114 &1822342385 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1822342380} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: b04b0000b14b0000b24b0000b34b0000b44b0000b54b0000b64b0000b74b0000b84b0000b94b0000ba4b0000bb4b0000bc4b0000bd4b0000be4b0000bf4b0000c04b0000c14b0000c24b0000c34b0000c44b0000c54b0000c64b0000c74b0000c84b0000c94b0000ca4b0000cb4b0000cc4b0000cd4b0000ce4b0000cf4b0000d04b0000d14b0000d24b0000d34b0000d44b0000d54b0000d64b0000d74b0000d84b0000d94b0000da4b0000db4b0000dc4b0000dd4b0000de4b0000df4b0000e04b0000e14b0000e24b0000e34b0000e44b0000e54b0000e64b0000e74b0000e84b0000e94b0000ea4b0000eb4b0000ec4b0000ed4b0000ee4b0000ef4b0000f04b0000f14b0000f24b0000f34b0000f44b0000f54b0000f64b0000f74b0000f84b0000f94b0000fa4b0000fb4b0000fc4b0000fd4b0000fe4b0000ff4b0000004c0000014c0000024c0000034c0000044c0000054c0000064c0000074c0000084c0000094c00000a4c00000b4c00000c4c00000d4c00000e4c00000f4c0000104c0000114c0000124c0000134c0000144c0000154c0000164c0000174c0000184c0000194c00001a4c00001b4c00001c4c00001d4c00001e4c00001f4c0000 - m_AlignBytes: 16 - groupID: 174 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 19376 - particle2: 19377 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 19377 - particle2: 19378 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 19378 - particle2: 19379 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 19379 - particle2: 19380 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 19380 - particle2: 19381 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 19381 - particle2: 19382 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 19382 - particle2: 19383 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 19383 - particle2: 19384 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 19384 - particle2: 19385 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 19385 - particle2: 19386 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 19386 - particle2: 19387 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1824546301 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1824546302} - - component: {fileID: 1824546306} - - component: {fileID: 1824546305} - - component: {fileID: 1824546304} - - component: {fileID: 1824546303} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1824546302 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1824546301} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1628171963} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1824546303 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1824546301} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1824546306} - m_Target: {fileID: 1824546302} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1824546304 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1824546301} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1824546305 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1824546301} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 174 ---- !u!114 &1824546306 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1824546301} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 204c0000214c0000224c0000234c0000244c0000254c0000264c0000274c0000284c0000294c00002a4c00002b4c00002c4c00002d4c00002e4c00002f4c0000304c0000314c0000324c0000334c0000344c0000354c0000364c0000374c0000384c0000394c00003a4c00003b4c00003c4c00003d4c00003e4c00003f4c0000404c0000414c0000424c0000434c0000444c0000454c0000464c0000474c0000484c0000494c00004a4c00004b4c00004c4c00004d4c00004e4c00004f4c0000504c0000514c0000524c0000534c0000544c0000554c0000564c0000574c0000584c0000594c00005a4c00005b4c00005c4c00005d4c00005e4c00005f4c0000604c0000614c0000624c0000634c0000644c0000654c0000664c0000674c0000684c0000694c00006a4c00006b4c00006c4c00006d4c00006e4c00006f4c0000704c0000714c0000724c0000734c0000744c0000754c0000764c0000774c0000784c0000794c00007a4c00007b4c00007c4c00007d4c00007e4c00007f4c0000804c0000814c0000824c0000834c0000844c0000854c0000864c0000874c0000884c0000894c00008a4c00008b4c00008c4c00008d4c00008e4c00008f4c0000 - m_AlignBytes: 16 - groupID: 175 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 19488 - particle2: 19489 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 19489 - particle2: 19490 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 19490 - particle2: 19491 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 19491 - particle2: 19492 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 19492 - particle2: 19493 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 19493 - particle2: 19494 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 19494 - particle2: 19495 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 19495 - particle2: 19496 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 19496 - particle2: 19497 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 19497 - particle2: 19498 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 19498 - particle2: 19499 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1853955319 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1853955320} - - component: {fileID: 1853955324} - - component: {fileID: 1853955323} - - component: {fileID: 1853955322} - - component: {fileID: 1853955321} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1853955320 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1853955319} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1640435994} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1853955321 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1853955319} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1853955324} - m_Target: {fileID: 1853955320} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1853955322 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1853955319} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1853955323 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1853955319} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 175 ---- !u!114 &1853955324 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1853955319} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 904c0000914c0000924c0000934c0000944c0000954c0000964c0000974c0000984c0000994c00009a4c00009b4c00009c4c00009d4c00009e4c00009f4c0000a04c0000a14c0000a24c0000a34c0000a44c0000a54c0000a64c0000a74c0000a84c0000a94c0000aa4c0000ab4c0000ac4c0000ad4c0000ae4c0000af4c0000b04c0000b14c0000b24c0000b34c0000b44c0000b54c0000b64c0000b74c0000b84c0000b94c0000ba4c0000bb4c0000bc4c0000bd4c0000be4c0000bf4c0000c04c0000c14c0000c24c0000c34c0000c44c0000c54c0000c64c0000c74c0000c84c0000c94c0000ca4c0000cb4c0000cc4c0000cd4c0000ce4c0000cf4c0000d04c0000d14c0000d24c0000d34c0000d44c0000d54c0000d64c0000d74c0000d84c0000d94c0000da4c0000db4c0000dc4c0000dd4c0000de4c0000df4c0000e04c0000e14c0000e24c0000e34c0000e44c0000e54c0000e64c0000e74c0000e84c0000e94c0000ea4c0000eb4c0000ec4c0000ed4c0000ee4c0000ef4c0000f04c0000f14c0000f24c0000f34c0000f44c0000f54c0000f64c0000f74c0000f84c0000f94c0000fa4c0000fb4c0000fc4c0000fd4c0000fe4c0000ff4c0000 - m_AlignBytes: 16 - groupID: 176 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 19600 - particle2: 19601 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 19601 - particle2: 19602 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 19602 - particle2: 19603 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 19603 - particle2: 19604 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 19604 - particle2: 19605 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 19605 - particle2: 19606 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 19606 - particle2: 19607 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 19607 - particle2: 19608 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 19608 - particle2: 19609 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 19609 - particle2: 19610 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 19610 - particle2: 19611 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1886039166 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1886039167} - - component: {fileID: 1886039171} - - component: {fileID: 1886039170} - - component: {fileID: 1886039169} - - component: {fileID: 1886039168} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1886039167 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1886039166} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1306593279} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1886039168 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1886039166} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1886039171} - m_Target: {fileID: 1886039167} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1886039169 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1886039166} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1886039170 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1886039166} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 176 ---- !u!114 &1886039171 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1886039166} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 004d0000014d0000024d0000034d0000044d0000054d0000064d0000074d0000084d0000094d00000a4d00000b4d00000c4d00000d4d00000e4d00000f4d0000104d0000114d0000124d0000134d0000144d0000154d0000164d0000174d0000184d0000194d00001a4d00001b4d00001c4d00001d4d00001e4d00001f4d0000204d0000214d0000224d0000234d0000244d0000254d0000264d0000274d0000284d0000294d00002a4d00002b4d00002c4d00002d4d00002e4d00002f4d0000304d0000314d0000324d0000334d0000344d0000354d0000364d0000374d0000384d0000394d00003a4d00003b4d00003c4d00003d4d00003e4d00003f4d0000404d0000414d0000424d0000434d0000444d0000454d0000464d0000474d0000484d0000494d00004a4d00004b4d00004c4d00004d4d00004e4d00004f4d0000504d0000514d0000524d0000534d0000544d0000554d0000564d0000574d0000584d0000594d00005a4d00005b4d00005c4d00005d4d00005e4d00005f4d0000604d0000614d0000624d0000634d0000644d0000654d0000664d0000674d0000684d0000694d00006a4d00006b4d00006c4d00006d4d00006e4d00006f4d0000 - m_AlignBytes: 16 - groupID: 177 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 19712 - particle2: 19713 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 19713 - particle2: 19714 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 19714 - particle2: 19715 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 19715 - particle2: 19716 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 19716 - particle2: 19717 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 19717 - particle2: 19718 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 19718 - particle2: 19719 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 19719 - particle2: 19720 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 19720 - particle2: 19721 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 19721 - particle2: 19722 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 19722 - particle2: 19723 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1895783474 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1895783475} - - component: {fileID: 1895783479} - - component: {fileID: 1895783478} - - component: {fileID: 1895783477} - - component: {fileID: 1895783476} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1895783475 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1895783474} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 426164209} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1895783476 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1895783474} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1895783479} - m_Target: {fileID: 1895783475} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1895783477 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1895783474} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1895783478 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1895783474} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 177 ---- !u!114 &1895783479 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1895783474} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 704d0000714d0000724d0000734d0000744d0000754d0000764d0000774d0000784d0000794d00007a4d00007b4d00007c4d00007d4d00007e4d00007f4d0000804d0000814d0000824d0000834d0000844d0000854d0000864d0000874d0000884d0000894d00008a4d00008b4d00008c4d00008d4d00008e4d00008f4d0000904d0000914d0000924d0000934d0000944d0000954d0000964d0000974d0000984d0000994d00009a4d00009b4d00009c4d00009d4d00009e4d00009f4d0000a04d0000a14d0000a24d0000a34d0000a44d0000a54d0000a64d0000a74d0000a84d0000a94d0000aa4d0000ab4d0000ac4d0000ad4d0000ae4d0000af4d0000b04d0000b14d0000b24d0000b34d0000b44d0000b54d0000b64d0000b74d0000b84d0000b94d0000ba4d0000bb4d0000bc4d0000bd4d0000be4d0000bf4d0000c04d0000c14d0000c24d0000c34d0000c44d0000c54d0000c64d0000c74d0000c84d0000c94d0000ca4d0000cb4d0000cc4d0000cd4d0000ce4d0000cf4d0000d04d0000d14d0000d24d0000d34d0000d44d0000d54d0000d64d0000d74d0000d84d0000d94d0000da4d0000db4d0000dc4d0000dd4d0000de4d0000df4d0000 - m_AlignBytes: 16 - groupID: 178 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 19824 - particle2: 19825 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 19825 - particle2: 19826 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 19826 - particle2: 19827 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 19827 - particle2: 19828 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 19828 - particle2: 19829 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 19829 - particle2: 19830 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 19830 - particle2: 19831 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 19831 - particle2: 19832 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 19832 - particle2: 19833 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 19833 - particle2: 19834 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 19834 - particle2: 19835 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1898534084 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1898534085} - - component: {fileID: 1898534089} - - component: {fileID: 1898534088} - - component: {fileID: 1898534087} - - component: {fileID: 1898534086} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1898534085 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1898534084} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 426164209} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1898534086 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1898534084} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1898534089} - m_Target: {fileID: 1898534085} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1898534087 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1898534084} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1898534088 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1898534084} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 178 ---- !u!114 &1898534089 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1898534084} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: e04d0000e14d0000e24d0000e34d0000e44d0000e54d0000e64d0000e74d0000e84d0000e94d0000ea4d0000eb4d0000ec4d0000ed4d0000ee4d0000ef4d0000f04d0000f14d0000f24d0000f34d0000f44d0000f54d0000f64d0000f74d0000f84d0000f94d0000fa4d0000fb4d0000fc4d0000fd4d0000fe4d0000ff4d0000004e0000014e0000024e0000034e0000044e0000054e0000064e0000074e0000084e0000094e00000a4e00000b4e00000c4e00000d4e00000e4e00000f4e0000104e0000114e0000124e0000134e0000144e0000154e0000164e0000174e0000184e0000194e00001a4e00001b4e00001c4e00001d4e00001e4e00001f4e0000204e0000214e0000224e0000234e0000244e0000254e0000264e0000274e0000284e0000294e00002a4e00002b4e00002c4e00002d4e00002e4e00002f4e0000304e0000314e0000324e0000334e0000344e0000354e0000364e0000374e0000384e0000394e00003a4e00003b4e00003c4e00003d4e00003e4e00003f4e0000404e0000414e0000424e0000434e0000444e0000454e0000464e0000474e0000484e0000494e00004a4e00004b4e00004c4e00004d4e00004e4e00004f4e0000 - m_AlignBytes: 16 - groupID: 179 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 19936 - particle2: 19937 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 19937 - particle2: 19938 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 19938 - particle2: 19939 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 19939 - particle2: 19940 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 19940 - particle2: 19941 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 19941 - particle2: 19942 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 19942 - particle2: 19943 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 19943 - particle2: 19944 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 19944 - particle2: 19945 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 19945 - particle2: 19946 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 19946 - particle2: 19947 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1901308915 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1901308916} - - component: {fileID: 1901308920} - - component: {fileID: 1901308919} - - component: {fileID: 1901308918} - - component: {fileID: 1901308917} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1901308916 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1901308915} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1241971666} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1901308917 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1901308915} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1901308920} - m_Target: {fileID: 1901308916} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1901308918 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1901308915} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1901308919 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1901308915} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 179 ---- !u!114 &1901308920 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1901308915} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 504e0000514e0000524e0000534e0000544e0000554e0000564e0000574e0000584e0000594e00005a4e00005b4e00005c4e00005d4e00005e4e00005f4e0000604e0000614e0000624e0000634e0000644e0000654e0000664e0000674e0000684e0000694e00006a4e00006b4e00006c4e00006d4e00006e4e00006f4e0000704e0000714e0000724e0000734e0000744e0000754e0000764e0000774e0000784e0000794e00007a4e00007b4e00007c4e00007d4e00007e4e00007f4e0000804e0000814e0000824e0000834e0000844e0000854e0000864e0000874e0000884e0000894e00008a4e00008b4e00008c4e00008d4e00008e4e00008f4e0000904e0000914e0000924e0000934e0000944e0000954e0000964e0000974e0000984e0000994e00009a4e00009b4e00009c4e00009d4e00009e4e00009f4e0000a04e0000a14e0000a24e0000a34e0000a44e0000a54e0000a64e0000a74e0000a84e0000a94e0000aa4e0000ab4e0000ac4e0000ad4e0000ae4e0000af4e0000b04e0000b14e0000b24e0000b34e0000b44e0000b54e0000b64e0000b74e0000b84e0000b94e0000ba4e0000bb4e0000bc4e0000bd4e0000be4e0000bf4e0000 - m_AlignBytes: 16 - groupID: 180 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 20048 - particle2: 20049 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 20049 - particle2: 20050 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 20050 - particle2: 20051 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 20051 - particle2: 20052 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 20052 - particle2: 20053 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 20053 - particle2: 20054 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 20054 - particle2: 20055 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 20055 - particle2: 20056 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 20056 - particle2: 20057 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 20057 - particle2: 20058 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 20058 - particle2: 20059 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1919837742 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1919837743} - - component: {fileID: 1919837747} - - component: {fileID: 1919837746} - - component: {fileID: 1919837745} - - component: {fileID: 1919837744} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1919837743 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1919837742} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 713844502} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1919837744 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1919837742} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1919837747} - m_Target: {fileID: 1919837743} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1919837745 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1919837742} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1919837746 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1919837742} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 180 ---- !u!114 &1919837747 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1919837742} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: c04e0000c14e0000c24e0000c34e0000c44e0000c54e0000c64e0000c74e0000c84e0000c94e0000ca4e0000cb4e0000cc4e0000cd4e0000ce4e0000cf4e0000d04e0000d14e0000d24e0000d34e0000d44e0000d54e0000d64e0000d74e0000d84e0000d94e0000da4e0000db4e0000dc4e0000dd4e0000de4e0000df4e0000e04e0000e14e0000e24e0000e34e0000e44e0000e54e0000e64e0000e74e0000e84e0000e94e0000ea4e0000eb4e0000ec4e0000ed4e0000ee4e0000ef4e0000f04e0000f14e0000f24e0000f34e0000f44e0000f54e0000f64e0000f74e0000f84e0000f94e0000fa4e0000fb4e0000fc4e0000fd4e0000fe4e0000ff4e0000004f0000014f0000024f0000034f0000044f0000054f0000064f0000074f0000084f0000094f00000a4f00000b4f00000c4f00000d4f00000e4f00000f4f0000104f0000114f0000124f0000134f0000144f0000154f0000164f0000174f0000184f0000194f00001a4f00001b4f00001c4f00001d4f00001e4f00001f4f0000204f0000214f0000224f0000234f0000244f0000254f0000264f0000274f0000284f0000294f00002a4f00002b4f00002c4f00002d4f00002e4f00002f4f0000 - m_AlignBytes: 16 - groupID: 181 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 20160 - particle2: 20161 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 20161 - particle2: 20162 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 20162 - particle2: 20163 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 20163 - particle2: 20164 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 20164 - particle2: 20165 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 20165 - particle2: 20166 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 20166 - particle2: 20167 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 20167 - particle2: 20168 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 20168 - particle2: 20169 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 20169 - particle2: 20170 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 20170 - particle2: 20171 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1923931437 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1923931438} - - component: {fileID: 1923931442} - - component: {fileID: 1923931441} - - component: {fileID: 1923931440} - - component: {fileID: 1923931439} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1923931438 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1923931437} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1640435994} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1923931439 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1923931437} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1923931442} - m_Target: {fileID: 1923931438} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1923931440 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1923931437} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1923931441 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1923931437} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 181 ---- !u!114 &1923931442 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1923931437} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 304f0000314f0000324f0000334f0000344f0000354f0000364f0000374f0000384f0000394f00003a4f00003b4f00003c4f00003d4f00003e4f00003f4f0000404f0000414f0000424f0000434f0000444f0000454f0000464f0000474f0000484f0000494f00004a4f00004b4f00004c4f00004d4f00004e4f00004f4f0000504f0000514f0000524f0000534f0000544f0000554f0000564f0000574f0000584f0000594f00005a4f00005b4f00005c4f00005d4f00005e4f00005f4f0000604f0000614f0000624f0000634f0000644f0000654f0000664f0000674f0000684f0000694f00006a4f00006b4f00006c4f00006d4f00006e4f00006f4f0000704f0000714f0000724f0000734f0000744f0000754f0000764f0000774f0000784f0000794f00007a4f00007b4f00007c4f00007d4f00007e4f00007f4f0000804f0000814f0000824f0000834f0000844f0000854f0000864f0000874f0000884f0000894f00008a4f00008b4f00008c4f00008d4f00008e4f00008f4f0000904f0000914f0000924f0000934f0000944f0000954f0000964f0000974f0000984f0000994f00009a4f00009b4f00009c4f00009d4f00009e4f00009f4f0000 - m_AlignBytes: 16 - groupID: 182 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 20272 - particle2: 20273 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 20273 - particle2: 20274 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 20274 - particle2: 20275 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 20275 - particle2: 20276 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 20276 - particle2: 20277 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 20277 - particle2: 20278 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 20278 - particle2: 20279 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 20279 - particle2: 20280 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 20280 - particle2: 20281 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 20281 - particle2: 20282 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 20282 - particle2: 20283 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1937961234 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1937961235} - - component: {fileID: 1937961239} - - component: {fileID: 1937961238} - - component: {fileID: 1937961237} - - component: {fileID: 1937961236} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1937961235 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1937961234} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1240601735} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1937961236 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1937961234} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1937961239} - m_Target: {fileID: 1937961235} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1937961237 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1937961234} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1937961238 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1937961234} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 182 ---- !u!114 &1937961239 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1937961234} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: a04f0000a14f0000a24f0000a34f0000a44f0000a54f0000a64f0000a74f0000a84f0000a94f0000aa4f0000ab4f0000ac4f0000ad4f0000ae4f0000af4f0000b04f0000b14f0000b24f0000b34f0000b44f0000b54f0000b64f0000b74f0000b84f0000b94f0000ba4f0000bb4f0000bc4f0000bd4f0000be4f0000bf4f0000c04f0000c14f0000c24f0000c34f0000c44f0000c54f0000c64f0000c74f0000c84f0000c94f0000ca4f0000cb4f0000cc4f0000cd4f0000ce4f0000cf4f0000d04f0000d14f0000d24f0000d34f0000d44f0000d54f0000d64f0000d74f0000d84f0000d94f0000da4f0000db4f0000dc4f0000dd4f0000de4f0000df4f0000e04f0000e14f0000e24f0000e34f0000e44f0000e54f0000e64f0000e74f0000e84f0000e94f0000ea4f0000eb4f0000ec4f0000ed4f0000ee4f0000ef4f0000f04f0000f14f0000f24f0000f34f0000f44f0000f54f0000f64f0000f74f0000f84f0000f94f0000fa4f0000fb4f0000fc4f0000fd4f0000fe4f0000ff4f0000005000000150000002500000035000000450000005500000065000000750000008500000095000000a5000000b5000000c5000000d5000000e5000000f500000 - m_AlignBytes: 16 - groupID: 183 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 20384 - particle2: 20385 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 20385 - particle2: 20386 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 20386 - particle2: 20387 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 20387 - particle2: 20388 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 20388 - particle2: 20389 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 20389 - particle2: 20390 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 20390 - particle2: 20391 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 20391 - particle2: 20392 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 20392 - particle2: 20393 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 20393 - particle2: 20394 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 20394 - particle2: 20395 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1946747525 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1946747526} - - component: {fileID: 1946747530} - - component: {fileID: 1946747529} - - component: {fileID: 1946747528} - - component: {fileID: 1946747527} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1946747526 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1946747525} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1628171963} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1946747527 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1946747525} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1946747530} - m_Target: {fileID: 1946747526} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1946747528 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1946747525} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1946747529 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1946747525} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 183 ---- !u!114 &1946747530 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1946747525} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 105000001150000012500000135000001450000015500000165000001750000018500000195000001a5000001b5000001c5000001d5000001e5000001f500000205000002150000022500000235000002450000025500000265000002750000028500000295000002a5000002b5000002c5000002d5000002e5000002f500000305000003150000032500000335000003450000035500000365000003750000038500000395000003a5000003b5000003c5000003d5000003e5000003f500000405000004150000042500000435000004450000045500000465000004750000048500000495000004a5000004b5000004c5000004d5000004e5000004f500000505000005150000052500000535000005450000055500000565000005750000058500000595000005a5000005b5000005c5000005d5000005e5000005f500000605000006150000062500000635000006450000065500000665000006750000068500000695000006a5000006b5000006c5000006d5000006e5000006f500000705000007150000072500000735000007450000075500000765000007750000078500000795000007a5000007b5000007c5000007d5000007e5000007f500000 - m_AlignBytes: 16 - groupID: 184 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 20496 - particle2: 20497 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 20497 - particle2: 20498 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 20498 - particle2: 20499 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 20499 - particle2: 20500 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 20500 - particle2: 20501 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 20501 - particle2: 20502 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 20502 - particle2: 20503 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 20503 - particle2: 20504 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 20504 - particle2: 20505 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 20505 - particle2: 20506 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 20506 - particle2: 20507 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1948354617 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1948354618} - - component: {fileID: 1948354622} - - component: {fileID: 1948354621} - - component: {fileID: 1948354620} - - component: {fileID: 1948354619} - m_Layer: 0 - m_Name: Obi Rope (4) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1948354618 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1948354617} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 426164209} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1948354619 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1948354617} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1948354622} - m_Target: {fileID: 1948354618} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1948354620 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1948354617} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1948354621 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1948354617} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 184 ---- !u!114 &1948354622 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1948354617} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 805000008150000082500000835000008450000085500000865000008750000088500000895000008a5000008b5000008c5000008d5000008e5000008f500000905000009150000092500000935000009450000095500000965000009750000098500000995000009a5000009b5000009c5000009d5000009e5000009f500000a0500000a1500000a2500000a3500000a4500000a5500000a6500000a7500000a8500000a9500000aa500000ab500000ac500000ad500000ae500000af500000b0500000b1500000b2500000b3500000b4500000b5500000b6500000b7500000b8500000b9500000ba500000bb500000bc500000bd500000be500000bf500000c0500000c1500000c2500000c3500000c4500000c5500000c6500000c7500000c8500000c9500000ca500000cb500000cc500000cd500000ce500000cf500000d0500000d1500000d2500000d3500000d4500000d5500000d6500000d7500000d8500000d9500000da500000db500000dc500000dd500000de500000df500000e0500000e1500000e2500000e3500000e4500000e5500000e6500000e7500000e8500000e9500000ea500000eb500000ec500000ed500000ee500000ef500000 - m_AlignBytes: 16 - groupID: 185 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 20608 - particle2: 20609 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 20609 - particle2: 20610 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 20610 - particle2: 20611 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 20611 - particle2: 20612 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 20612 - particle2: 20613 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 20613 - particle2: 20614 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 20614 - particle2: 20615 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 20615 - particle2: 20616 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 20616 - particle2: 20617 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 20617 - particle2: 20618 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 20618 - particle2: 20619 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1948398664 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1948398665} - - component: {fileID: 1948398669} - - component: {fileID: 1948398668} - - component: {fileID: 1948398667} - - component: {fileID: 1948398666} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1948398665 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1948398664} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 893001395} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1948398666 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1948398664} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1948398669} - m_Target: {fileID: 1948398665} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1948398667 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1948398664} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1948398668 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1948398664} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 185 ---- !u!114 &1948398669 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1948398664} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: f0500000f1500000f2500000f3500000f4500000f5500000f6500000f7500000f8500000f9500000fa500000fb500000fc500000fd500000fe500000ff500000005100000151000002510000035100000451000005510000065100000751000008510000095100000a5100000b5100000c5100000d5100000e5100000f510000105100001151000012510000135100001451000015510000165100001751000018510000195100001a5100001b5100001c5100001d5100001e5100001f510000205100002151000022510000235100002451000025510000265100002751000028510000295100002a5100002b5100002c5100002d5100002e5100002f510000305100003151000032510000335100003451000035510000365100003751000038510000395100003a5100003b5100003c5100003d5100003e5100003f510000405100004151000042510000435100004451000045510000465100004751000048510000495100004a5100004b5100004c5100004d5100004e5100004f510000505100005151000052510000535100005451000055510000565100005751000058510000595100005a5100005b5100005c5100005d5100005e5100005f510000 - m_AlignBytes: 16 - groupID: 186 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 20720 - particle2: 20721 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 20721 - particle2: 20722 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 20722 - particle2: 20723 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 20723 - particle2: 20724 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 20724 - particle2: 20725 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 20725 - particle2: 20726 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 20726 - particle2: 20727 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 20727 - particle2: 20728 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 20728 - particle2: 20729 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 20729 - particle2: 20730 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 20730 - particle2: 20731 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1964761413 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1964761414} - - component: {fileID: 1964761418} - - component: {fileID: 1964761417} - - component: {fileID: 1964761416} - - component: {fileID: 1964761415} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1964761414 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1964761413} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1306593279} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1964761415 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1964761413} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1964761418} - m_Target: {fileID: 1964761414} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1964761416 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1964761413} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1964761417 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1964761413} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 186 ---- !u!114 &1964761418 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1964761413} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 605100006151000062510000635100006451000065510000665100006751000068510000695100006a5100006b5100006c5100006d5100006e5100006f510000705100007151000072510000735100007451000075510000765100007751000078510000795100007a5100007b5100007c5100007d5100007e5100007f510000805100008151000082510000835100008451000085510000865100008751000088510000895100008a5100008b5100008c5100008d5100008e5100008f510000905100009151000092510000935100009451000095510000965100009751000098510000995100009a5100009b5100009c5100009d5100009e5100009f510000a0510000a1510000a2510000a3510000a4510000a5510000a6510000a7510000a8510000a9510000aa510000ab510000ac510000ad510000ae510000af510000b0510000b1510000b2510000b3510000b4510000b5510000b6510000b7510000b8510000b9510000ba510000bb510000bc510000bd510000be510000bf510000c0510000c1510000c2510000c3510000c4510000c5510000c6510000c7510000c8510000c9510000ca510000cb510000cc510000cd510000ce510000cf510000 - m_AlignBytes: 16 - groupID: 187 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 20832 - particle2: 20833 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 20833 - particle2: 20834 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 20834 - particle2: 20835 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 20835 - particle2: 20836 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 20836 - particle2: 20837 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 20837 - particle2: 20838 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 20838 - particle2: 20839 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 20839 - particle2: 20840 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 20840 - particle2: 20841 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 20841 - particle2: 20842 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 20842 - particle2: 20843 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1970184122 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1970184123} - - component: {fileID: 1970184127} - - component: {fileID: 1970184126} - - component: {fileID: 1970184125} - - component: {fileID: 1970184124} - m_Layer: 0 - m_Name: Obi Rope (8) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1970184123 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1970184122} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1464717035} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1970184124 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1970184122} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1970184127} - m_Target: {fileID: 1970184123} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1970184125 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1970184122} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1970184126 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1970184122} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 187 ---- !u!114 &1970184127 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1970184122} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: d0510000d1510000d2510000d3510000d4510000d5510000d6510000d7510000d8510000d9510000da510000db510000dc510000dd510000de510000df510000e0510000e1510000e2510000e3510000e4510000e5510000e6510000e7510000e8510000e9510000ea510000eb510000ec510000ed510000ee510000ef510000f0510000f1510000f2510000f3510000f4510000f5510000f6510000f7510000f8510000f9510000fa510000fb510000fc510000fd510000fe510000ff510000005200000152000002520000035200000452000005520000065200000752000008520000095200000a5200000b5200000c5200000d5200000e5200000f520000105200001152000012520000135200001452000015520000165200001752000018520000195200001a5200001b5200001c5200001d5200001e5200001f520000205200002152000022520000235200002452000025520000265200002752000028520000295200002a5200002b5200002c5200002d5200002e5200002f520000305200003152000032520000335200003452000035520000365200003752000038520000395200003a5200003b5200003c5200003d5200003e5200003f520000 - m_AlignBytes: 16 - groupID: 188 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 20944 - particle2: 20945 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 20945 - particle2: 20946 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 20946 - particle2: 20947 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 20947 - particle2: 20948 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 20948 - particle2: 20949 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 20949 - particle2: 20950 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 20950 - particle2: 20951 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 20951 - particle2: 20952 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 20952 - particle2: 20953 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 20953 - particle2: 20954 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 20954 - particle2: 20955 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1977632069 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1977632070} - m_Layer: 0 - m_Name: Row (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1977632070 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1977632069} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -1} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1600426037} - - {fileID: 1001012758} - - {fileID: 274966134} - - {fileID: 1189976174} - - {fileID: 1634777944} - - {fileID: 489080965} - - {fileID: 535373372} - - {fileID: 399904146} - - {fileID: 557556286} - - {fileID: 1472901347} - m_Father: {fileID: 1760688768} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1988484818 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1988484819} - - component: {fileID: 1988484823} - - component: {fileID: 1988484822} - - component: {fileID: 1988484821} - - component: {fileID: 1988484820} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1988484819 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1988484818} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1798495239} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1988484820 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1988484818} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1988484823} - m_Target: {fileID: 1988484819} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1988484821 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1988484818} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1988484822 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1988484818} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 188 ---- !u!114 &1988484823 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1988484818} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 405200004152000042520000435200004452000045520000465200004752000048520000495200004a5200004b5200004c5200004d5200004e5200004f520000505200005152000052520000535200005452000055520000565200005752000058520000595200005a5200005b5200005c5200005d5200005e5200005f520000605200006152000062520000635200006452000065520000665200006752000068520000695200006a5200006b5200006c5200006d5200006e5200006f520000705200007152000072520000735200007452000075520000765200007752000078520000795200007a5200007b5200007c5200007d5200007e5200007f520000805200008152000082520000835200008452000085520000865200008752000088520000895200008a5200008b5200008c5200008d5200008e5200008f520000905200009152000092520000935200009452000095520000965200009752000098520000995200009a5200009b5200009c5200009d5200009e5200009f520000a0520000a1520000a2520000a3520000a4520000a5520000a6520000a7520000a8520000a9520000aa520000ab520000ac520000ad520000ae520000af520000 - m_AlignBytes: 16 - groupID: 189 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 21056 - particle2: 21057 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 21057 - particle2: 21058 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 21058 - particle2: 21059 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 21059 - particle2: 21060 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 21060 - particle2: 21061 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 21061 - particle2: 21062 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 21062 - particle2: 21063 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 21063 - particle2: 21064 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 21064 - particle2: 21065 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 21065 - particle2: 21066 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 21066 - particle2: 21067 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &1994012441 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1994012442} - - component: {fileID: 1994012446} - - component: {fileID: 1994012445} - - component: {fileID: 1994012444} - - component: {fileID: 1994012443} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1994012442 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1994012441} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 779073863} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &1994012443 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1994012441} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 1994012446} - m_Target: {fileID: 1994012442} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &1994012444 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1994012441} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &1994012445 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1994012441} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 189 ---- !u!114 &1994012446 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1994012441} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: b0520000b1520000b2520000b3520000b4520000b5520000b6520000b7520000b8520000b9520000ba520000bb520000bc520000bd520000be520000bf520000c0520000c1520000c2520000c3520000c4520000c5520000c6520000c7520000c8520000c9520000ca520000cb520000cc520000cd520000ce520000cf520000d0520000d1520000d2520000d3520000d4520000d5520000d6520000d7520000d8520000d9520000da520000db520000dc520000dd520000de520000df520000e0520000e1520000e2520000e3520000e4520000e5520000e6520000e7520000e8520000e9520000ea520000eb520000ec520000ed520000ee520000ef520000f0520000f1520000f2520000f3520000f4520000f5520000f6520000f7520000f8520000f9520000fa520000fb520000fc520000fd520000fe520000ff520000005300000153000002530000035300000453000005530000065300000753000008530000095300000a5300000b5300000c5300000d5300000e5300000f530000105300001153000012530000135300001453000015530000165300001753000018530000195300001a5300001b5300001c5300001d5300001e5300001f530000 - m_AlignBytes: 16 - groupID: 190 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 21168 - particle2: 21169 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 21169 - particle2: 21170 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 21170 - particle2: 21171 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 21171 - particle2: 21172 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 21172 - particle2: 21173 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 21173 - particle2: 21174 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 21174 - particle2: 21175 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 21175 - particle2: 21176 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 21176 - particle2: 21177 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 21177 - particle2: 21178 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 21178 - particle2: 21179 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &2009678976 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2009678977} - m_Layer: 0 - m_Name: Row - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2009678977 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2009678976} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 163656624} - - {fileID: 2054724672} - - {fileID: 964498383} - - {fileID: 666418979} - - {fileID: 769380902} - - {fileID: 1437781649} - - {fileID: 1061430265} - - {fileID: 161507646} - - {fileID: 824780549} - - {fileID: 347068007} - m_Father: {fileID: 1027659676} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2017265026 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2017265027} - - component: {fileID: 2017265031} - - component: {fileID: 2017265030} - - component: {fileID: 2017265029} - - component: {fileID: 2017265028} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2017265027 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2017265026} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 713844502} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &2017265028 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2017265026} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 2017265031} - m_Target: {fileID: 2017265027} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &2017265029 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2017265026} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &2017265030 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2017265026} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 190 ---- !u!114 &2017265031 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2017265026} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 205300002153000022530000235300002453000025530000265300002753000028530000295300002a5300002b5300002c5300002d5300002e5300002f530000305300003153000032530000335300003453000035530000365300003753000038530000395300003a5300003b5300003c5300003d5300003e5300003f530000405300004153000042530000435300004453000045530000465300004753000048530000495300004a5300004b5300004c5300004d5300004e5300004f530000505300005153000052530000535300005453000055530000565300005753000058530000595300005a5300005b5300005c5300005d5300005e5300005f530000605300006153000062530000635300006453000065530000665300006753000068530000695300006a5300006b5300006c5300006d5300006e5300006f530000705300007153000072530000735300007453000075530000765300007753000078530000795300007a5300007b5300007c5300007d5300007e5300007f530000805300008153000082530000835300008453000085530000865300008753000088530000895300008a5300008b5300008c5300008d5300008e5300008f530000 - m_AlignBytes: 16 - groupID: 191 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 21280 - particle2: 21281 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 21281 - particle2: 21282 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 21282 - particle2: 21283 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 21283 - particle2: 21284 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 21284 - particle2: 21285 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 21285 - particle2: 21286 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 21286 - particle2: 21287 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 21287 - particle2: 21288 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 21288 - particle2: 21289 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 21289 - particle2: 21290 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 21290 - particle2: 21291 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &2028909268 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2028909269} - - component: {fileID: 2028909273} - - component: {fileID: 2028909272} - - component: {fileID: 2028909271} - - component: {fileID: 2028909270} - m_Layer: 0 - m_Name: Obi Rope - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2028909269 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2028909268} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 893001395} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &2028909270 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2028909268} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 2028909273} - m_Target: {fileID: 2028909269} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &2028909271 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2028909268} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &2028909272 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2028909268} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 191 ---- !u!114 &2028909273 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2028909268} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 905300009153000092530000935300009453000095530000965300009753000098530000995300009a5300009b5300009c5300009d5300009e5300009f530000a0530000a1530000a2530000a3530000a4530000a5530000a6530000a7530000a8530000a9530000aa530000ab530000ac530000ad530000ae530000af530000b0530000b1530000b2530000b3530000b4530000b5530000b6530000b7530000b8530000b9530000ba530000bb530000bc530000bd530000be530000bf530000c0530000c1530000c2530000c3530000c4530000c5530000c6530000c7530000c8530000c9530000ca530000cb530000cc530000cd530000ce530000cf530000d0530000d1530000d2530000d3530000d4530000d5530000d6530000d7530000d8530000d9530000da530000db530000dc530000dd530000de530000df530000e0530000e1530000e2530000e3530000e4530000e5530000e6530000e7530000e8530000e9530000ea530000eb530000ec530000ed530000ee530000ef530000f0530000f1530000f2530000f3530000f4530000f5530000f6530000f7530000f8530000f9530000fa530000fb530000fc530000fd530000fe530000ff530000 - m_AlignBytes: 16 - groupID: 192 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 21392 - particle2: 21393 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 21393 - particle2: 21394 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 21394 - particle2: 21395 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 21395 - particle2: 21396 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 21396 - particle2: 21397 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 21397 - particle2: 21398 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 21398 - particle2: 21399 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 21399 - particle2: 21400 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 21400 - particle2: 21401 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 21401 - particle2: 21402 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 21402 - particle2: 21403 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &2033391598 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2033391599} - - component: {fileID: 2033391603} - - component: {fileID: 2033391602} - - component: {fileID: 2033391601} - - component: {fileID: 2033391600} - m_Layer: 0 - m_Name: Obi Rope (9) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2033391599 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2033391598} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.8, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 940408952} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &2033391600 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2033391598} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 2033391603} - m_Target: {fileID: 2033391599} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &2033391601 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2033391598} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &2033391602 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2033391598} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 192 ---- !u!114 &2033391603 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2033391598} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 005400000154000002540000035400000454000005540000065400000754000008540000095400000a5400000b5400000c5400000d5400000e5400000f540000105400001154000012540000135400001454000015540000165400001754000018540000195400001a5400001b5400001c5400001d5400001e5400001f540000205400002154000022540000235400002454000025540000265400002754000028540000295400002a5400002b5400002c5400002d5400002e5400002f540000305400003154000032540000335400003454000035540000365400003754000038540000395400003a5400003b5400003c5400003d5400003e5400003f540000405400004154000042540000435400004454000045540000465400004754000048540000495400004a5400004b5400004c5400004d5400004e5400004f540000505400005154000052540000535400005454000055540000565400005754000058540000595400005a5400005b5400005c5400005d5400005e5400005f540000605400006154000062540000635400006454000065540000665400006754000068540000695400006a5400006b5400006c5400006d5400006e5400006f540000 - m_AlignBytes: 16 - groupID: 193 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 21504 - particle2: 21505 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 21505 - particle2: 21506 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 21506 - particle2: 21507 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 21507 - particle2: 21508 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 21508 - particle2: 21509 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 21509 - particle2: 21510 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 21510 - particle2: 21511 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 21511 - particle2: 21512 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 21512 - particle2: 21513 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 21513 - particle2: 21514 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 21514 - particle2: 21515 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &2039851349 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2039851350} - - component: {fileID: 2039851354} - - component: {fileID: 2039851353} - - component: {fileID: 2039851352} - - component: {fileID: 2039851351} - m_Layer: 0 - m_Name: Obi Rope (2) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2039851350 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2039851349} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 54623967} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &2039851351 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2039851349} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 2039851354} - m_Target: {fileID: 2039851350} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &2039851352 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2039851349} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &2039851353 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2039851349} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 193 ---- !u!114 &2039851354 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2039851349} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 705400007154000072540000735400007454000075540000765400007754000078540000795400007a5400007b5400007c5400007d5400007e5400007f540000805400008154000082540000835400008454000085540000865400008754000088540000895400008a5400008b5400008c5400008d5400008e5400008f540000905400009154000092540000935400009454000095540000965400009754000098540000995400009a5400009b5400009c5400009d5400009e5400009f540000a0540000a1540000a2540000a3540000a4540000a5540000a6540000a7540000a8540000a9540000aa540000ab540000ac540000ad540000ae540000af540000b0540000b1540000b2540000b3540000b4540000b5540000b6540000b7540000b8540000b9540000ba540000bb540000bc540000bd540000be540000bf540000c0540000c1540000c2540000c3540000c4540000c5540000c6540000c7540000c8540000c9540000ca540000cb540000cc540000cd540000ce540000cf540000d0540000d1540000d2540000d3540000d4540000d5540000d6540000d7540000d8540000d9540000da540000db540000dc540000dd540000de540000df540000 - m_AlignBytes: 16 - groupID: 194 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 21616 - particle2: 21617 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 21617 - particle2: 21618 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 21618 - particle2: 21619 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 21619 - particle2: 21620 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 21620 - particle2: 21621 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 21621 - particle2: 21622 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 21622 - particle2: 21623 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 21623 - particle2: 21624 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 21624 - particle2: 21625 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 21625 - particle2: 21626 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 21626 - particle2: 21627 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &2054724671 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2054724672} - - component: {fileID: 2054724676} - - component: {fileID: 2054724675} - - component: {fileID: 2054724674} - - component: {fileID: 2054724673} - m_Layer: 0 - m_Name: Obi Rope (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2054724672 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2054724671} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 2009678977} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &2054724673 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2054724671} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 2054724676} - m_Target: {fileID: 2054724672} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &2054724674 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2054724671} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &2054724675 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2054724671} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 194 ---- !u!114 &2054724676 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2054724671} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: e0540000e1540000e2540000e3540000e4540000e5540000e6540000e7540000e8540000e9540000ea540000eb540000ec540000ed540000ee540000ef540000f0540000f1540000f2540000f3540000f4540000f5540000f6540000f7540000f8540000f9540000fa540000fb540000fc540000fd540000fe540000ff540000005500000155000002550000035500000455000005550000065500000755000008550000095500000a5500000b5500000c5500000d5500000e5500000f550000105500001155000012550000135500001455000015550000165500001755000018550000195500001a5500001b5500001c5500001d5500001e5500001f550000205500002155000022550000235500002455000025550000265500002755000028550000295500002a5500002b5500002c5500002d5500002e5500002f550000305500003155000032550000335500003455000035550000365500003755000038550000395500003a5500003b5500003c5500003d5500003e5500003f550000405500004155000042550000435500004455000045550000465500004755000048550000495500004a5500004b5500004c5500004d5500004e5500004f550000 - m_AlignBytes: 16 - groupID: 195 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 21728 - particle2: 21729 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 21729 - particle2: 21730 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 21730 - particle2: 21731 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 21731 - particle2: 21732 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 21732 - particle2: 21733 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 21733 - particle2: 21734 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 21734 - particle2: 21735 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 21735 - particle2: 21736 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 21736 - particle2: 21737 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 21737 - particle2: 21738 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 21738 - particle2: 21739 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &2058503949 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2058503950} - - component: {fileID: 2058503954} - - component: {fileID: 2058503953} - - component: {fileID: 2058503952} - - component: {fileID: 2058503951} - m_Layer: 0 - m_Name: Obi Rope (7) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2058503950 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2058503949} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.4, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1062536481} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &2058503951 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2058503949} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 2058503954} - m_Target: {fileID: 2058503950} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &2058503952 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2058503949} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &2058503953 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2058503949} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 195 ---- !u!114 &2058503954 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2058503949} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 505500005155000052550000535500005455000055550000565500005755000058550000595500005a5500005b5500005c5500005d5500005e5500005f550000605500006155000062550000635500006455000065550000665500006755000068550000695500006a5500006b5500006c5500006d5500006e5500006f550000705500007155000072550000735500007455000075550000765500007755000078550000795500007a5500007b5500007c5500007d5500007e5500007f550000805500008155000082550000835500008455000085550000865500008755000088550000895500008a5500008b5500008c5500008d5500008e5500008f550000905500009155000092550000935500009455000095550000965500009755000098550000995500009a5500009b5500009c5500009d5500009e5500009f550000a0550000a1550000a2550000a3550000a4550000a5550000a6550000a7550000a8550000a9550000aa550000ab550000ac550000ad550000ae550000af550000b0550000b1550000b2550000b3550000b4550000b5550000b6550000b7550000b8550000b9550000ba550000bb550000bc550000bd550000be550000bf550000 - m_AlignBytes: 16 - groupID: 196 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 21840 - particle2: 21841 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 21841 - particle2: 21842 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 21842 - particle2: 21843 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 21843 - particle2: 21844 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 21844 - particle2: 21845 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 21845 - particle2: 21846 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 21846 - particle2: 21847 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 21847 - particle2: 21848 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 21848 - particle2: 21849 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 21849 - particle2: 21850 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 21850 - particle2: 21851 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &2064178987 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2064178989} - - component: {fileID: 2064178988} - m_Layer: 0 - m_Name: ComputeCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &2064178988 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2064178987} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ce0ddc77554954cd78643d83b0505396, type: 3} - m_Name: - m_EditorClassIdentifier: Obi::Obi.ComputeColliderWorld ---- !u!4 &2064178989 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2064178987} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2078944945 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2078944946} - - component: {fileID: 2078944950} - - component: {fileID: 2078944949} - - component: {fileID: 2078944948} - - component: {fileID: 2078944947} - m_Layer: 0 - m_Name: Obi Rope (5) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2078944946 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2078944945} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 426164209} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &2078944947 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2078944945} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 2078944950} - m_Target: {fileID: 2078944946} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &2078944948 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2078944945} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &2078944949 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2078944945} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 196 ---- !u!114 &2078944950 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2078944945} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: c0550000c1550000c2550000c3550000c4550000c5550000c6550000c7550000c8550000c9550000ca550000cb550000cc550000cd550000ce550000cf550000d0550000d1550000d2550000d3550000d4550000d5550000d6550000d7550000d8550000d9550000da550000db550000dc550000dd550000de550000df550000e0550000e1550000e2550000e3550000e4550000e5550000e6550000e7550000e8550000e9550000ea550000eb550000ec550000ed550000ee550000ef550000f0550000f1550000f2550000f3550000f4550000f5550000f6550000f7550000f8550000f9550000fa550000fb550000fc550000fd550000fe550000ff550000005600000156000002560000035600000456000005560000065600000756000008560000095600000a5600000b5600000c5600000d5600000e5600000f560000105600001156000012560000135600001456000015560000165600001756000018560000195600001a5600001b5600001c5600001d5600001e5600001f560000205600002156000022560000235600002456000025560000265600002756000028560000295600002a5600002b5600002c5600002d5600002e5600002f560000 - m_AlignBytes: 16 - groupID: 197 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 21952 - particle2: 21953 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 21953 - particle2: 21954 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 21954 - particle2: 21955 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 21955 - particle2: 21956 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 21956 - particle2: 21957 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 21957 - particle2: 21958 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 21958 - particle2: 21959 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 21959 - particle2: 21960 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 21960 - particle2: 21961 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 21961 - particle2: 21962 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 21962 - particle2: 21963 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &2102841794 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2102841797} - - component: {fileID: 2102841796} - m_Layer: 0 - m_Name: Obi Solver - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &2102841796 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2102841794} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9d174fab52f0c4b8399f25d5c3ea524c, type: 3} - m_Name: - m_EditorClassIdentifier: - simulateWhenInvisible: 1 - m_Backend: 0 - substeps: 2 - maxStepsPerFrame: 1 - synchronization: 0 - parameters: - mode: 0 - interpolation: 0 - gravity: {x: 0, y: -9.81, z: 0} - ambientWind: {x: 0, y: 0, z: 0} - foamGravityScale: 1 - damping: 0 - maxAnisotropy: 3 - sleepThreshold: 0.001 - maxVelocity: 50 - maxAngularVelocity: 10 - collisionMargin: 0.02 - maxDepenetration: 5 - colliderCCD: 1 - particleCCD: 0 - shockPropagation: 0 - surfaceCollisionIterations: 8 - surfaceCollisionTolerance: 0.005 - diffusionMask: {x: 1, y: 1, z: 1, w: 1} - m_MaxSurfaceChunks: 32768 - maxQueryResults: 8192 - maxFoamParticles: 8192 - maxParticleNeighbors: 128 - maxParticleContacts: 6 - useLimits: 0 - killOffLimitsParticles: 0 - boundaryLimits: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 5, y: 5, z: 5} - gravity: {x: 0, y: -9.81, z: 0} - gravitySpace: 1 - ambientWind: {x: 0, y: 0, z: 0} - windSpace: 1 - foamSubsteps: 1 - foamMinNeighbors: 3 - foamCollisions: 0 - maxFoamVelocityStretch: 0.3 - foamRadiusScale: 1 - foamFade: {x: 0.05, y: 0.8} - foamAccelAgingRange: {x: 0.5, y: 0.8} - foamAccelAging: 4 - foamVolumeDensity: 0.1 - foamAmbientDensity: 0.02 - foamScatterColor: {r: 0.8, g: 0.75, b: 0.7, a: 1} - foamAmbientColor: {r: 0.4, g: 0.5, b: 0.6, a: 1} - worldLinearInertiaScale: 0 - worldAngularInertiaScale: 0 - synchronousSpatialQueries: 0 - distanceConstraintParameters: - evaluationOrder: 0 - iterations: 1 - SORFactor: 1 - enabled: 1 - bendingConstraintParameters: - evaluationOrder: 0 - iterations: 1 - SORFactor: 1 - enabled: 1 - particleCollisionConstraintParameters: - evaluationOrder: 1 - iterations: 1 - SORFactor: 1 - enabled: 1 - particleFrictionConstraintParameters: - evaluationOrder: 1 - iterations: 1 - SORFactor: 1 - enabled: 1 - collisionConstraintParameters: - evaluationOrder: 1 - iterations: 1 - SORFactor: 1 - enabled: 1 - frictionConstraintParameters: - evaluationOrder: 1 - iterations: 1 - SORFactor: 1 - enabled: 1 - skinConstraintParameters: - evaluationOrder: 0 - iterations: 3 - SORFactor: 1 - enabled: 0 - volumeConstraintParameters: - evaluationOrder: 1 - iterations: 3 - SORFactor: 1 - enabled: 0 - shapeMatchingConstraintParameters: - evaluationOrder: 1 - iterations: 3 - SORFactor: 1 - enabled: 0 - tetherConstraintParameters: - evaluationOrder: 1 - iterations: 2 - SORFactor: 1 - enabled: 0 - pinConstraintParameters: - evaluationOrder: 0 - iterations: 1 - SORFactor: 1 - enabled: 1 - pinholeConstraintParameters: - evaluationOrder: 1 - iterations: 1 - SORFactor: 1 - enabled: 1 - stitchConstraintParameters: - evaluationOrder: 1 - iterations: 5 - SORFactor: 1 - enabled: 0 - densityConstraintParameters: - evaluationOrder: 1 - iterations: 2 - SORFactor: 1 - enabled: 0 - stretchShearConstraintParameters: - evaluationOrder: 0 - iterations: 10 - SORFactor: 1 - enabled: 0 - bendTwistConstraintParameters: - evaluationOrder: 0 - iterations: 20 - SORFactor: 1 - enabled: 0 - chainConstraintParameters: - evaluationOrder: 0 - iterations: 3 - SORFactor: 1 - enabled: 0 ---- !u!4 &2102841797 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2102841794} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1027659676} - - {fileID: 1760688768} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &2120568195 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2120568196} - - component: {fileID: 2120568200} - - component: {fileID: 2120568199} - - component: {fileID: 2120568198} - - component: {fileID: 2120568197} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2120568196 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2120568195} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 54623967} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &2120568197 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2120568195} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 2120568200} - m_Target: {fileID: 2120568196} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &2120568198 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2120568195} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &2120568199 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2120568195} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 197 ---- !u!114 &2120568200 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2120568195} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 305600003156000032560000335600003456000035560000365600003756000038560000395600003a5600003b5600003c5600003d5600003e5600003f560000405600004156000042560000435600004456000045560000465600004756000048560000495600004a5600004b5600004c5600004d5600004e5600004f560000505600005156000052560000535600005456000055560000565600005756000058560000595600005a5600005b5600005c5600005d5600005e5600005f560000605600006156000062560000635600006456000065560000665600006756000068560000695600006a5600006b5600006c5600006d5600006e5600006f560000705600007156000072560000735600007456000075560000765600007756000078560000795600007a5600007b5600007c5600007d5600007e5600007f560000805600008156000082560000835600008456000085560000865600008756000088560000895600008a5600008b5600008c5600008d5600008e5600008f560000905600009156000092560000935600009456000095560000965600009756000098560000995600009a5600009b5600009c5600009d5600009e5600009f560000 - m_AlignBytes: 16 - groupID: 198 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 22064 - particle2: 22065 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 22065 - particle2: 22066 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 22066 - particle2: 22067 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 22067 - particle2: 22068 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 22068 - particle2: 22069 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 22069 - particle2: 22070 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 22070 - particle2: 22071 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 22071 - particle2: 22072 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 22072 - particle2: 22073 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 22073 - particle2: 22074 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 22074 - particle2: 22075 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &2127388784 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2127388785} - - component: {fileID: 2127388789} - - component: {fileID: 2127388788} - - component: {fileID: 2127388787} - - component: {fileID: 2127388786} - m_Layer: 0 - m_Name: Obi Rope (3) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2127388785 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2127388784} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 0.6, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1464717035} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &2127388786 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2127388784} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 2127388789} - m_Target: {fileID: 2127388785} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &2127388787 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2127388784} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &2127388788 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2127388784} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 198 ---- !u!114 &2127388789 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2127388784} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: a0560000a1560000a2560000a3560000a4560000a5560000a6560000a7560000a8560000a9560000aa560000ab560000ac560000ad560000ae560000af560000b0560000b1560000b2560000b3560000b4560000b5560000b6560000b7560000b8560000b9560000ba560000bb560000bc560000bd560000be560000bf560000c0560000c1560000c2560000c3560000c4560000c5560000c6560000c7560000c8560000c9560000ca560000cb560000cc560000cd560000ce560000cf560000d0560000d1560000d2560000d3560000d4560000d5560000d6560000d7560000d8560000d9560000da560000db560000dc560000dd560000de560000df560000e0560000e1560000e2560000e3560000e4560000e5560000e6560000e7560000e8560000e9560000ea560000eb560000ec560000ed560000ee560000ef560000f0560000f1560000f2560000f3560000f4560000f5560000f6560000f7560000f8560000f9560000fa560000fb560000fc560000fd560000fe560000ff560000005700000157000002570000035700000457000005570000065700000757000008570000095700000a5700000b5700000c5700000d5700000e5700000f570000 - m_AlignBytes: 16 - groupID: 199 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 22176 - particle2: 22177 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 22177 - particle2: 22178 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 22178 - particle2: 22179 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 22179 - particle2: 22180 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 22180 - particle2: 22181 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 22181 - particle2: 22182 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 22182 - particle2: 22183 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 22183 - particle2: 22184 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 22184 - particle2: 22185 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 22185 - particle2: 22186 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 22186 - particle2: 22187 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &2145370370 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2145370371} - - component: {fileID: 2145370375} - - component: {fileID: 2145370374} - - component: {fileID: 2145370373} - - component: {fileID: 2145370372} - m_Layer: 0 - m_Name: Obi Rope (6) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2145370371 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2145370370} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} - m_LocalPosition: {x: 1.2, y: 2, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 426164209} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} ---- !u!114 &2145370372 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2145370370} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 2145370375} - m_Target: {fileID: 2145370371} - m_ParticleGroup: {fileID: -2639811391673711616, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &2145370373 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2145370370} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 44ab0cc40b59345718856f6e1c1225f3, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 3} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.5 ---- !u!114 &2145370374 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2145370370} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 199 ---- !u!114 &2145370375 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2145370370} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: 105700001157000012570000135700001457000015570000165700001757000018570000195700001a5700001b5700001c5700001d5700001e5700001f570000205700002157000022570000235700002457000025570000265700002757000028570000295700002a5700002b5700002c5700002d5700002e5700002f570000305700003157000032570000335700003457000035570000365700003757000038570000395700003a5700003b5700003c5700003d5700003e5700003f570000405700004157000042570000435700004457000045570000465700004757000048570000495700004a5700004b5700004c5700004d5700004e5700004f570000505700005157000052570000535700005457000055570000565700005757000058570000595700005a5700005b5700005c5700005d5700005e5700005f570000605700006157000062570000635700006457000065570000665700006757000068570000695700006a5700006b5700006c5700006d5700006e5700006f570000705700007157000072570000735700007457000075570000765700007757000078570000795700007a5700007b5700007c5700007d5700007e5700007f570000 - m_AlignBytes: 16 - groupID: 200 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 2 - elements: - - particle1: 22288 - particle2: 22289 - restLength: 0.18133646 - constraintForce: 0 - tearResistance: 1 - - particle1: 22289 - particle2: 22290 - restLength: 0.18116945 - constraintForce: 0 - tearResistance: 1 - - particle1: 22290 - particle2: 22291 - restLength: 0.18210343 - constraintForce: 0 - tearResistance: 1 - - particle1: 22291 - particle2: 22292 - restLength: 0.18220028 - constraintForce: 0 - tearResistance: 1 - - particle1: 22292 - particle2: 22293 - restLength: 0.18192291 - constraintForce: 0 - tearResistance: 1 - - particle1: 22293 - particle2: 22294 - restLength: 0.18203682 - constraintForce: 0 - tearResistance: 1 - - particle1: 22294 - particle2: 22295 - restLength: 0.18204802 - constraintForce: 0 - tearResistance: 1 - - particle1: 22295 - particle2: 22296 - restLength: 0.18179289 - constraintForce: 0 - tearResistance: 1 - - particle1: 22296 - particle2: 22297 - restLength: 0.18189213 - constraintForce: 0 - tearResistance: 1 - - particle1: 22297 - particle2: 22298 - restLength: 0.18271154 - constraintForce: 0 - tearResistance: 1 - - particle1: 22298 - particle2: 22299 - restLength: 0.18078607 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: d82adbfa2e0744621823a657cc1d4d9a, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 ---- !u!1 &2045321430961851743 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2045321430962147711} - - component: {fileID: 2045321430962147714} - - component: {fileID: 2045321430962147713} - - component: {fileID: 2045321430962147712} - m_Layer: 0 - m_Name: Wind - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &2045321430962147711 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2045321430961851743} - serializedVersion: 2 - m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 792243030} - m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} ---- !u!114 &2045321430962147712 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2045321430961851743} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6757b231cedd544c583ef8aeaf773b2a, type: 3} - m_Name: - m_EditorClassIdentifier: - thickness: 0 - inverted: 0 - material: {fileID: 0} - filter: -65535 - m_SourceCollider: {fileID: 2045321430962147714} - m_DistanceField: {fileID: 0} ---- !u!114 &2045321430962147713 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2045321430961851743} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4978a525b6164476d96f5d28d8b309f8, type: 3} - m_Name: - m_EditorClassIdentifier: - m_SourceCollider: {fileID: 2045321430962147712} - type: 0 - mode: 2 - intensity: 10 - dampingDir: 0 - damping: 0 - minDistance: 0 - maxDistance: 0.1 - falloffPower: 1 - color: {r: 0, g: 0, b: 0, a: 0} - pulseIntensity: 0 - pulseFrequency: 0 - pulseSeed: 0 ---- !u!136 &2045321430962147714 -CapsuleCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2045321430961851743} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 1.5 - m_Height: 5 - m_Direction: 2 - m_Center: {x: 0, y: 0, z: 2.5} ---- !u!1660057539 &9223372036854775807 -SceneRoots: - m_ObjectHideFlags: 0 - m_Roots: - - {fileID: 1002464896} - - {fileID: 421764872} - - {fileID: 1175446146} - - {fileID: 2102841797} - - {fileID: 1561375948} - - {fileID: 2064178989} diff --git a/Assets/Obi/Samples/RopeAndRod/ComputeRopes.unity.meta b/Assets/Obi/Samples/RopeAndRod/ComputeRopes.unity.meta deleted file mode 100644 index d25af1a9d..000000000 --- a/Assets/Obi/Samples/RopeAndRod/ComputeRopes.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 8fafd98b75e9b44ee8b37edf6f1adcd5 -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/ComputeRopes/LightingData.asset b/Assets/Obi/Samples/RopeAndRod/ComputeRopes/LightingData.asset deleted file mode 100644 index 74e7cf1b3..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/ComputeRopes/LightingData.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/ComputeRopes/LightingData.asset.meta b/Assets/Obi/Samples/RopeAndRod/ComputeRopes/LightingData.asset.meta deleted file mode 100644 index d85883919..000000000 --- a/Assets/Obi/Samples/RopeAndRod/ComputeRopes/LightingData.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1ead4721dd54be94eb41595aa2b9a29a -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 112000000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/ComputeRopes/ReflectionProbe-0.exr b/Assets/Obi/Samples/RopeAndRod/ComputeRopes/ReflectionProbe-0.exr deleted file mode 100644 index e70946aca..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/ComputeRopes/ReflectionProbe-0.exr and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/ComputeRopes/ReflectionProbe-0.exr.meta b/Assets/Obi/Samples/RopeAndRod/ComputeRopes/ReflectionProbe-0.exr.meta deleted file mode 100644 index 2508097fa..000000000 --- a/Assets/Obi/Samples/RopeAndRod/ComputeRopes/ReflectionProbe-0.exr.meta +++ /dev/null @@ -1,117 +0,0 @@ -fileFormatVersion: 2 -guid: 883b9de196955fb4093f68888ae87230 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 13 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - flipGreenChannel: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMipmapLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 1 - seamlessCubemap: 1 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 0 - mipBias: 0 - wrapU: 1 - wrapV: 1 - wrapW: 1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 2 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - swizzle: 50462976 - cookieLightType: 0 - platformSettings: - - serializedVersion: 4 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 100 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - - serializedVersion: 4 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - ignorePlatformSupport: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - customData: - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - spriteCustomMetadata: - entries: [] - nameFileIdTable: {} - mipmapLimitGroupName: - pSDRemoveMatte: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/Crane.unity b/Assets/Obi/Samples/RopeAndRod/Crane.unity deleted file mode 100644 index dcda890e7..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/Crane.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/Crane.unity.meta b/Assets/Obi/Samples/RopeAndRod/Crane.unity.meta deleted file mode 100644 index 3d5ddadd0..000000000 --- a/Assets/Obi/Samples/RopeAndRod/Crane.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 440a0ad01189148c4a077885d818dce1 -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/ElectricalWires.unity b/Assets/Obi/Samples/RopeAndRod/ElectricalWires.unity deleted file mode 100644 index c41d91df5..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/ElectricalWires.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/ElectricalWires.unity.meta b/Assets/Obi/Samples/RopeAndRod/ElectricalWires.unity.meta deleted file mode 100644 index c8b9df489..000000000 --- a/Assets/Obi/Samples/RopeAndRod/ElectricalWires.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 1ca589942e43e4cd6ac9a4f096ded02a -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/Firehose.unity b/Assets/Obi/Samples/RopeAndRod/Firehose.unity deleted file mode 100644 index ed91cf6d8..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/Firehose.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/Firehose.unity.meta b/Assets/Obi/Samples/RopeAndRod/Firehose.unity.meta deleted file mode 100644 index c60811ff7..000000000 --- a/Assets/Obi/Samples/RopeAndRod/Firehose.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 433676b596d32485f82785463d0e0837 -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/FirehoseSettings.lighting b/Assets/Obi/Samples/RopeAndRod/FirehoseSettings.lighting deleted file mode 100644 index fc58afdac..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/FirehoseSettings.lighting and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/FirehoseSettings.lighting.meta b/Assets/Obi/Samples/RopeAndRod/FirehoseSettings.lighting.meta deleted file mode 100644 index 30d387eac..000000000 --- a/Assets/Obi/Samples/RopeAndRod/FirehoseSettings.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: cfd0a31533ca84d319eb2d45c71f457d -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 4890085278179872738 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/FreightLift.unity b/Assets/Obi/Samples/RopeAndRod/FreightLift.unity deleted file mode 100644 index aa85b64b5..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/FreightLift.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/FreightLift.unity.meta b/Assets/Obi/Samples/RopeAndRod/FreightLift.unity.meta deleted file mode 100644 index 307bcd8a1..000000000 --- a/Assets/Obi/Samples/RopeAndRod/FreightLift.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: f2c99bab98af74a5ebf6edfe56636bc8 -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/Plectoneme.unity b/Assets/Obi/Samples/RopeAndRod/Plectoneme.unity deleted file mode 100644 index e5637f1e8..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/Plectoneme.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/Plectoneme.unity.meta b/Assets/Obi/Samples/RopeAndRod/Plectoneme.unity.meta deleted file mode 100644 index e9a96f2b3..000000000 --- a/Assets/Obi/Samples/RopeAndRod/Plectoneme.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 328a6310251d54b959032988b2b6a480 -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting b/Assets/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting deleted file mode 100644 index 8226dd264..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting.meta b/Assets/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting.meta deleted file mode 100644 index 84696b377..000000000 --- a/Assets/Obi/Samples/RopeAndRod/PlectonemeSettings.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 60cb1fcd40f2443829b552612b4b0ac8 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 4890085278179872738 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/Ratchet.unity b/Assets/Obi/Samples/RopeAndRod/Ratchet.unity deleted file mode 100644 index ff265ce80..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/Ratchet.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/Ratchet.unity.meta b/Assets/Obi/Samples/RopeAndRod/Ratchet.unity.meta deleted file mode 100644 index 1ff1a6dd7..000000000 --- a/Assets/Obi/Samples/RopeAndRod/Ratchet.unity.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 0dfa9dcb619204188a53a53500c16db3 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/RenderModes.unity b/Assets/Obi/Samples/RopeAndRod/RenderModes.unity deleted file mode 100644 index d2f11f05d..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/RenderModes.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/RenderModes.unity.meta b/Assets/Obi/Samples/RopeAndRod/RenderModes.unity.meta deleted file mode 100644 index 7b96d264e..000000000 --- a/Assets/Obi/Samples/RopeAndRod/RenderModes.unity.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: b5657544ccae14cb6bab0a77ecdf31f1 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/Rocker.unity b/Assets/Obi/Samples/RopeAndRod/Rocker.unity deleted file mode 100644 index abdb2f3cd..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/Rocker.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/Rocker.unity.meta b/Assets/Obi/Samples/RopeAndRod/Rocker.unity.meta deleted file mode 100644 index 795c2fef1..000000000 --- a/Assets/Obi/Samples/RopeAndRod/Rocker.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 9c8d31b0b36434fd199dc8bf5919ba85 -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/RockerSettings.lighting b/Assets/Obi/Samples/RopeAndRod/RockerSettings.lighting deleted file mode 100644 index 8ef1f7c85..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/RockerSettings.lighting and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/RockerSettings.lighting.meta b/Assets/Obi/Samples/RopeAndRod/RockerSettings.lighting.meta deleted file mode 100644 index 6bbb3f5bd..000000000 --- a/Assets/Obi/Samples/RopeAndRod/RockerSettings.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 22a51826813394dfda17b2e81584d97a -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 4890085278179872738 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/RopeAndJoints.unity b/Assets/Obi/Samples/RopeAndRod/RopeAndJoints.unity deleted file mode 100644 index 8fb0c5cd1..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/RopeAndJoints.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/RopeAndJoints.unity.meta b/Assets/Obi/Samples/RopeAndRod/RopeAndJoints.unity.meta deleted file mode 100644 index 1481d6698..000000000 --- a/Assets/Obi/Samples/RopeAndRod/RopeAndJoints.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: c93058d886f2945439a9c39e808506c2 -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting b/Assets/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting deleted file mode 100644 index dc8fc8d74..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting.meta b/Assets/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting.meta deleted file mode 100644 index e28265ff0..000000000 --- a/Assets/Obi/Samples/RopeAndRod/RopeAndJointsSettings.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 27534f20d18eb45b0acb536b299b8a0c -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 4890085278179872738 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/RopeCutting.unity b/Assets/Obi/Samples/RopeAndRod/RopeCutting.unity deleted file mode 100644 index 44f7b1eda..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/RopeCutting.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/RopeCutting.unity.meta b/Assets/Obi/Samples/RopeAndRod/RopeCutting.unity.meta deleted file mode 100644 index 506365ecf..000000000 --- a/Assets/Obi/Samples/RopeAndRod/RopeCutting.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 14b5ad4d00c9f4b118c479057ad1a580 -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHook.unity b/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHook.unity deleted file mode 100644 index ddd1e1a0e..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHook.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHook.unity.meta b/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHook.unity.meta deleted file mode 100644 index c2a52198a..000000000 --- a/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHook.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: f403f5793cdb042dc8552ea3329b7bfa -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting b/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting deleted file mode 100644 index 51cb521f9..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting.meta b/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting.meta deleted file mode 100644 index d414d9ab5..000000000 --- a/Assets/Obi/Samples/RopeAndRod/RopeGrapplingHookSettings.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6530f45834fcb41a0b4b10b622d95c4c -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 4890085278179872738 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/RopeNet.unity b/Assets/Obi/Samples/RopeAndRod/RopeNet.unity deleted file mode 100644 index e9f71bc50..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/RopeNet.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/RopeNet.unity.meta b/Assets/Obi/Samples/RopeAndRod/RopeNet.unity.meta deleted file mode 100644 index b889597a0..000000000 --- a/Assets/Obi/Samples/RopeAndRod/RopeNet.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 68709b54f964a4ab8bc457f533eeeb91 -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/RopeShowcase.unity b/Assets/Obi/Samples/RopeAndRod/RopeShowcase.unity deleted file mode 100644 index 66c41c81d..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/RopeShowcase.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/RopeShowcase.unity.meta b/Assets/Obi/Samples/RopeAndRod/RopeShowcase.unity.meta deleted file mode 100644 index a34c46810..000000000 --- a/Assets/Obi/Samples/RopeAndRod/RopeShowcase.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 89e5ccc1fe8f948e195777194be0d7ee -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting b/Assets/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting deleted file mode 100644 index 490d2f549..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting.meta b/Assets/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting.meta deleted file mode 100644 index ce3742d80..000000000 --- a/Assets/Obi/Samples/RopeAndRod/RopeShowcaseSettings.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d03718b1550344932a85912567fb2a98 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 4890085278179872738 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/RopesColliding.unity b/Assets/Obi/Samples/RopeAndRod/RopesColliding.unity deleted file mode 100644 index 7a80d72ca..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/RopesColliding.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/RopesColliding.unity.meta b/Assets/Obi/Samples/RopeAndRod/RopesColliding.unity.meta deleted file mode 100644 index b1191a520..000000000 --- a/Assets/Obi/Samples/RopeAndRod/RopesColliding.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: bdc1c69fe6cef4fc393005981e6d3623 -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources.meta deleted file mode 100644 index b076486f4..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: eac720611ce5c4119b1d9db820e46445 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations.meta deleted file mode 100644 index d3211a3fe..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: bce64c6a145eb4fe6baa4b578340c7f6 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/BenderAnimation.anim b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/BenderAnimation.anim deleted file mode 100644 index f03f318bc..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/BenderAnimation.anim and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/BenderAnimation.anim.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/BenderAnimation.anim.meta deleted file mode 100644 index c717d2f37..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/BenderAnimation.anim.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 8aef55aace3b1432fa898df59e010a72 -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Bending.controller b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Bending.controller deleted file mode 100644 index df4ce42f6..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Bending.controller and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Bending.controller.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Bending.controller.meta deleted file mode 100644 index 17ba600ed..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Bending.controller.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 3944bed00b7b34420a9a4cfad30c9ce0 -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Obi Rod.controller b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Obi Rod.controller deleted file mode 100644 index bc853cc97..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Obi Rod.controller and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Obi Rod.controller.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Obi Rod.controller.meta deleted file mode 100644 index 34a24fd06..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Obi Rod.controller.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 0f15fe98c8c39495c86f63837900a88d -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 9100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwister.anim b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwister.anim deleted file mode 100644 index 6e95f5a44..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwister.anim and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwister.anim.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwister.anim.meta deleted file mode 100644 index 2b0781fdd..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwister.anim.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 28df4ce4afe8f4cf4ba9651b14239a6d -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 7400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwisterController.controller b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwisterController.controller deleted file mode 100644 index 2844bd2f1..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwisterController.controller and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwisterController.controller.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwisterController.controller.meta deleted file mode 100644 index f8124fbe9..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/PlectonemeTwisterController.controller.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 97c29ef2dfc89427385f43924109cfa8 -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 9100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Rocker.controller b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Rocker.controller deleted file mode 100644 index a24b4ab3a..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Rocker.controller and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Rocker.controller.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Rocker.controller.meta deleted file mode 100644 index 7d330dd2d..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/Rocker.controller.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: d48cf3556d5844543a51259340bc1344 -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RockerAnimation.anim b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RockerAnimation.anim deleted file mode 100644 index 675f10f19..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RockerAnimation.anim and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RockerAnimation.anim.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RockerAnimation.anim.meta deleted file mode 100644 index fa1290731..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RockerAnimation.anim.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: fe0d06ab59d084ca78e40c50472ccc36 -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuit.controller b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuit.controller deleted file mode 100644 index b41984b8c..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuit.controller and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuit.controller.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuit.controller.meta deleted file mode 100644 index d5fd77de5..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuit.controller.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 6081905a3b44e41268651052f0230595 -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuitAnimation.anim b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuitAnimation.anim deleted file mode 100644 index b9eae2a1a..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuitAnimation.anim and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuitAnimation.anim.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuitAnimation.anim.meta deleted file mode 100644 index 634e7ba9c..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeCircuitAnimation.anim.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 272538c21c0494561b2e79be089c07ad -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeHangerAnimation.anim b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeHangerAnimation.anim deleted file mode 100644 index f2a1786a9..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeHangerAnimation.anim and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeHangerAnimation.anim.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeHangerAnimation.anim.meta deleted file mode 100644 index bdaaebcde..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeHangerAnimation.anim.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 5b3152b7fb78f42f7a1e424cfb3c8a54 -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.anim b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.anim deleted file mode 100644 index aae52f528..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.anim and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.anim.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.anim.meta deleted file mode 100644 index 8d939d3d4..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.anim.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3969502aaa6a94767ba6d47311617675 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 7400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.controller b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.controller deleted file mode 100644 index a0dc7eebe..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.controller and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.controller.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.controller.meta deleted file mode 100644 index 782ad153d..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/RopeStretcher.controller.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: a4b784adeafc54c718a457f939eec638 -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.anim b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.anim deleted file mode 100644 index 2995641ed..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.anim and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.anim.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.anim.meta deleted file mode 100644 index 2b72a5eaf..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.anim.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 64e85f20a274344c0aa6d69f24adb2da -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 7400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.controller b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.controller deleted file mode 100644 index 2c2e0013b..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.controller and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.controller.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.controller.meta deleted file mode 100644 index 36e5dca93..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Animations/SpringBase.controller.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: f1d1c5155bab2402a9c25e0867b791ef -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints.meta deleted file mode 100644 index e5470b0e3..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 37c631910c18f4ddea83b72d2e0a026a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CableCarRope.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CableCarRope.asset deleted file mode 100644 index f8658b30a..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CableCarRope.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CableCarRope.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CableCarRope.asset.meta deleted file mode 100644 index a2d87e356..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CableCarRope.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e016b4df5bfaf488f91ab99ebca81d83 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Chain.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Chain.asset deleted file mode 100644 index 84415c66b..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Chain.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Chain.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Chain.asset.meta deleted file mode 100644 index 2e20b922b..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Chain.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9b7a30b754796421d9e0b869d8eb345b -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Crane.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Crane.asset deleted file mode 100644 index 654d829f1..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Crane.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Crane.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Crane.asset.meta deleted file mode 100644 index 97570c909..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Crane.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d3d21d979f26f472ca2945f4e727239c -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CuttableRope.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CuttableRope.asset deleted file mode 100644 index 338125bc4..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CuttableRope.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CuttableRope.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CuttableRope.asset.meta deleted file mode 100644 index 82d579343..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/CuttableRope.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f92460ac39eb444ad8f2bfb5714bb425 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Firehose.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Firehose.asset deleted file mode 100644 index 9ca5607e2..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Firehose.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Firehose.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Firehose.asset.meta deleted file mode 100644 index c2d251aec..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Firehose.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b2fe09b5a1ae2424597b4776dc36fa5c -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Freightlift cable.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Freightlift cable.asset deleted file mode 100644 index ed115bbbe..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Freightlift cable.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Freightlift cable.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Freightlift cable.asset.meta deleted file mode 100644 index 352b0dbb0..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Freightlift cable.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: df057526865004da9ac53f3c8bc43d9f -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 1.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 1.asset deleted file mode 100644 index e9c9be2a3..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 1.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 1.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 1.asset.meta deleted file mode 100644 index 2fddc59e1..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 1.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: aa522e16fa3d944afa90688caef811d1 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 2.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 2.asset deleted file mode 100644 index 9ae864db5..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 2.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 2.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 2.asset.meta deleted file mode 100644 index b26597de9..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Joints rope 2.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 26f4e1ad2bfa7442fa1380d8f5ea809b -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Plectoneme rod.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Plectoneme rod.asset deleted file mode 100644 index 45b8b16ac..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Plectoneme rod.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Plectoneme rod.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Plectoneme rod.asset.meta deleted file mode 100644 index 77dc627a8..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Plectoneme rod.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 74806658f50d141e88786022b12fc58b -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/RatchetCable.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/RatchetCable.asset deleted file mode 100644 index b9d4e35dd..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/RatchetCable.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/RatchetCable.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/RatchetCable.asset.meta deleted file mode 100644 index b507136b6..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/RatchetCable.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 558d68cba3927468abede77a3852186b -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Snake.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Snake.asset deleted file mode 100644 index 791050dbe..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Snake.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Snake.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Snake.asset.meta deleted file mode 100644 index 65790f379..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Snake.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7cc7ef3c151f24a00a1fe338fa5f827c -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/SpringRod.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/SpringRod.asset deleted file mode 100644 index 97be79594..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/SpringRod.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/SpringRod.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/SpringRod.asset.meta deleted file mode 100644 index 054979aed..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/SpringRod.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b74d67cfe23804ec1b4f215ac5e3d500 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight long rope.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight long rope.asset deleted file mode 100644 index 3e33d26e0..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight long rope.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight long rope.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight long rope.asset.meta deleted file mode 100644 index aff3b1fb9..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight long rope.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d82adbfa2e0744621823a657cc1d4d9a -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight short rope.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight short rope.asset deleted file mode 100644 index 113dae503..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight short rope.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight short rope.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight short rope.asset.meta deleted file mode 100644 index 53037ee2c..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Straight short rope.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ca9e262f11fb246cbb6d2177bacb27ea -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeA.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeA.asset deleted file mode 100644 index 5b7d4c618..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeA.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeA.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeA.asset.meta deleted file mode 100644 index 3dd9abe0b..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeA.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4d31372b30ca34527b534f09a803ab15 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeB.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeB.asset deleted file mode 100644 index 117c2f92a..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeB.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeB.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeB.asset.meta deleted file mode 100644 index 90cb00382..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/TangledRopeB.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 04076b9483b7f4ab0a01666d8b2c24cc -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Tearable cable.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Tearable cable.asset deleted file mode 100644 index bdee3af67..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Tearable cable.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Tearable cable.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Tearable cable.asset.meta deleted file mode 100644 index 2d03e771d..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Tearable cable.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 61d053dd5abd943919947f833abd0569 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Very long cable.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Very long cable.asset deleted file mode 100644 index ffde7f0f2..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Very long cable.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Very long cable.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Very long cable.asset.meta deleted file mode 100644 index 09ed24b61..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Very long cable.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 9d8ad1e0aac8f48deb9f3cda92974152 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine 2.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine 2.asset deleted file mode 100644 index 0ef4976e1..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine 2.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine 2.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine 2.asset.meta deleted file mode 100644 index 5abe169be..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine 2.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 47284b33117284d61b3df44d2620531e -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine.asset deleted file mode 100644 index 89f4f740b..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine.asset.meta deleted file mode 100644 index 0cabd5363..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/Vine.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b6dc10b6408e440aaa60cfca8e7dd7d1 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset deleted file mode 100644 index 5b083f384..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset.meta deleted file mode 100644 index a0c762b5a..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Blueprints/WrappingRope.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7e05f85bfaeb24a649317f63f656b6bb -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials.meta deleted file mode 100644 index b23bca2ed..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2df1efc605b8b42ecaa6b259d0a7ce78 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainRed.mat b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainRed.mat deleted file mode 100644 index 236ff4d4c..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainRed.mat and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainRed.mat.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainRed.mat.meta deleted file mode 100644 index 4ef19f21d..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainRed.mat.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: b74081a5a5bbf418ea9f95bfec18f393 -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainWhite.mat b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainWhite.mat deleted file mode 100644 index 008eda67d..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainWhite.mat and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainWhite.mat.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainWhite.mat.meta deleted file mode 100644 index 77811e85e..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/ChainWhite.mat.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: edc856900ac3941a98996e21e91e215e -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/GreenRope.mat b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/GreenRope.mat deleted file mode 100644 index 0109cce41..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/GreenRope.mat and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/GreenRope.mat.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/GreenRope.mat.meta deleted file mode 100644 index 79421a01e..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/GreenRope.mat.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 03019be2b7a654429bf322c3ca0c7a0e -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/LineRope.mat b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/LineRope.mat deleted file mode 100644 index 455a0a68a..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/LineRope.mat and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/LineRope.mat.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/LineRope.mat.meta deleted file mode 100644 index c2185a456..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/LineRope.mat.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 4cc7d840058664f0f9a679178b33b5e4 -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/RedRope.mat b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/RedRope.mat deleted file mode 100644 index 90d3ed1b0..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/RedRope.mat +++ /dev/null @@ -1,144 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &-2679641358920912058 -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: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion - version: 10 ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: RedRope - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - _EMISSION - - _NORMALMAP - - _OCCLUSIONMAP - m_InvalidKeywords: [] - m_LightmapFlags: 1 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 2800000, guid: 61461ee4d289a4bc384e839abcf74473, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BumpMap: - m_Texture: {fileID: 2800000, guid: 1020609c9ac9f4a14a078c1afd37a75e, type: 3} - m_Scale: {x: 1, y: 1} - 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} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - _AddPrecomputedVelocity: 0 - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _DstBlendAlpha: 0 - - _EmissionScaleUI: 0 - - _EnvironmentReflections: 1 - - _GlossMapScale: 1 - - _Glossiness: 0.4 - - _GlossyReflections: 1 - - _Metallic: 0 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.5 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - - _UVSec: 0 - - _WorkflowMode: 1 - - _XRMotionVectorsPass: 1 - - _ZWrite: 1 - m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _EmissionColorUI: {r: 1, g: 1, b: 1, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} - m_BuildTextureStacks: [] - m_AllowLocking: 1 diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/RedRope.mat.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/RedRope.mat.meta deleted file mode 100644 index 61f3463ae..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/RedRope.mat.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 44ab0cc40b59345718856f6e1c1225f3 -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Rod.mat b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Rod.mat deleted file mode 100644 index 0d45f7481..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Rod.mat and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Rod.mat.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Rod.mat.meta deleted file mode 100644 index 5ae039713..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Rod.mat.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 9bc0d93bc33e445c7a765578064cdd1e -labels: -- ObiRope -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Shark.mat b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Shark.mat deleted file mode 100644 index 677aad5f8..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Shark.mat and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Shark.mat.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Shark.mat.meta deleted file mode 100644 index f72c06f54..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Shark.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ad417cd62ee7d4209afa3e3d86bee647 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Snake.mat b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Snake.mat deleted file mode 100644 index 952e6bcb5..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Snake.mat and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Snake.mat.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Snake.mat.meta deleted file mode 100644 index 043f36665..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/Snake.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: dbda366779bfb4406b2c60e70986d306 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/TanglePeg.mat b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/TanglePeg.mat deleted file mode 100644 index 92ea8416c..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/TanglePeg.mat and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/TanglePeg.mat.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/TanglePeg.mat.meta deleted file mode 100644 index d4d9026a4..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/TanglePeg.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: bcdcc68772c3b42ca94abeffddf3eb19 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/WrapPeg.mat b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/WrapPeg.mat deleted file mode 100644 index 91c74c9ac..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/WrapPeg.mat and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/WrapPeg.mat.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/WrapPeg.mat.meta deleted file mode 100644 index adcedd484..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Materials/WrapPeg.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d402dacd6333443e5926c03c59b7b0ad -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Models.meta deleted file mode 100644 index 8733e6717..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2408079b738194e52942dd5e44c3e4aa -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLink.fbx b/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLink.fbx deleted file mode 100644 index 23abba9f2..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLink.fbx and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLink.fbx.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLink.fbx.meta deleted file mode 100644 index 87efc2a03..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLink.fbx.meta +++ /dev/null @@ -1,99 +0,0 @@ -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/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkRed.prefab b/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkRed.prefab deleted file mode 100644 index 13679dacb..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkRed.prefab and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkRed.prefab.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkRed.prefab.meta deleted file mode 100644 index d30d2a00a..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkRed.prefab.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 2d2a7dadfeecb4ffc9bdbfa8ae0b4727 -labels: -- ObiRope -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkWhite.prefab b/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkWhite.prefab deleted file mode 100644 index 267d203b7..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkWhite.prefab and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkWhite.prefab.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkWhite.prefab.meta deleted file mode 100644 index 96dc456a4..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/ChainLinkWhite.prefab.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 1a25eaebcccc14ffeabd9b15641f8b51 -labels: -- ObiRope -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/shark.obj b/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/shark.obj deleted file mode 100644 index efeb4962d..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/shark.obj +++ /dev/null @@ -1,11018 +0,0 @@ -# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware -# File Created: 14.08.2013 08:29:42 - -mtllib Shark.mtl - -# -# object great_white_shark -# - -v -0.788411 0.469182 -1.440535 -v 0.000000 0.623859 -3.313810 -v 0.000000 -0.034299 3.374330 -v 0.000000 -0.081471 2.547170 -v 0.000000 -0.063084 1.550987 -v 0.000000 -0.017118 0.830714 -v 0.000000 0.108771 -0.306628 -v 0.000000 0.396600 -2.259508 -v -0.364643 0.257481 -1.408966 -v 0.000000 0.230286 -1.381465 -v -0.544076 0.183225 -0.218446 -v -0.735302 0.134406 4.623686 -v -0.414110 0.043194 4.052600 -v -0.747287 0.139504 4.972197 -v -0.404189 0.103425 4.687736 -v -0.402782 0.090898 5.051456 -v -0.412100 0.088168 5.375933 -v 0.000000 1.022311 7.616058 -v -0.556226 1.107240 7.438728 -v -0.418169 1.099366 7.397717 -v -0.286445 1.068475 7.528789 -v -0.200882 1.005523 7.491678 -v -0.154214 1.035241 7.595179 -v -0.624665 1.045620 7.475090 -v -0.191222 0.368383 7.402486 -v -0.353348 0.425440 7.343808 -v -0.502583 0.581995 7.493086 -v -0.483014 0.727825 7.632405 -v -0.546659 0.957004 7.598269 -v -0.737711 1.087773 7.336395 -v -0.707222 0.942385 7.480309 -v -0.333362 0.701560 7.709418 -v -0.446846 0.867865 7.695375 -v -0.352898 0.545944 7.566257 -v -0.186938 0.511459 7.622266 -v -0.309029 0.838555 7.771639 -v -0.176666 0.660913 7.769929 -v -0.852437 0.877975 7.242527 -v -0.809891 0.994402 7.320856 -v -0.621224 0.768148 7.532959 -v -0.513143 0.449863 7.281170 -v -0.654713 0.505378 7.182827 -v -0.799028 0.563536 7.062317 -v -1.088825 0.706516 6.780196 -v -0.906284 0.744328 7.117725 -v -0.944777 0.634093 6.919909 -v -1.037318 0.815014 6.965506 -v -0.974609 0.929158 7.092916 -v -0.764309 0.689413 7.259150 -v -0.743522 0.817339 7.399426 -v -0.636788 0.634198 7.391329 -v -1.129229 0.901795 6.814305 -v -1.057061 0.570982 6.645980 -v -0.391109 0.237226 6.724459 -v -0.364754 0.314584 7.053168 -v -0.704672 0.387481 6.907848 -v -0.872015 0.453121 6.788566 -v -0.952931 0.367417 6.476990 -v -1.114394 0.510601 6.321710 -v -1.187012 0.402556 5.719851 -v -1.161938 0.378760 5.431072 -v -1.350176 0.590287 5.316800 -v -0.956741 0.219469 5.228363 -v -1.131980 0.361318 5.145022 -v -1.375073 0.558442 5.038369 -v -0.768929 0.154534 5.287313 -v -0.988043 0.300676 6.149660 -v -1.136354 0.461563 6.013940 -v -0.757535 0.304333 6.585647 -v -0.417476 0.168907 6.376730 -v -0.991814 0.230911 5.525332 -v -0.798575 0.165532 5.592230 -v -1.019765 0.246109 5.831659 -v -0.801251 0.226954 6.246830 -v -0.816815 0.177946 5.910890 -v -0.433403 0.097885 6.029599 -v -0.429011 0.075928 5.694320 -v 0.000000 3.827382 -5.507077 -v -0.144524 3.506025 -7.491770 -v -0.201791 3.578382 -6.814765 -v 0.000000 3.647791 -6.819415 -v -0.276314 3.645885 -6.171391 -v 0.000000 3.737124 -6.176731 -v 0.000000 1.747917 -7.716083 -v 0.000000 3.521364 -8.029909 -v 0.000000 4.218249 -3.387337 -v -0.539111 1.525422 -6.898022 -v -0.521816 1.454388 -7.379246 -v -0.510107 1.427016 -7.335085 -v -0.550610 1.636725 7.701257 -v -0.184183 1.470114 7.965120 -v -0.356142 1.480919 7.919915 -v -0.271136 1.575414 7.905256 -v -0.501439 1.483811 7.832011 -v -0.555953 1.557243 7.735547 -v -0.724057 1.452509 7.561075 -v -0.980422 1.417958 7.084308 -v -0.908534 1.447106 7.257532 -v -0.939935 1.419018 7.282726 -v -0.822492 1.446200 7.407862 -v -0.850670 1.419285 7.434948 -v -0.621158 1.471109 7.707720 -v -0.746773 1.423541 7.592715 -v -0.635186 1.442246 7.745333 -v -0.189242 1.413585 8.025587 -v -0.878852 1.403629 7.462059 -v -0.803563 1.388582 7.674817 -v -0.769487 1.406245 7.624363 -v -0.918289 1.385893 7.504447 -v -1.015227 1.382398 7.345387 -v -0.364442 1.431606 7.972756 -v -0.511598 1.442937 7.876547 -v -0.649219 1.425013 7.782948 -v -0.837635 1.408706 7.725255 -v -0.957725 1.405943 7.546875 -v -1.059111 1.400230 7.382830 -v -1.275143 1.454124 7.240187 -v -1.152580 1.355795 7.198538 -v -0.971344 1.402285 7.307949 -v -1.041840 1.358458 7.135857 -v -1.151396 1.271503 6.999184 -v -0.672117 1.404860 7.841801 -v -1.056155 1.484394 7.651218 -v -1.163909 1.469577 7.469476 -v -1.326932 1.620414 7.238987 -v -1.224995 1.634760 7.523807 -v -1.250408 1.787088 7.546576 -v -0.383821 1.376660 8.110682 -v -0.537700 1.393838 7.991468 -v -0.695014 1.422606 7.900669 -v -0.553632 1.412414 8.061825 -v -0.923319 1.481865 7.854587 -v -1.127282 1.641951 7.738727 -v -1.342574 2.172348 7.480217 -v -1.294769 2.532102 7.506557 -v -1.352066 2.338263 7.427687 -v -1.257386 1.939413 7.569346 -v -1.147958 1.787607 7.788406 -v -0.815891 1.631877 8.227547 -v -0.999347 1.628508 7.993338 -v -0.751804 1.495320 8.051482 -v -0.394889 1.398048 8.195772 -v -0.200110 1.357512 8.185737 -v 0.000000 1.349277 8.212379 -v -1.214207 2.188770 7.717457 -v -1.069025 1.938126 8.114807 -v -1.031270 1.766277 8.069627 -v -1.162103 1.946081 7.809398 -v -1.182947 2.233161 7.851377 -v -1.126709 2.097102 7.969667 -v -1.106549 2.226930 8.054207 -v -1.163681 2.397018 7.859357 -v -1.171106 2.320122 7.879097 -v -1.195835 2.586792 7.648397 -v -1.113602 2.548758 7.921816 -v -1.079027 2.416320 8.074515 -v -0.987455 2.446020 8.310556 -v -0.906179 2.177211 8.611516 -v -0.722897 2.153667 8.926217 -v -0.684620 1.892397 8.714986 -v -0.402494 2.128944 9.369587 -v -0.526007 2.129730 9.235456 -v -0.502418 2.300541 9.309047 -v -0.497417 1.972806 9.076187 -v -1.079963 2.751930 7.629907 -v -0.872609 2.624709 8.328406 -v -0.982538 2.695557 7.985207 -v -0.820370 2.897052 7.620287 -v -1.144595 2.758947 7.307598 -v -1.181666 2.724576 6.953297 -v -0.926009 2.982201 6.948767 -v -0.974306 3.031329 6.566297 -v -1.290257 2.689050 6.502546 -v -1.061330 3.240360 5.690906 -v -1.015304 3.131259 6.143333 -v -1.250426 2.812626 6.026449 -v -0.637892 3.182538 6.960979 -v -0.604655 3.123378 7.283537 -v -0.876698 2.945331 7.290977 -v -0.562742 3.045708 7.599047 -v -0.752195 2.827005 7.953977 -v -0.679889 2.762688 8.306867 -v -0.704027 3.366156 6.209093 -v 0.000000 3.326490 6.964999 -v 0.000000 3.400518 6.638300 -v -0.343268 3.480714 6.239543 -v 0.000000 3.501936 6.245602 -v -0.359057 3.592857 5.786156 -v -0.365462 3.697041 5.302405 -v -0.726746 3.460701 5.750815 -v -1.091510 3.329769 5.224496 -v -1.413728 3.125040 4.688398 -v 0.000000 3.236250 7.251406 -v 0.000000 3.640266 5.799026 -v 0.000000 3.747516 5.311316 -v -0.387191 2.295267 9.450975 -v -0.369698 2.581524 9.226277 -v -0.443558 2.460720 9.299537 -v -0.219986 2.500278 9.467626 -v -0.200603 2.562858 9.384016 -v -0.190367 2.747181 8.935636 -v -0.213110 2.838990 8.622107 -v -0.236318 2.938071 8.263367 -v -0.259580 3.034395 7.903247 -v 0.000000 3.146109 7.555100 -v -0.280685 3.127605 7.570430 -v -0.307988 2.655072 9.137687 -v -0.179909 2.660967 9.193696 -v -0.414944 2.789853 8.633687 -v -0.357935 2.709567 8.935786 -v -0.518414 2.962215 7.929586 -v -0.297371 3.207993 7.261970 -v -0.669860 3.259230 6.612320 -v -0.309821 3.284826 6.962750 -v -0.324545 3.365628 6.630441 -v -0.762722 2.567478 8.686997 -v -0.848360 2.384847 8.663476 -v -0.694145 2.332398 9.001245 -v -0.495740 2.624094 8.973136 -v -0.468353 2.878398 8.283106 -v -0.598352 2.694258 8.660836 -v -0.618653 2.501331 9.014657 -v -0.434504 4.066239 -3.388447 -v -0.310169 3.726294 -5.490697 -v -0.368948 3.862812 -4.494491 -v -0.543848 3.423990 -6.154593 -v 0.000000 3.991557 -4.510510 -v -0.425912 3.368622 -6.807328 -v -0.743447 3.566691 5.277687 -v -1.108208 3.438648 4.744079 -v -1.121783 3.551319 4.258739 -v -1.388063 3.272769 3.742223 -v -1.148591 3.678432 3.771743 -v -0.367676 4.042284 3.781043 -v 0.000000 3.951561 4.276679 -v 0.000000 4.067183 3.775253 -v 0.000000 3.826035 4.798529 -v -0.360056 3.924354 4.277819 -v -0.362987 3.788385 4.795018 -v -0.734798 3.798906 4.270558 -v -0.762929 3.922338 3.782633 -v -0.741866 3.673716 4.779359 -v -0.205910 1.384992 8.285470 -v -0.581512 1.513149 8.234276 -v -0.406351 1.516749 8.401046 -v -0.211129 1.515789 8.524104 -v 0.000000 1.380918 8.318741 -v -0.424925 1.671654 8.636567 -v -0.651821 1.775328 8.572427 -v -0.619022 1.658256 8.429867 -v -0.858530 1.757508 8.339116 -v -0.894635 1.883136 8.450686 -v -1.025930 2.209278 8.254758 -v -0.217715 1.669653 8.798027 -v -0.460961 1.818483 8.879627 -v -0.235700 1.817823 9.070906 -v -0.267638 2.049735 9.387136 -v -0.256868 1.971312 9.289336 -v -0.278408 2.128155 9.464476 -v -0.239372 2.437698 9.519227 -v -0.341750 2.449209 9.428987 -v -0.426443 0.750844 5.336720 -v 0.000000 0.670561 5.340981 -v 0.000000 0.670558 6.809538 -v -1.747295 2.596497 4.576942 -v -1.788563 2.671095 4.152533 -v -1.817885 2.060883 4.474732 -v -1.808951 1.664856 4.738643 -v -1.742348 1.295748 4.979033 -v -1.660190 1.000224 4.950203 -v -1.597694 1.006326 5.232381 -v -1.108631 0.344742 4.848625 -v -1.024067 0.308106 4.545835 -v -1.747019 1.619814 5.055710 -v -1.695059 1.945572 5.171840 -v -1.784789 2.001459 4.837373 -v -1.546445 2.435583 5.388470 -v -1.816055 1.717494 4.421183 -v -1.769969 1.330092 4.667004 -v -1.541045 0.746980 4.673993 -v -1.522184 0.755982 4.976873 -v -1.352621 0.567264 4.748600 -v -1.497356 0.769308 4.385693 -v -1.315610 0.590397 4.451360 -v -1.677155 1.018413 4.641562 -v -1.231535 2.339838 7.611917 -v -1.238822 2.340930 7.586387 -v -1.234151 2.261535 7.600157 -v -0.351596 4.421394 1.775378 -v -0.723395 4.261200 1.750265 -v -1.056803 4.037607 -0.456997 -v -1.086167 4.049907 0.830774 -v -1.086968 3.982332 1.717826 -v -0.758945 4.176072 2.597807 -v -0.364199 4.314102 2.597855 -v -0.773942 4.052736 3.295433 -v -0.377027 4.193604 3.296573 -v -1.134182 3.892794 2.592224 -v -1.006607 3.948726 -1.472503 -v -1.204535 3.558417 -1.499254 -v -1.269518 3.666516 -0.478873 -v -1.603313 1.950525 -1.506739 -v -1.397201 2.921571 -1.499641 -v -1.575572 2.320596 -1.504129 -v -1.482236 2.974503 -0.463777 -v -1.001465 3.368694 -3.376809 -v -0.868190 3.282744 -4.431761 -v -0.842237 3.690423 -3.389737 -v -0.737687 3.582855 -4.467461 -v -0.726800 3.215547 -5.421790 -v -0.618965 3.488625 -5.460131 -v -0.526898 3.092799 -6.785158 -v -0.625865 3.163263 -6.120244 -v -0.588290 2.721057 -7.465162 -v -0.451304 2.195697 -7.522432 -v -0.379298 2.255772 -8.142409 -v -0.528383 2.712663 -8.089670 -v -0.785462 2.371980 -6.032110 -v -0.765218 2.771445 -6.080977 -v -0.644759 2.331846 -6.762777 -v -0.661409 2.741493 -6.772437 -v -0.240677 1.834500 -7.665503 -v -0.538457 1.910943 -6.572131 -v -0.474638 3.033159 -7.460692 -v -0.336911 3.311973 -7.475662 -v -0.319961 3.220986 -8.090930 -v -0.461717 2.988378 -8.080609 -v -0.161294 3.411099 -8.111796 -v 0.000000 3.575256 -8.209820 -v -0.981431 0.858444 -2.317090 -v -1.230479 1.035141 -1.464463 -v -1.130594 1.087989 -2.321509 -v -1.204037 1.366044 -2.312809 -v -1.297322 1.662159 -2.312395 -v -1.411364 1.967781 -2.319409 -v -1.123112 3.474102 -2.287129 -v -1.293296 2.873250 -2.291785 -v -1.146752 2.827110 -3.365470 -v -0.806600 1.027764 -3.483463 -v -0.693707 0.555483 -2.302843 -v -1.036868 1.625970 -3.434320 -v -1.423079 2.306682 -2.309623 -v -0.302078 0.401748 -2.273668 -v -1.100423 0.780384 -1.457728 -v -1.210385 0.743811 -0.338872 -v -1.504763 1.268439 -0.387724 -v -1.331147 1.321893 -1.472773 -v -1.668470 1.574979 -0.415135 -v -1.719488 1.951716 -0.429610 -v -1.498808 1.613946 -1.493956 -v 0.000000 3.917669 -8.607714 -v -0.000004 1.353765 -6.302464 -v -0.579155 1.335906 -7.058488 -v -0.444836 1.505019 -7.274275 -v -0.448526 1.545714 -7.306075 -v 0.000000 4.211949 3.287727 -v -0.000002 4.348749 2.593961 -v -0.607919 1.410090 -7.057557 -v -0.476447 1.556169 -7.267494 -v -0.443726 1.548915 -7.563982 -v -0.536579 1.481511 -7.340335 -v -0.344150 1.028698 7.652440 -v -0.278132 0.941932 7.752140 -v -1.197938 2.445849 7.753337 -v -1.190282 2.470041 7.758137 -v -1.230794 2.422050 7.627457 -v -1.229495 2.404689 7.641677 -v -1.186463 2.255070 7.829026 -v -1.197764 2.193894 7.792367 -v -1.199003 2.215476 7.782496 -v -1.244093 2.079903 7.580927 -v -1.213172 2.214537 7.720547 -v -1.179620 2.090784 7.834637 -v -1.213682 2.443854 7.694027 -v -1.228418 2.207055 7.653707 -v -1.229606 2.277243 7.618937 -v -1.176980 2.443917 7.813666 -v -1.210502 2.464629 7.689317 -v -1.179326 2.324856 7.846637 -v -1.185614 2.424846 7.801456 -v -1.225628 2.227791 7.664627 -v -1.173287 2.383071 7.839737 -v -0.879101 1.345452 -4.904773 -v -0.866900 1.397133 -4.324602 -v -0.469301 0.913491 -4.199384 -v -0.555299 0.762156 -3.412180 -v -0.197393 0.780639 -4.066962 -v -0.911753 1.258362 -3.471160 -v -1.158056 2.026071 -3.404260 -v -1.214732 2.315916 -3.385330 -v -1.037018 2.360721 -4.396334 -v -0.376640 2.938242 -10.725307 -v -0.443264 2.958135 -9.231702 -v -0.442958 2.927100 -10.048237 -v -0.199883 1.940196 -8.212884 -v -0.501992 2.754759 -9.240403 -v -0.362801 2.325438 -8.666195 -v -0.496274 2.712045 -8.625722 -v -0.249452 3.193700 -10.648869 -v -0.151421 2.166849 -10.119249 -v 0.000000 2.125134 -10.083279 -v 0.000000 2.101734 -10.417657 -v -0.145196 2.020104 -9.233773 -v 0.000000 2.078499 -9.698350 -v -0.324107 2.389272 -10.000570 -v -0.186728 2.172732 -9.791831 -v -0.255920 2.296332 -10.639358 -v -0.117767 2.143266 -10.430947 -v 0.000000 1.972479 -10.678987 -v 0.000000 1.793320 -9.027020 -v -0.202718 2.047821 -8.723288 -v -0.366518 2.403477 -9.243193 -v -0.256685 2.157168 -9.237164 -v -0.498263 2.717199 -10.036839 -v -0.092138 2.026344 -10.700377 -v -0.079661 1.731285 -11.068179 -v -0.411182 2.672648 -10.716697 -v -0.155177 1.678320 -11.766847 -v -0.215048 2.032389 -11.217010 -v 0.000000 2.262788 -12.567460 -v -0.103781 2.345439 -12.363101 -v -0.072596 0.558383 -12.280480 -v 0.000000 0.170486 -12.874330 -v 0.000000 0.426602 -12.284471 -v -0.087872 0.866687 -11.996022 -v -0.105995 1.718324 -12.407260 -v 0.000000 1.982046 -12.669606 -v -0.108212 1.091213 -12.451451 -v 0.000000 0.885095 -12.922123 -v 0.000000 4.432842 -1.653850 -v 0.000000 4.356717 -2.389648 -v -0.931436 3.836859 -2.264095 -v -0.484178 4.206684 -2.466241 -v -0.000003 4.636251 1.156184 -v -0.836591 4.310844 -0.403726 -v -0.530879 4.255392 -1.860175 -v -0.337133 4.550865 -1.286647 -v -0.634454 4.502475 -0.347335 -v -0.528098 4.509135 0.858371 -v -0.353633 4.656351 0.708917 -v -0.787820 4.324920 0.900224 -v -0.496475 4.426287 -1.321468 -v -0.738512 4.226496 -1.407832 -v -0.377354 4.807536 -0.346450 -v -0.255803 4.800555 0.639917 -v -0.196952 4.972194 0.550262 -v -0.523043 4.650603 -0.322537 -v 0.000000 4.974951 0.753857 -v -0.291002 5.061264 -0.420514 -v -0.230531 5.609394 -0.491101 -v -0.126830 6.335931 -0.051499 -v -0.073589 7.636790 -1.126523 -v -0.150587 5.710160 0.246983 -v 0.000000 5.181471 0.657083 -v -0.173396 5.206644 0.449081 -v -0.073757 6.139584 -1.227016 -v -0.104306 7.402701 -0.942577 -v -0.100049 6.961100 -0.420859 -v -0.044198 7.845045 -1.263627 -v -0.000003 4.514892 -1.764892 -v -0.160898 4.603905 -1.427278 -v -0.144674 4.705746 -1.645918 -v -0.078344 5.982624 -1.218763 -v 0.000000 6.153354 -1.323727 -v 0.000000 6.634104 -1.337254 -v -0.094355 5.470734 -1.291432 -v -0.121826 4.954044 -1.524457 -v 0.000000 4.878065 -1.721475 -v 0.000000 4.546959 -2.017246 -v 0.000000 4.496469 -1.616428 -v 0.000000 6.353507 0.053513 -v 0.000000 4.815771 0.902948 -v 0.000000 0.746993 -11.950120 -v 0.000000 1.192757 -12.818291 -v 0.000000 2.105220 -12.461259 -v 0.000000 2.662333 -12.501657 -v 0.000000 2.937909 -12.478191 -v 0.000000 1.654874 -12.775063 -v 0.000000 3.248692 -12.607402 -v 0.000000 5.487003 -13.978440 -v 0.000000 5.637066 -14.045316 -v 0.000000 5.680266 -14.353501 -v 0.000000 5.875746 -14.266533 -v 0.000000 6.246162 -14.172215 -v 0.000000 5.787390 -13.181346 -v 0.000000 4.814877 -11.880760 -v 0.000000 6.290856 -14.149002 -v -0.141725 3.485646 -10.652797 -v -0.138620 3.379190 -10.423867 -v -0.274442 3.122721 -10.036116 -v -0.448925 2.953818 -8.612252 -v -0.319937 3.153609 -8.605712 -v -0.299204 3.108810 -9.218320 -v -0.193232 3.336672 -8.598571 -v -0.174758 3.297102 -8.879228 -v -0.147431 3.263556 -9.172451 -v -0.129584 3.296360 -10.005277 -v -0.136655 3.246794 -9.591721 -v -0.110540 3.462891 -8.593322 -v 0.000000 3.989776 -8.759383 -v -0.085796 3.417213 -8.836718 -v 0.000000 3.431229 -8.915168 -v 0.000000 3.361595 -9.068591 -v -0.000005 3.328901 -9.994657 -v 0.000000 3.429149 -10.397138 -v 0.000000 3.539712 -10.614217 -v 0.000000 6.092526 -13.699922 -v 0.000000 5.229016 -12.339537 -v -0.000006 4.377036 -11.442758 -v -0.301643 2.754789 -11.360047 -v -0.204701 2.695653 -11.894410 -v -0.211289 3.368010 -11.182538 -v -0.126893 3.755327 -10.965844 -v -0.116603 4.225614 -11.509084 -v -0.253166 3.597077 -11.795255 -v 0.000000 5.374022 -13.843084 -v 0.000000 5.197172 -13.771539 -v -0.110699 3.357044 -12.390697 -v -0.128594 3.848981 -12.513577 -v -0.000006 3.592920 -12.787930 -v -0.162260 4.510911 -12.879640 -v -0.112859 4.621455 -11.971480 -v -0.123785 5.122674 -12.522758 -v -0.102227 5.805183 -13.450114 -v -0.093986 5.309763 -13.637678 -v -0.084956 5.571456 -13.896873 -v -0.075926 5.833146 -14.156075 -v 0.000000 6.014286 -14.302771 -v 0.000000 6.246516 -14.488441 -v -0.073414 6.154620 -14.312218 -v -0.068423 6.190806 -14.020712 -v 0.000000 6.344481 -14.448197 -v 0.000000 6.981207 -0.353604 -v 0.000000 6.061249 -1.275164 -v -0.000004 5.974854 -1.352005 -v 0.000000 5.471133 -1.390128 -v 0.000000 6.704060 -1.302871 -v 0.000000 7.881681 -1.207760 -v 0.000000 7.285491 -1.392268 -v 0.000000 6.794930 -1.358278 -v -0.036473 7.776766 -1.378334 -v 0.000000 7.660941 -1.449339 -v -0.039914 7.270251 -1.342484 -v -0.057485 6.693021 -1.263106 -v -0.112214 6.753111 -0.825910 -v -0.093944 7.300551 -1.069976 -v -0.061349 7.570263 -1.215099 -v -0.053876 7.509920 -1.293559 -v 0.000000 4.502811 -1.990149 -v 0.000000 3.279280 -9.578547 -v 0.000000 4.299623 -13.140718 -v -1.518407 1.834275 6.360049 -v -1.097210 1.338226 7.167204 -v -1.215083 1.289559 7.014497 -v -1.354931 1.393737 6.996946 -v -1.411241 1.540806 6.934396 -v -1.373210 1.761693 7.229267 -v -1.470905 1.663032 6.876077 -v -1.387670 1.944634 7.205862 -v -1.387421 2.217396 7.182797 -v -1.490699 1.785258 6.817786 -v -1.489217 2.066433 6.672647 -v -1.373819 2.490672 7.166057 -v -1.460774 2.284230 6.548747 -v -1.011128 1.382451 7.110107 -v -1.087707 1.291362 6.983944 -v -1.117092 1.256835 6.880019 -v -1.059249 1.325840 6.844146 -v -1.015733 1.372476 6.709156 -v -0.851606 1.595154 7.107407 -v -0.898040 1.513902 7.139175 -v -0.742319 1.529484 7.460567 -v -1.056959 1.324728 6.958547 -v -1.026216 1.369773 6.933131 -v -0.999660 1.469268 6.815123 -v -0.272111 1.674930 7.868028 -v -0.711368 1.609389 7.436687 -v -0.412445 2.112591 5.349350 -v -0.412442 2.112591 7.154447 -v -0.765350 2.005449 5.331259 -v -0.963422 1.682241 5.311613 -v -0.963422 1.682241 6.087290 -v -0.965124 1.541031 6.771355 -v -0.765347 2.005449 6.643341 -v -3.123149 -0.620421 2.442191 -v -2.264591 1.020273 2.604362 -v -1.969388 1.204242 1.832933 -v -2.107220 1.085553 3.333797 -v -2.405988 0.521607 3.079754 -v -2.746841 -0.345042 2.773073 -v -2.872814 -0.223458 2.683175 -v -3.020550 -0.283113 2.271881 -v -3.399539 -0.975264 2.150519 -v -3.505139 -0.989130 1.733307 -v -1.850048 1.137786 1.362035 -v -2.118842 0.996459 1.785515 -v -2.230508 0.841911 3.239237 -v -2.645082 0.165009 2.904071 -v -2.554571 0.405798 1.706570 -v -3.889230 -1.567923 1.281458 -v -3.819989 -1.405683 0.847520 -v -2.686013 0.298284 2.564276 -v -2.468390 0.671649 2.699714 -v -3.794130 -1.389573 0.685667 -v -3.468899 -1.017420 0.749330 -v -3.201479 -0.661389 0.974183 -v -2.919338 -0.112050 1.511024 -v -2.358732 0.381360 1.128905 -v -2.312772 0.717237 1.761527 -v -1.960790 0.995499 1.249865 -v -2.852093 -0.234153 0.991595 -v -3.051839 -0.501525 0.902843 -v -4.187521 -1.927890 0.515990 -v -4.252350 -2.003429 0.610364 -v -4.086030 -1.799280 0.539087 -v -4.086240 -1.783382 0.656018 -v -3.420001 -0.813168 1.165130 -v -3.640260 -1.341453 1.789262 -v -3.888840 -1.679403 1.427447 -v -4.301790 -2.106300 0.758531 -v -4.320294 -2.114246 0.595010 -v -4.266840 -2.039190 0.523544 -v -4.137540 -1.898160 0.962066 -v -4.269990 -2.042520 0.760736 -v -4.165111 -1.983180 1.051874 -v -4.050271 -1.827840 0.525740 -v -4.276920 -2.078250 0.493781 -v -4.240951 -2.059650 0.515363 -v -4.292340 -2.125350 0.538499 -v -4.331640 -2.150850 0.521714 -v -4.362630 -2.199330 0.578303 -v -4.308361 -2.145150 0.588410 -v -4.275240 -2.130300 0.753287 -v -4.123470 -2.020200 1.043069 -v -4.221210 -2.076780 0.694529 -v -4.023631 -1.833960 0.632639 -v -4.061970 -1.962540 0.944636 -v -3.743400 -1.569453 1.029653 -v -3.742769 -1.429323 0.663605 -v -4.301910 -2.150340 0.671981 -v -2.043056 0.602232 3.425927 -v -2.258036 0.370140 3.203927 -v -2.506124 0.038721 3.010214 -v -2.571374 -0.390084 2.567996 -v -2.881896 -0.750588 2.342972 -v -2.989106 -0.738087 2.496668 -v -3.270959 -1.107684 2.197226 -v -3.815399 -1.740183 1.411233 -v -3.507779 -1.461003 1.752681 -v -3.577529 -1.449453 1.843527 -v -3.862500 -1.742493 1.471377 -v -1.789499 0.492576 3.077303 -v -2.021438 0.293649 2.923781 -v -2.269356 -0.020310 2.759306 -v -2.688383 -0.335601 1.713416 -v -3.188609 -1.114308 2.071943 -v -3.437219 -1.059630 0.800156 -v -3.282719 -0.871644 0.887531 -v -3.128219 -0.683658 0.974903 -v -3.288121 -1.071435 1.344254 -v -2.980469 -0.503025 1.020530 -v -2.725658 -0.176301 1.201262 -v -2.283752 0.336366 1.190807 -v -2.016848 0.639942 1.180196 -v -2.162834 0.340101 1.936583 -v -1.783943 0.885870 1.164173 -v -1.826489 0.666888 2.102021 -v -1.667423 0.575112 3.222288 -v -0.960230 1.129269 -5.263156 -v -0.966443 0.936024 -5.301796 -v -0.586721 1.543770 -5.707937 -v -0.573191 1.481184 -6.379386 -v -0.622403 1.494018 -6.431498 -v -0.787826 1.223589 -6.341531 -v -0.865634 1.277337 -5.668992 -v -0.685799 1.453947 -6.034034 -v -0.705242 1.307037 -6.636847 -v -0.810665 1.147398 -6.417789 -v -0.995045 1.007676 -6.005297 -v -0.999077 0.911910 -6.064396 -v -1.186713 0.659090 -5.687936 -v -0.750377 1.125795 -6.375820 -v -0.928778 0.889239 -6.048467 -v -0.678476 1.161390 -5.599633 -v -0.820115 0.957321 -5.293453 -v -0.578963 1.277547 -6.066640 -v -0.556718 1.371750 -6.452497 -v -0.507761 1.510002 -6.872667 -v -0.495065 1.449207 -6.915778 -v -0.718073 1.244490 -6.686077 -v -0.675095 1.219143 -6.663457 -v -0.616118 1.352640 -7.081982 -v -0.416342 1.383552 -5.789503 -v -0.452081 1.560486 -6.047740 -v -1.008416 2.808030 -4.398251 -v -0.866336 2.792796 -5.372530 -v -0.257687 1.645710 -7.004604 -v -0.241226 1.373790 -6.264847 -v -0.218069 1.217745 -5.854329 -v -0.567731 1.212900 -5.411834 -v -0.631370 1.086015 -4.898322 -v -0.396458 1.139865 -5.260213 -v 0.000000 1.302540 -5.848573 -v -0.425183 0.971436 -4.654093 -v -0.172790 1.045695 -5.183322 -v -0.237995 0.631563 -3.335020 -v 0.000000 0.788476 -4.042661 -v -0.430640 -0.027180 2.549786 -v -0.773102 0.073425 3.357170 -v -0.747320 0.110787 4.019179 -v -0.425042 -0.000501 3.366440 -v -0.423176 -0.004236 1.562138 -v -0.788873 0.059226 2.548139 -v -1.304420 0.560907 3.959061 -v -1.308824 0.491214 3.372017 -v -1.405442 0.598095 3.375677 -v -1.381070 0.634992 2.528726 -v -1.501091 0.655275 3.364607 -v -1.278149 0.632409 1.461680 -v -1.303058 0.502350 2.539541 -v -1.064738 0.242619 3.359240 -v -1.081523 0.228915 2.545418 -v -0.777563 0.078411 1.548149 -v -1.078139 0.411525 0.771347 -v -0.758216 0.132228 0.941867 -v -0.949151 0.427518 -0.310606 -v -1.260476 0.715602 0.833048 -v -1.375166 0.932265 0.949484 -v -1.330739 1.007115 -0.357943 -v -1.064567 0.274593 1.512227 -v -1.365467 0.829185 1.432706 -v -1.468076 0.974406 1.417931 -v -1.583663 1.224930 0.758084 -v -1.685375 2.340369 -0.444295 -v -1.328714 3.653046 0.790955 -v -1.586138 2.968503 0.781358 -v -1.629980 2.931231 1.681139 -v -1.359305 3.578568 1.697666 -v -1.767221 2.341368 0.766394 -v -1.793780 1.959261 0.752549 -v -1.790072 2.346420 1.642211 -v -1.749122 1.582761 0.783929 -v -1.816748 2.018694 1.612595 -v -1.731917 1.429797 1.406207 -v -1.575563 1.222809 1.062590 -v -1.663601 2.862522 2.582717 -v -1.890200 2.046729 2.581160 -v -1.163507 3.788115 3.291173 -v -1.377437 3.473604 2.586371 -v -1.828625 2.249058 3.285530 -v -1.832732 2.327961 2.577545 -v -1.710845 2.789400 3.272930 -v -1.868078 1.545960 1.838060 -v -1.815893 1.720821 1.598738 -v -1.955033 1.808913 2.586737 -v -1.897286 1.951347 3.305027 -v -1.857158 1.867578 3.738680 -v -1.820975 2.185446 3.720740 -v -1.853999 2.120766 4.106810 -v -1.740386 2.726049 3.720050 -v -1.404032 3.199014 4.213919 -v -1.403939 3.371979 3.277070 -v -1.764635 1.265703 1.438313 -v -1.664654 1.142403 1.264406 -v -1.784705 1.387101 4.366463 -v -1.842455 1.786473 4.098889 -v -1.851707 1.572138 3.741350 -v -1.730696 1.218675 4.008260 -v -1.918853 1.687287 3.325937 -v -1.833353 1.472112 4.068230 -v -1.552577 0.759345 2.449883 -v -1.590239 0.654744 3.308987 -v -1.459784 0.722658 2.503244 -v -1.554950 0.739275 3.759800 -v -1.684868 0.771348 3.694190 -v -1.662851 1.052307 4.282069 -v -1.713701 1.007112 3.905900 -v -1.600988 0.895854 4.020050 -v -1.859204 1.093770 3.668690 -v -2.055341 1.253532 3.344537 -v -1.830998 1.326228 3.727130 -v -2.000865 1.466409 3.349817 -v -1.992764 1.423911 2.593226 -v -2.011919 1.605765 2.592380 -v -1.876643 1.369989 1.853147 -v -2.096177 1.258239 2.581310 -v -1.909028 0.794721 3.572717 -v -1.678604 0.962046 1.308467 -v -1.746029 1.071669 1.149857 -v -1.574522 1.001313 1.415906 -v -1.672337 0.741063 2.356685 -v -1.453904 2.338293 5.750959 -v -1.327481 2.943366 5.597393 -v -1.676444 2.518596 4.996492 -v -1.389485 3.042453 5.151325 -v -0.785555 1.504506 -5.393353 -v -0.822398 1.646877 -5.314512 -v -0.925169 2.013060 -5.312743 -v -0.756962 2.002734 -5.931311 -v -0.643919 1.663434 -5.767154 -v -0.923027 2.383908 -5.335334 -v -1.830110 0.988317 1.006133 -v -2.089100 0.694719 1.108394 -v -2.550195 0.018885 1.138058 -v -2.650146 0.027240 1.077374 -v -2.794952 -0.141840 1.111931 -v -2.832726 -0.322395 1.066157 -v -4.330979 -2.125949 0.594299 -v -4.188666 -1.964934 0.485663 -v -4.156621 -1.952369 0.505541 -v -4.078771 -1.824630 0.491603 -v -3.770459 -1.403163 0.617771 -v -3.289470 -0.788454 0.829556 -v -1.032233 0.289026 3.989090 -v -1.448786 0.697206 3.941420 -v -1.056344 1.006468 6.947868 -v -1.355195 1.020312 6.341837 -v -1.309658 0.871464 6.043759 -v -1.257899 0.911613 6.402407 -v -1.139372 1.114092 6.716714 -v -1.181330 0.991924 6.683746 -v -1.107101 1.071007 6.816199 -v -1.041563 1.173102 6.803680 -v -1.014644 1.147099 6.905239 -v -0.966956 1.104532 7.028775 -v -0.941051 1.183395 6.938569 -v -0.904907 1.151766 7.055986 -v -0.853526 1.171917 7.043090 -v -0.603983 1.132411 7.157959 -v -0.782741 1.171746 6.911570 -v -1.300721 1.125141 6.636235 -v -0.383321 1.033771 7.342098 -v -0.635036 1.084567 6.977870 -v -1.015157 1.235376 6.785358 -v -0.930452 1.256781 6.709229 -v -0.961718 1.420638 6.642830 -v -0.992822 1.309986 6.687014 -v -0.885624 1.217190 6.765932 -v -0.733691 0.972588 5.316173 -v -0.426440 0.750844 6.688579 -v 0.000000 0.979894 7.537849 -v -0.733691 0.972588 6.216080 -v -0.913013 1.292895 5.308463 -v -0.913010 1.292895 5.997829 -v 0.000000 1.530363 4.548833 -v 0.000000 2.189652 5.903419 -v -0.977465 1.219512 6.820903 -v -1.087643 1.189302 6.756611 -v -1.205030 1.195125 6.831128 -v -1.320131 1.194480 6.746543 -v -1.439729 1.422741 6.753317 -v -1.483520 1.525296 6.661521 -v -1.507064 1.627854 6.569756 -v -1.233659 1.231206 6.897647 -v -1.373051 1.297614 6.850214 -v -1.499102 1.480170 6.445370 -v -1.436729 1.310796 6.667574 -v -1.493612 1.310844 6.366139 -v -1.448540 1.149045 6.332810 -v -1.563155 1.735368 5.993540 -v -1.544255 1.637781 6.191420 -v -1.590554 1.486725 5.854159 -v -1.555580 1.421796 6.071540 -v -1.518872 1.203369 6.011809 -v -1.685786 1.582713 5.352380 -v -1.616819 1.542645 5.616738 -v -1.462880 2.146295 6.001260 -v -1.496534 1.968105 6.182719 -v -1.559021 1.818693 5.757800 -v -1.599794 1.269099 5.529920 -v -1.554863 1.240575 5.775379 -v -1.507163 1.030659 5.497880 -v -1.424015 1.019949 6.003920 -v -1.455077 1.031064 5.753928 -v -1.628012 1.888248 5.486629 -v -1.206635 0.778522 6.518927 -v -1.253288 0.706345 6.132710 -v -1.317536 0.629404 5.589020 -v -1.257515 0.687271 5.856770 -v -1.332587 0.864427 5.782100 -v -1.401605 0.822217 5.525060 -v -1.475216 0.778356 5.256169 -v -1.674476 1.280304 5.264569 -v -0.392018 0.028131 0.895826 -v -0.913010 1.288047 6.617625 -v -0.226352 0.992911 7.713404 -v -0.782541 1.137691 7.151186 -v -0.832229 1.122886 7.188195 -v -0.000006 1.557180 -7.089445 -v -0.000005 3.553362 -7.504491 -v -0.268532 2.272831 9.543152 -v 0.000000 1.147224 -11.551182 -v 0.000000 1.656130 -11.028982 -v 0.000000 0.144829 -13.442556 -v -0.000011 7.621251 -0.858355 -v -0.000002 4.489125 1.784207 -v -0.000004 1.867887 -8.237753 -v 0.000000 7.913421 -1.504253 -v -0.000005 0.553715 -13.050191 -v -0.000006 3.837008 -10.916074 -v 0.000000 1.059918 -5.157254 -v -4.330979 -2.125949 0.594299 -v -4.320294 -2.114246 0.595010 -v -4.240951 -2.059650 0.515363 -v -4.188666 -1.964934 0.485663 -v -4.188666 -1.964934 0.485663 -v -4.156621 -1.952369 0.505541 -v -0.904907 1.151766 7.055986 -v -1.024784 1.269969 6.774074 -v -1.058811 1.242488 6.790955 -v -1.100289 1.242978 6.829710 -v -1.015157 1.235376 6.785358 -v -0.930452 1.256781 6.709229 -v -0.400425 0.976938 7.688704 -v -0.159956 0.809698 7.818166 -v -0.900350 1.080331 7.199248 -v 0.000000 3.803309 -8.451863 -v -0.387191 2.295267 9.450975 -v -0.661619 1.136829 7.306580 -v 0.000000 3.835392 -8.801773 -v 0.000000 1.591368 -9.223554 -v -0.083921 1.245576 -11.593570 -v -0.071318 0.369836 -12.971261 -v 0.000000 1.499709 -9.353113 -v -4.252350 -2.003429 0.610364 -v -4.292340 -2.125350 0.538499 -v -4.023631 -1.833960 0.632639 -v -0.995045 1.007676 -6.005297 -v -0.179474 0.876564 -4.518944 -v -4.188666 -1.964934 0.485663 -v -0.853526 1.171917 7.043090 -v -1.015157 1.235376 6.785358 -v -1.058811 1.276457 6.790954 -v -1.149968 1.186905 6.775416 -v -1.413314 1.195401 6.613931 -v -0.913010 1.288047 6.617625 -v 0.000000 5.727343 0.375541 -v -0.190790 6.107083 -0.611197 -v -0.131942 6.201291 0.012722 -v 0.000000 6.196429 0.134297 -v -0.176378 6.242195 -0.651696 -v 0.000000 0.890935 -4.487016 -v -0.183584 6.174639 -0.631446 -v -0.076051 6.061104 -1.222890 -v -0.129386 6.268611 -0.019389 -v 0.000000 6.274968 0.093905 -v -0.494044 4.579412 0.180791 -v -0.287153 4.889865 0.101906 -v -0.389423 4.725579 0.158690 -v -0.232199 5.133954 0.014283 -v -0.190559 5.659777 -0.122059 -v -0.106132 6.857105 -0.623385 -v -0.161366 6.154187 -0.299238 -v -0.151604 6.289063 -0.351598 -v -0.156485 6.221625 -0.325418 -v -0.341971 4.627254 -0.874908 -v -0.261014 4.756641 -0.996184 -v -0.084850 6.723066 -1.044508 -v -0.206414 5.007654 -0.972486 -v -0.162443 5.540064 -0.891267 -v -0.134567 6.044853 -0.914980 -v -0.125068 6.190889 -0.939356 -v -0.129817 6.117871 -0.927168 -v -0.072439 7.257837 -1.214364 -v -0.016736 7.686204 -1.041330 -v 0.000000 7.716813 -0.986566 -v -0.034011 7.494805 -1.374483 -v 0.000000 7.488658 -1.422513 -v -0.764140 1.127336 -4.275962 -v -0.080261 1.662603 -9.361574 -v -0.446095 2.955976 -8.921977 -v -0.499133 2.733402 -8.933063 -v -0.364660 2.364457 -8.954694 -v -0.229702 2.102494 -8.980226 -v -0.309571 3.131209 -8.912016 -v -1.121324 0.711048 -5.774669 -v -0.100057 1.353394 8.199059 -v -0.140344 3.136857 7.562765 -v -0.148687 3.222121 7.256688 -v -0.154912 3.305658 6.963875 -v -0.162274 3.383073 6.634371 -v -0.171635 3.491325 6.242572 -v -0.179530 3.616561 5.792591 -v -0.182732 3.722278 5.306861 -v -0.100301 2.559268 9.411632 -v -0.089954 2.661516 9.206971 -v -0.095183 2.750950 8.939371 -v -0.106555 2.844907 8.621837 -v -0.118159 2.948985 8.260487 -v -0.129790 3.045825 7.897576 -v -0.188516 4.202499 3.293558 -v -0.183841 4.054734 3.778147 -v -0.180031 3.937958 4.277248 -v -0.181495 3.807210 4.796773 -v -0.102956 1.382955 8.302106 -v -0.105564 1.517490 8.547131 -v -0.108856 1.668424 8.829556 -v -0.117848 1.817220 9.107386 -v -0.133817 2.051086 9.430861 -v -0.128432 1.971387 9.331757 -v -0.139202 2.130784 9.509506 -v -0.109991 2.495782 9.505816 -v -0.119684 2.432295 9.567991 -v -0.134264 2.289700 9.602544 -v -0.175801 4.455259 1.779792 -v -0.182102 4.331426 2.595908 -v -0.258335 2.521089 9.405805 -v -0.212522 -0.017400 3.370384 -v -0.207055 0.037062 4.065334 -v -0.202094 0.117184 4.710430 -v -0.201391 0.089486 5.078036 -v -0.206050 0.077254 5.401523 -v -0.195554 0.223231 6.757909 -v -0.182377 0.286351 7.090038 -v -0.208738 0.162694 6.407975 -v -0.214505 0.060091 5.721499 -v -0.216701 0.086153 6.059344 -v -0.215321 -0.054326 2.548478 -v -0.196010 0.005506 0.863270 -v -0.211589 -0.033660 1.556562 -v -0.151042 0.399174 -2.266588 -v -0.182324 0.243883 -1.395216 -v -0.272041 0.145998 -0.262537 -v -0.580715 0.076990 4.035890 -v -0.569746 0.118915 4.655710 -v -0.575035 0.115201 5.011827 -v -0.534713 0.351032 6.980509 -v -0.574322 0.270779 6.655052 -v -0.590515 0.121351 5.331623 -v -0.609364 0.197930 6.311780 -v -0.613793 0.120730 5.643274 -v -0.625109 0.137915 5.970244 -v -0.119002 0.627711 -3.324415 -v -0.599072 0.036462 3.361805 -v -0.575117 0.080179 0.918846 -v -0.600370 0.037087 1.555143 -v -0.609757 0.016023 2.548962 -v -0.516488 0.451174 7.278847 -v -0.512430 0.458782 7.295474 -v -0.576527 0.363331 -1.424751 -v -0.746614 0.305371 -0.264526 -v -0.927959 0.242123 4.910411 -v -0.879685 0.221256 4.584761 -v -0.396647 0.696859 -3.373600 -v -0.497893 0.478615 -2.288256 -v -0.333347 0.847065 -4.133173 -v -0.302329 0.924000 -4.586518 -v -0.346654 1.467138 -6.156294 -v -0.317206 1.300648 -5.821917 -v -0.284624 1.092780 -5.221767 -v -0.889777 0.199906 4.004135 -v -0.918920 0.158022 3.358205 -v -0.935198 0.144070 2.546778 -v -0.921065 0.176502 1.530188 -v -0.918178 0.271876 0.856607 -v -0.678326 3.535740 -4.963796 -v -0.339559 3.794553 -4.992594 -v 0.000000 3.909469 -5.008794 -v -0.797495 3.249145 -4.926776 -v -0.844649 1.522005 -4.819557 -v -0.937376 2.800413 -4.885390 -v -0.980023 2.372314 -4.865833 -v -0.958121 1.974417 -4.877053 -v -1.092240 1.808779 -3.420586 -v -0.991073 1.935774 -4.441362 -v -0.703759 2.023032 8.820601 -v -0.511712 2.051268 9.155821 -v -0.900407 2.030173 8.531101 -v -1.047478 2.073702 8.184782 -v -0.113149 1.739460 8.962193 -v -0.321811 1.971715 9.231791 -v -0.361470 2.050324 9.298208 -v -0.041024 7.816984 -1.310769 -v -0.019031 7.721359 -1.412301 -v -0.176821 4.646301 0.932550 -v -0.330065 4.572790 1.005317 -v -0.127906 4.808163 0.771432 -v -0.098480 4.973572 0.652059 -v -0.063421 6.344719 0.001007 -v -0.086702 5.194057 0.553082 -v -0.050030 6.971153 -0.387232 -v -0.022105 7.863363 -1.235694 -v -0.075298 5.718751 0.311262 -v -0.065976 6.198860 0.073509 -v -0.064699 6.271790 0.037258 -v -0.008374 7.701509 -1.013948 -v -0.090431 0.743531 -12.701984 -v -0.443111 2.942617 -9.639969 -v -0.500128 2.735979 -9.638621 -v -0.072605 2.049301 -9.466062 -v -0.221707 2.164950 -9.514498 -v -0.345313 2.396374 -9.621881 -v -0.286823 3.115765 -9.627218 -v -0.409799 2.932671 -10.386772 -v -0.454723 2.694923 -10.376768 -v -0.261947 3.158210 -10.342492 -v -0.290014 2.342802 -10.319963 -v -0.308001 2.367319 -10.151452 -v -0.478621 2.707150 -10.190189 -v -0.429209 2.929410 -10.188605 -v -0.269060 3.138009 -10.168095 -v -0.132728 3.325180 -10.150924 -v 0.000000 3.361886 -10.127089 -v -0.000014 2.105220 -12.461259 -v -0.254819 3.072582 -11.268055 -v -0.232882 3.219802 -11.836754 -v 0.000000 4.975075 -12.058704 -v -0.118322 4.872064 -12.247119 -v -0.145427 4.179946 -12.696609 -v 0.000000 3.951504 -13.039208 -v -0.217427 2.932348 -11.868374 -v -0.275271 2.933772 -11.308237 -v -0.109066 2.679843 -12.341629 -v -0.192465 2.444295 -11.862893 -v -0.277131 2.550299 -11.319557 -v -0.112976 2.927302 -12.325741 -v -0.104893 2.030640 -12.385267 -v -0.176575 2.117885 -11.821964 -v -0.235786 2.205387 -11.251264 -v -0.107367 5.642466 -13.229023 -v 0.000000 5.732892 -13.099184 -v 0.000000 5.884174 -13.345831 -v -0.089506 5.439608 -13.766284 -v -0.104550 5.731641 -13.350189 -v 0.000000 5.809293 -13.218571 -v -0.081325 5.676683 -14.001101 -v -0.090508 5.938873 -13.647932 -v 0.000000 6.004039 -13.549540 -v -0.081294 6.043985 -13.803465 -v -0.079469 6.066023 -14.227453 -v 0.000000 6.224835 -13.955671 -v 0.000000 6.082816 -14.357561 -v 0.000000 6.158680 -13.827797 -v -0.074859 6.117395 -13.912088 -v -0.077698 5.949584 -14.191765 -v -0.040805 5.916960 -14.223951 -v 0.000000 6.167389 -14.425179 -v -0.046878 6.221632 -14.364780 -v 0.000000 6.284554 -14.289021 -v -0.195589 3.339673 -10.650833 -v -0.202013 3.209540 -10.020697 -v -0.256585 3.245140 -8.602141 -v -0.223318 3.186183 -9.195385 -v -0.169091 3.561668 -11.074191 -v -0.184885 3.911345 -11.652169 -v -0.120727 4.235218 -12.242529 -v -0.143023 4.816792 -12.701199 -v -0.093592 5.688319 -13.673494 -v -0.242165 3.214156 -8.895622 -v -0.211739 3.181280 -9.609469 -v -0.200284 3.268700 -10.383180 -v -0.200894 3.231595 -10.159510 -v -0.131875 4.526005 -12.471864 -v -0.100677 5.476114 -13.433351 -v -0.097028 5.585624 -13.558237 -v -0.085917 5.807778 -13.824516 -v -0.078610 5.938566 -13.979771 -v -0.073946 6.120568 -14.142096 -v -0.036717 6.193822 -14.246683 -v -0.076278 6.033490 -14.051927 -v -0.023449 6.253093 -14.326900 -v -0.313852 3.473502 -6.811047 -v -0.240718 3.408999 -7.483716 -v -0.553318 3.722833 -4.480975 -v -0.638371 3.878331 -3.389092 -v -0.464567 3.607459 -5.475414 -v -0.410081 3.534937 -6.162992 -v -0.240628 3.316042 -8.101362 -v -0.707807 4.021771 -2.365168 -v -0.508943 3.665146 -4.978194 -v -0.455321 2.971098 -8.346431 -v -0.512329 2.712354 -8.357697 -v -0.371050 2.290605 -8.404303 -v -0.201301 1.994008 -8.468086 -v 0.000000 1.909989 -8.526316 -v -0.319949 3.187297 -8.348321 -v -0.177263 3.373885 -8.355184 -v -0.098129 3.483091 -8.457928 -v -0.248606 3.280591 -8.351751 -v -0.000014 3.803309 -8.451863 -v -0.041800 3.512553 -8.172581 -v -0.447510 2.954897 -8.767115 -v -0.216210 2.075158 -8.851757 -v -0.314754 3.142409 -8.758864 -v -0.183995 3.316887 -8.738899 -v -0.098168 3.440052 -8.715020 -v -0.497704 2.722723 -8.779392 -v -0.363731 2.344948 -8.810444 -v -0.249375 3.229648 -8.748882 -v -0.057552 1.983867 -9.452366 -v 0.000000 3.653726 -8.306202 -v -0.058158 3.637040 -8.600517 -v -0.043497 3.626302 -8.819245 -v 0.000000 3.633310 -8.858470 -v -0.049072 3.643200 -8.454896 -v -0.051776 3.631310 -8.737202 -v -0.025983 3.830602 -8.749534 -v -0.024499 3.817363 -8.605142 -v 0.000000 3.933094 -8.774946 -v -0.012948 3.931325 -8.755766 -v -0.074893 3.558928 -8.456491 -v -0.084449 3.549633 -8.596906 -v -0.073672 3.541039 -8.726732 -v -0.062088 3.534406 -8.826925 -v 0.000000 3.530407 -8.887341 -v -0.238928 2.231600 -11.256454 -v -0.179189 2.171574 -11.828695 -v -0.104599 2.113806 -12.379411 -v -0.021007 6.282511 -14.437347 -v -0.009243 6.308505 -14.400448 -v -0.000007 6.341561 -14.376413 -v -1.157102 2.568877 7.777184 -v -1.031251 2.732025 7.791574 -v -0.786283 2.862028 7.787131 -v -0.540578 3.003961 7.764317 -v 0.000000 3.101682 7.723503 -v -0.270133 3.081000 7.736838 -v -0.135067 3.091341 7.730171 -v -1.092788 2.321625 8.064361 -v -1.006693 2.327649 8.282658 -v -0.877270 2.281029 8.637496 -v -0.514213 2.215135 9.272251 -v -0.394843 2.212105 9.410281 -v -0.708521 2.243032 8.963731 -v -0.273470 2.200493 9.503814 -v -0.136733 2.210242 9.556026 -v -1.008418 1.403086 7.464852 -v -0.966758 1.384145 7.424916 -v -0.925098 1.402957 7.385004 -v -1.110032 1.476985 7.560347 -v -1.176139 1.638355 7.631267 -v -1.199183 1.787347 7.667492 -v -1.209745 1.942747 7.689372 -v -1.211857 2.085344 7.707782 -v -0.983072 1.404515 7.505863 -v -1.083094 1.480690 7.605783 -v -1.151711 1.640153 7.684997 -v -1.173571 1.787477 7.727949 -v -0.942524 1.385019 7.464682 -v -0.901975 1.403293 7.423532 -v -1.185924 1.944414 7.749385 -v -1.195738 2.088064 7.771209 -v -1.197764 2.193894 7.792367 -v -0.824170 1.404937 7.543211 -v -0.860926 1.387237 7.589632 -v -0.897680 1.407324 7.636065 -v -0.989737 1.483129 7.752903 -v -1.063315 1.635229 7.866033 -v -1.089614 1.776942 7.929016 -v -1.115564 1.942103 7.962103 -v -0.927574 2.660133 8.156806 -v -0.716042 2.794846 8.130422 -v -0.247949 2.986233 8.083306 -v -0.493384 2.920306 8.106346 -v -0.123974 2.997405 8.079032 -v -1.111568 2.092630 8.010777 -v -1.219526 1.461850 7.354831 -v -1.105846 1.378012 7.290684 -v -1.056219 1.360312 7.256295 -v -1.006592 1.380371 7.221903 -v -1.275964 1.627587 7.381396 -v -1.311809 1.774390 7.387921 -v -1.322528 1.942024 7.387604 -v -1.342574 2.172348 7.480217 -v -1.169517 0.837635 6.660570 -v -1.212747 0.958971 6.568310 -v -1.322057 1.084082 6.520927 -v -1.366415 1.135764 6.501388 -v -1.445415 1.241552 6.514871 -v -1.461682 1.378555 6.578679 -v -0.118757 0.908146 7.776113 -v -0.102238 0.957934 7.753042 -v 0.000000 0.930195 7.784478 -v -0.077108 1.028776 7.605618 -v -0.100442 0.992708 7.514764 -v -0.213223 0.710702 5.338850 -v -0.213221 0.710701 6.749059 -v -0.102238 0.957934 7.753042 -v -0.568081 0.902747 7.579506 -v -0.499515 1.007318 7.593684 -v -0.451532 1.060906 7.503548 -v -0.475718 1.109600 7.323461 -v -0.467860 1.050831 7.219772 -v -0.568074 1.071054 7.074764 -v -0.426440 0.750844 6.688579 -v -0.674785 1.147991 7.060369 -v -0.849483 1.169967 7.049247 -v -0.852691 1.171915 7.041536 -v -0.901609 1.180493 6.931842 -v -0.952435 1.218890 6.806871 -v -0.974512 1.245647 6.748828 -v -0.976682 1.263244 6.737537 -v -0.866790 1.219668 6.767122 -v -0.755436 1.154754 6.868383 -v -0.597202 0.874083 6.425976 -v -0.666500 0.924095 5.320666 -v -0.508698 0.810210 6.562080 -v -0.540916 0.833460 5.329064 -v -0.795431 1.421548 7.518828 -v -0.767665 1.449714 7.493199 -v -0.820180 1.521693 7.299871 -v -0.781487 1.602271 7.272047 -v -0.588895 2.059020 6.898893 -v -0.588898 2.059020 5.340304 -v -0.874599 1.419213 7.394143 -v -0.849457 1.446484 7.360750 -v -0.893449 1.419157 7.361999 -v -0.862518 1.446621 7.337930 -v -0.973976 1.401533 7.200189 -v -0.941953 1.433556 7.177006 -v -0.901646 1.507411 7.142037 -v -0.901661 1.507277 7.142295 -v -0.908534 1.447106 7.257532 -v -0.506376 1.463947 7.853655 -v -0.360156 1.457072 7.945468 -v -0.187071 1.437848 7.999634 -v -0.105628 1.409633 8.033222 -v -0.096634 1.436373 8.005179 -v -0.086277 1.467188 7.972872 -v -0.102920 1.576536 7.928577 -v -0.121803 1.682959 7.889006 -v 0.000001 2.189652 7.275077 -v -0.345991 2.015098 -7.593967 -v -0.289591 2.097984 -8.177647 -v -0.398072 1.778326 -6.788368 -v -0.282760 2.186629 -8.694741 -v -0.255418 2.281002 -9.896200 -v -0.174029 2.161338 -10.669867 -v -0.311602 2.280322 -9.240178 -v -0.147355 1.881837 -11.142594 -v -0.119549 1.461948 -11.680208 -v -0.098042 0.978950 -12.223737 -v -0.297181 2.233476 -8.967460 -v -0.081513 0.650957 -12.491232 -v -0.283510 2.280662 -9.568190 -v -0.203891 2.243034 -10.375456 -v -0.229711 2.267084 -10.135351 -v -0.286175 2.142307 -8.436194 -v -0.289970 2.210052 -8.831100 -v -0.131996 1.947428 -9.259753 -v 0.000000 2.008741 -9.598274 -v -0.108832 1.819900 -9.305342 -v -0.049339 1.832943 -9.453801 -v 0.000000 1.838845 -9.520983 -v -0.046161 1.691904 -9.454356 -v 0.000000 1.688417 -9.532793 -v -0.096741 1.984336 -9.034204 -v -0.060755 1.925107 -9.059778 -v -0.048005 1.805043 -9.149770 -v -0.035889 1.623215 -9.285259 -v 0.000000 1.480913 -9.479207 -v -0.005835 1.480627 -9.488686 -v 0.000000 1.465410 -9.561747 -v -0.038313 1.960334 -8.873912 -v -0.499196 2.726589 -9.837730 -v -0.204218 2.168841 -9.653164 -v -0.280633 3.119243 -9.831667 -v -0.133120 3.271577 -9.798498 -v 0.000000 3.304090 -9.786602 -v -0.443035 2.934859 -9.844103 -v -0.036310 2.063900 -9.582206 -v -0.334710 2.392823 -9.811226 -v -0.206876 3.195410 -9.815084 -v -0.034154 1.996304 -9.525320 -v -0.269464 2.280832 -9.732195 -v -0.038734 1.835894 -9.487392 -v -0.030116 1.690160 -9.493574 -v 0.000000 3.950513 -4.759652 -v -0.188434 0.828601 -4.292953 -v -0.447242 0.942463 -4.426738 -v -0.754423 1.150122 -4.505904 -v 0.000000 0.839705 -4.264838 -v -0.317838 0.885532 -4.359845 -v -0.708007 3.559297 -4.715628 -v -0.354254 3.828682 -4.743542 -v -0.832843 3.265944 -4.679268 -v -0.855775 1.459569 -4.572080 -v -0.972896 2.804221 -4.641820 -v -1.008520 2.366518 -4.631083 -v -0.974597 1.955095 -4.659207 -v -0.531130 3.693990 -4.729585 -v 0.000000 0.880619 7.787120 -v 0.000000 1.957512 -8.823058 -v 0.788412 0.469182 -1.440535 -v 0.949152 0.427518 -0.310606 -v 1.210386 0.743811 -0.338872 -v 1.100424 0.780384 -1.457728 -v 0.576528 0.363331 -1.424751 -v 0.746614 0.305371 -0.264526 -v 0.302079 0.401748 -2.273668 -v 0.364644 0.257481 -1.408966 -v 0.497893 0.478615 -2.288256 -v 0.151042 0.399174 -2.266588 -v 0.182325 0.243883 -1.395216 -v 0.119002 0.627711 -3.324415 -v 0.212523 -0.017400 3.370384 -v 0.215322 -0.054326 2.548477 -v 0.544077 0.183225 -0.218446 -v 0.272041 0.145998 -0.262537 -v 0.735303 0.134406 4.623686 -v 0.747321 0.110787 4.019179 -v 0.580716 0.076990 4.035890 -v 0.569746 0.118915 4.655710 -v 0.425043 -0.000501 3.366440 -v 0.414111 0.043194 4.052600 -v 0.599073 0.036462 3.361805 -v 0.207055 0.037062 4.065334 -v 0.000000 0.130944 4.733126 -v 0.202095 0.117184 4.710430 -v 0.000000 0.030930 4.078070 -v 0.747288 0.139504 4.972197 -v 0.927960 0.242123 4.910411 -v 0.879685 0.221256 4.584761 -v 0.575035 0.115201 5.011827 -v 0.402783 0.090898 5.051456 -v 0.404190 0.103425 4.687736 -v 0.201391 0.089486 5.078036 -v 0.000000 0.088074 5.104615 -v 0.000000 0.066340 5.427113 -v 0.206050 0.077254 5.401523 -v 0.391110 0.237226 6.724459 -v 0.195555 0.223231 6.757908 -v 0.182377 0.286351 7.090038 -v 0.364755 0.314584 7.053168 -v 0.191223 0.368383 7.402485 -v 0.353349 0.425440 7.343808 -v 0.102238 0.957934 7.753042 -v 0.077109 1.028776 7.605618 -v 0.344151 1.028698 7.652439 -v 0.226353 0.992911 7.713404 -v 0.154215 1.035241 7.595179 -v 0.286446 1.068475 7.528789 -v 0.782541 1.137691 7.151186 -v 0.661620 1.136829 7.306580 -v 0.603984 1.132411 7.157959 -v 0.674786 1.147991 7.060369 -v 0.556227 1.107240 7.438728 -v 0.475719 1.109600 7.323461 -v 0.418170 1.099366 7.397717 -v 0.451532 1.060906 7.503548 -v 0.200883 1.005523 7.491678 -v 0.100443 0.992708 7.514764 -v 0.737712 1.087773 7.336395 -v 0.624666 1.045620 7.475090 -v 0.000000 0.659617 7.792789 -v 0.000000 0.842044 7.788106 -v 0.159957 0.809698 7.818165 -v 0.176667 0.660913 7.769928 -v 0.000000 0.499495 7.643269 -v 0.186939 0.511459 7.622265 -v 0.000000 0.350818 7.422409 -v 0.352899 0.545944 7.566257 -v 0.502584 0.581995 7.493086 -v 0.512431 0.458782 7.295474 -v 0.513144 0.449863 7.281170 -v 0.483015 0.727825 7.632405 -v 0.333363 0.701560 7.709418 -v 0.621225 0.768148 7.532959 -v 0.636789 0.634198 7.391329 -v 0.568082 0.902747 7.579506 -v 0.446847 0.867865 7.695375 -v 0.707223 0.942385 7.480309 -v 0.743523 0.817339 7.399426 -v 0.809892 0.994402 7.320856 -v 0.832230 1.122886 7.188195 -v 0.900350 1.080331 7.199247 -v 0.904908 1.151766 7.055986 -v 0.966957 1.104532 7.028775 -v 0.309030 0.838555 7.771639 -v 0.400425 0.976938 7.688704 -v 0.278133 0.941932 7.752140 -v 0.118757 0.908146 7.776113 -v 0.974610 0.929158 7.092916 -v 0.852438 0.877975 7.242527 -v 0.764310 0.689413 7.259150 -v 0.654714 0.505378 7.182827 -v 0.516488 0.451174 7.278847 -v 0.704673 0.387481 6.907848 -v 0.534714 0.351032 6.980509 -v 0.799029 0.563536 7.062317 -v 0.872016 0.453121 6.788566 -v 0.944778 0.634093 6.919909 -v 1.057062 0.570982 6.645979 -v 1.088826 0.706516 6.780196 -v 1.037319 0.815014 6.965506 -v 0.906285 0.744328 7.117725 -v 1.056345 1.006468 6.947868 -v 1.129230 0.901795 6.814305 -v 1.169517 0.837635 6.660570 -v 1.206636 0.778522 6.518927 -v 1.253289 0.706345 6.132710 -v 1.114395 0.510601 6.321710 -v 0.574323 0.270779 6.655052 -v 0.757536 0.304333 6.585647 -v 0.952932 0.367417 6.476990 -v 1.136355 0.461563 6.013939 -v 1.257516 0.687271 5.856770 -v 1.187013 0.402556 5.719851 -v 1.317537 0.629404 5.589020 -v 1.161939 0.378760 5.431072 -v 1.350177 0.590287 5.316800 -v 1.131981 0.361318 5.145022 -v 1.375074 0.558442 5.038369 -v 0.956742 0.219469 5.228363 -v 0.991815 0.230911 5.525332 -v 1.108632 0.344742 4.848625 -v 1.475217 0.778356 5.256169 -v 1.522185 0.755982 4.976873 -v 1.352622 0.567264 4.748600 -v 0.412101 0.088168 5.375933 -v 0.590515 0.121351 5.331623 -v 0.768930 0.154534 5.287313 -v 0.798576 0.165532 5.592230 -v 1.019766 0.246109 5.831659 -v 0.988044 0.300676 6.149660 -v 0.801252 0.226954 6.246830 -v 0.609364 0.197930 6.311779 -v 0.417477 0.168907 6.376730 -v 0.000000 0.209236 6.791359 -v 0.208738 0.162694 6.407974 -v 0.000000 0.156481 6.439219 -v 0.000000 0.044254 5.748680 -v 0.214506 0.060091 5.721499 -v 0.429012 0.075928 5.694319 -v 0.613794 0.120730 5.643274 -v 0.816816 0.177946 5.910890 -v 0.625110 0.137915 5.970244 -v 0.433404 0.097885 6.029599 -v 0.216702 0.086153 6.059344 -v 0.000000 0.074422 6.089089 -v 0.144525 3.506025 -7.491770 -v 0.201792 3.578382 -6.814765 -v 0.276315 3.645885 -6.171391 -v 0.310170 3.726294 -5.490697 -v 0.313852 3.473502 -6.811047 -v 0.410082 3.534937 -6.162992 -v 0.425913 3.368622 -6.807328 -v 0.240718 3.408999 -7.483716 -v 0.336912 3.311973 -7.475662 -v 0.240628 3.316042 -8.101362 -v 0.319962 3.220986 -8.090930 -v 0.161295 3.411099 -8.111796 -v 0.240678 1.834500 -7.665503 -v 0.257688 1.645710 -7.004604 -v 0.199884 1.940196 -8.212884 -v 0.448527 1.545714 -7.306075 -v 0.476448 1.556169 -7.267494 -v 0.539112 1.525422 -6.898022 -v 0.507762 1.510002 -6.872667 -v 0.510108 1.427016 -7.335085 -v 0.521817 1.454388 -7.379246 -v 0.443727 1.548915 -7.563982 -v 0.579156 1.335906 -7.058488 -v 0.616119 1.352640 -7.081982 -v 0.000000 1.689465 7.906006 -v 0.000000 1.577223 7.942846 -v 0.102920 1.576536 7.928577 -v 0.121803 1.682959 7.889006 -v 0.272112 1.674930 7.868027 -v 0.271137 1.575414 7.905256 -v 0.555954 1.557243 7.735546 -v 0.550611 1.636725 7.701256 -v 0.742320 1.529484 7.460567 -v 0.711369 1.609389 7.436687 -v 0.086277 1.467188 7.972872 -v 0.184184 1.470114 7.965120 -v 0.356143 1.480919 7.919915 -v 0.501440 1.483811 7.832011 -v 0.621159 1.471109 7.707720 -v 0.724058 1.452509 7.561075 -v 0.822493 1.446200 7.407862 -v 0.849457 1.446484 7.360750 -v 0.820180 1.521693 7.299871 -v 0.980423 1.417958 7.084307 -v 1.011129 1.382451 7.110107 -v 1.056960 1.324728 6.958547 -v 1.026217 1.369773 6.933131 -v 0.941953 1.433556 7.177006 -v 0.908535 1.447106 7.257532 -v 0.939936 1.419018 7.282726 -v 0.973976 1.401533 7.200189 -v 0.850671 1.419285 7.434948 -v 0.874599 1.419213 7.394142 -v 0.767665 1.449714 7.493199 -v 0.746774 1.423541 7.592715 -v 0.795431 1.421548 7.518828 -v 0.635187 1.442246 7.745333 -v 0.506377 1.463947 7.853655 -v 0.511599 1.442937 7.876547 -v 0.649220 1.425013 7.782948 -v 0.360156 1.457072 7.945467 -v 0.364443 1.431606 7.972756 -v 0.187071 1.437848 7.999634 -v 0.189243 1.413585 8.025587 -v 0.096634 1.436373 8.005178 -v 0.000000 1.434625 8.011285 -v 0.105628 1.409633 8.033222 -v 0.769488 1.406245 7.624363 -v 0.824170 1.404937 7.543211 -v 0.918290 1.385893 7.504446 -v 0.878853 1.403629 7.462059 -v 0.860927 1.387237 7.589632 -v 0.803564 1.388582 7.674816 -v 0.672118 1.404860 7.841801 -v 0.957726 1.405943 7.546875 -v 0.897681 1.407324 7.636065 -v 0.983072 1.404515 7.505863 -v 0.942524 1.385019 7.464682 -v 0.901976 1.403293 7.423531 -v 0.383822 1.376660 8.110682 -v 0.537701 1.393838 7.991468 -v 0.837636 1.408706 7.725254 -v 0.695015 1.422606 7.900669 -v 1.056156 1.484394 7.651218 -v 0.989738 1.483129 7.752903 -v 1.083094 1.480690 7.605783 -v 1.059112 1.400230 7.382830 -v 1.163910 1.469577 7.469475 -v 1.219527 1.461850 7.354831 -v 1.105846 1.378012 7.290684 -v 1.015228 1.382398 7.345387 -v 1.056219 1.360312 7.256295 -v 0.971345 1.402285 7.307949 -v 1.006593 1.380371 7.221903 -v 1.041841 1.358458 7.135857 -v 1.097211 1.338226 7.167204 -v 1.151397 1.271503 6.999184 -v 1.087708 1.291362 6.983944 -v 0.200111 1.357512 8.185737 -v 0.553633 1.412414 8.061825 -v 0.923320 1.481865 7.854587 -v 0.751805 1.495320 8.051482 -v 1.127283 1.641951 7.738727 -v 1.063315 1.635229 7.866032 -v 1.110033 1.476985 7.560347 -v 1.176139 1.638355 7.631267 -v 1.224996 1.634760 7.523807 -v 1.275144 1.454124 7.240187 -v 1.275964 1.627587 7.381396 -v 1.326933 1.620414 7.238987 -v 1.373211 1.761693 7.229267 -v 1.311810 1.774390 7.387921 -v 1.387671 1.944634 7.205862 -v 1.322528 1.942024 7.387604 -v 1.250409 1.787088 7.546576 -v 1.199183 1.787347 7.667492 -v 0.394890 1.398048 8.195772 -v 0.581513 1.513149 8.234276 -v 0.999348 1.628508 7.993338 -v 0.815892 1.631877 8.227547 -v 1.147959 1.787607 7.788406 -v 1.089615 1.776942 7.929016 -v 1.257387 1.939413 7.569346 -v 1.209745 1.942747 7.689372 -v 1.342575 2.172348 7.480217 -v 1.352067 2.338263 7.427687 -v 1.387422 2.217396 7.182797 -v 1.342575 2.172348 7.480217 -v 1.373820 2.490672 7.166057 -v 1.294770 2.532102 7.506557 -v 1.238823 2.340930 7.586386 -v 1.230795 2.422050 7.627457 -v 1.234152 2.261535 7.600157 -v 1.244094 2.079903 7.580927 -v 1.228419 2.207055 7.653707 -v 1.211857 2.085344 7.707781 -v 1.162104 1.946081 7.809398 -v 1.115565 1.942103 7.962103 -v 1.031271 1.766277 8.069626 -v 0.858531 1.757508 8.339116 -v 0.619023 1.658256 8.429867 -v 0.406352 1.516749 8.401046 -v 0.205911 1.384992 8.285470 -v 0.100057 1.353394 8.199059 -v 1.214208 2.188770 7.717457 -v 0.651822 1.775328 8.572427 -v 1.069026 1.938126 8.114807 -v 0.894636 1.883136 8.450686 -v 1.047478 2.073702 8.184782 -v 1.111568 2.092630 8.010777 -v 1.182948 2.233161 7.851377 -v 1.179621 2.090784 7.834637 -v 1.126710 2.097102 7.969667 -v 1.106550 2.226930 8.054207 -v 1.079028 2.416320 8.074515 -v 1.092789 2.321625 8.064361 -v 1.006693 2.327649 8.282658 -v 0.987456 2.446020 8.310556 -v 1.171107 2.320122 7.879097 -v 1.113603 2.548758 7.921816 -v 1.176981 2.443917 7.813666 -v 1.163682 2.397018 7.859356 -v 1.173288 2.383071 7.839737 -v 1.179327 2.324856 7.846636 -v 1.195836 2.586792 7.648397 -v 1.210503 2.464629 7.689316 -v 1.190283 2.470041 7.758137 -v 1.157102 2.568877 7.777184 -v 1.144596 2.758947 7.307598 -v 1.079964 2.751930 7.629907 -v 1.031251 2.732025 7.791574 -v 0.872610 2.624709 8.328406 -v 0.927574 2.660133 8.156806 -v 0.848361 2.384847 8.663476 -v 0.877270 2.281029 8.637496 -v 0.708522 2.243032 8.963731 -v 0.694146 2.332398 9.001245 -v 0.684621 1.892397 8.714986 -v 0.703759 2.023032 8.820601 -v 0.900408 2.030173 8.531101 -v 0.497418 1.972806 9.076187 -v 0.511713 2.051268 9.155821 -v 0.321811 1.971715 9.231791 -v 0.361471 2.050324 9.298208 -v 0.502419 2.300541 9.309047 -v 0.514213 2.215135 9.272251 -v 0.394843 2.212105 9.410281 -v 0.387192 2.295267 9.450975 -v 1.181667 2.724576 6.953297 -v 0.752196 2.827005 7.953977 -v 0.982539 2.695557 7.985207 -v 0.716043 2.794846 8.130422 -v 0.786283 2.862028 7.787131 -v 0.820371 2.897052 7.620287 -v 0.876699 2.945331 7.290977 -v 0.926010 2.982201 6.948767 -v 0.974307 3.031329 6.566297 -v 1.290258 2.689050 6.502546 -v 1.250427 2.812626 6.026449 -v 1.015305 3.131259 6.143333 -v 1.091511 3.329769 5.224496 -v 1.061331 3.240360 5.690906 -v 0.726747 3.460701 5.750815 -v 0.743448 3.566691 5.277687 -v 0.704028 3.366156 6.209093 -v 1.327482 2.943366 5.597393 -v 0.669861 3.259230 6.612320 -v 0.637893 3.182538 6.960979 -v 0.604656 3.123378 7.283537 -v 0.562743 3.045708 7.599047 -v 0.518415 2.962215 7.929586 -v 0.540579 3.003961 7.764317 -v 0.493384 2.920306 8.106346 -v 0.679890 2.762688 8.306867 -v 0.762723 2.567478 8.686997 -v 0.598353 2.694258 8.660836 -v 0.324546 3.365628 6.630440 -v 0.343269 3.480714 6.239542 -v 0.359058 3.592857 5.786156 -v 0.297372 3.207993 7.261970 -v 0.280686 3.127605 7.570429 -v 0.140344 3.136857 7.562765 -v 0.148687 3.222121 7.256687 -v 0.309822 3.284826 6.962750 -v 0.154912 3.305658 6.963875 -v 0.162274 3.383073 6.634371 -v 0.171636 3.491325 6.242572 -v 0.179530 3.616561 5.792591 -v 0.182733 3.722278 5.306861 -v 0.365463 3.697041 5.302405 -v 1.108209 3.438648 4.744079 -v 0.741867 3.673716 4.779359 -v 1.413729 3.125040 4.688398 -v 1.389486 3.042453 5.151325 -v 1.404033 3.199014 4.213919 -v 1.121784 3.551319 4.258739 -v 1.788564 2.671095 4.152533 -v 1.747296 2.596497 4.576942 -v 0.362988 3.788385 4.795018 -v 0.181495 3.807210 4.796773 -v 0.443559 2.460720 9.299537 -v 0.341751 2.449209 9.428987 -v 0.258335 2.521089 9.405805 -v 0.369699 2.581524 9.226277 -v 0.200604 2.562858 9.384016 -v 0.307989 2.655072 9.137687 -v 0.000000 2.555679 9.439246 -v 0.100302 2.559268 9.411632 -v 0.109992 2.495782 9.505816 -v 0.000000 2.491287 9.544005 -v 0.179910 2.660967 9.193696 -v 0.089955 2.661516 9.206971 -v 0.190368 2.747181 8.935636 -v 0.095184 2.750950 8.939371 -v 0.213111 2.838990 8.622107 -v 0.106555 2.844907 8.621837 -v 0.236319 2.938071 8.263367 -v 0.118159 2.948985 8.260487 -v 0.259581 3.034395 7.903246 -v 0.247950 2.986233 8.083306 -v 0.123975 2.997405 8.079031 -v 0.129790 3.045825 7.897576 -v 0.270133 3.081000 7.736837 -v 0.135067 3.091341 7.730171 -v 0.357936 2.709567 8.935786 -v 0.414945 2.789853 8.633687 -v 0.468354 2.878398 8.283106 -v 0.495741 2.624094 8.973136 -v 0.618654 2.501331 9.014657 -v 0.368949 3.862812 -4.494491 -v 0.434505 4.066239 -3.388447 -v 0.618966 3.488625 -5.460131 -v 0.678327 3.535740 -4.963796 -v 0.508943 3.665146 -4.978194 -v 0.464568 3.607459 -5.475414 -v 0.553318 3.722833 -4.480975 -v 0.638371 3.878331 -3.389092 -v 0.339559 3.794553 -4.992594 -v 0.543849 3.423990 -6.154593 -v 0.734799 3.798906 4.270558 -v 1.388064 3.272769 3.742223 -v 1.148592 3.678432 3.771743 -v 1.403940 3.371979 3.277069 -v 1.163508 3.788115 3.291173 -v 0.762930 3.922338 3.782633 -v 0.773943 4.052736 3.295432 -v 0.367677 4.042284 3.781042 -v 0.377028 4.193604 3.296573 -v 0.188517 4.202499 3.293557 -v 0.183841 4.054734 3.778147 -v 0.360057 3.924354 4.277819 -v 0.180031 3.937958 4.277248 -v 0.102956 1.382955 8.302106 -v 0.211130 1.515789 8.524104 -v 0.424926 1.671654 8.636567 -v 0.000000 1.519191 8.570156 -v 0.105564 1.517490 8.547131 -v 0.217716 1.669653 8.798027 -v 0.460962 1.818483 8.879627 -v 0.000000 1.667196 8.861087 -v 0.108856 1.668424 8.829556 -v 0.235701 1.817823 9.070906 -v 0.113149 1.739460 8.962193 -v 0.000000 1.971462 9.374177 -v 0.000000 2.052438 9.474586 -v 0.133818 2.051086 9.430861 -v 0.128433 1.971387 9.331757 -v 0.256869 1.971312 9.289336 -v 0.117849 1.817220 9.107386 -v 0.278409 2.128155 9.464476 -v 0.267639 2.049735 9.387136 -v 0.139203 2.130784 9.509506 -v 0.273470 2.200493 9.503814 -v 0.402495 2.128944 9.369587 -v 0.268532 2.272831 9.543152 -v 0.136733 2.210242 9.556026 -v 0.134264 2.289700 9.602544 -v 0.000000 2.426892 9.616756 -v 0.119685 2.432295 9.567991 -v 0.239373 2.437698 9.519227 -v 0.733692 0.972588 5.316173 -v 0.666500 0.924095 5.320666 -v 0.426444 0.750844 5.336720 -v 0.213223 0.710702 5.338850 -v 0.213222 0.710701 6.749059 -v 0.000000 2.189652 7.275076 -v -0.000000 2.189652 7.275076 -v 1.854000 2.120766 4.106810 -v 1.817886 2.060883 4.474732 -v 1.676445 2.518596 4.996492 -v 1.784790 2.001459 4.837373 -v 1.816056 1.717494 4.421183 -v 1.808952 1.664856 4.738643 -v 1.769970 1.330092 4.667004 -v 1.784706 1.387101 4.366463 -v 1.742349 1.295748 4.979033 -v 1.747020 1.619814 5.055710 -v 1.660191 1.000224 4.950203 -v 1.677156 1.018413 4.641562 -v 1.597695 1.006326 5.232381 -v 1.674477 1.280304 5.264569 -v 1.541046 0.746980 4.673993 -v 1.024068 0.308106 4.545835 -v 1.315611 0.590397 4.451360 -v 0.889777 0.199906 4.004134 -v 1.685787 1.582713 5.352380 -v 1.695060 1.945572 5.171840 -v 1.546446 2.435583 5.388470 -v 1.628013 1.888248 5.486629 -v 1.453905 2.338293 5.750959 -v 1.662852 1.052307 4.282069 -v 1.497357 0.769308 4.385693 -v 1.229607 2.277243 7.618937 -v 1.231536 2.339838 7.611917 -v 0.528099 4.509135 0.858371 -v 0.787821 4.324920 0.900224 -v 0.723396 4.261200 1.750264 -v 0.351597 4.421394 1.775378 -v 1.086168 4.049907 0.830774 -v 1.086969 3.982332 1.717826 -v 1.056804 4.037607 -0.456997 -v 0.836592 4.310844 -0.403726 -v 1.269519 3.666516 -0.478873 -v 1.328715 3.653046 0.790955 -v 1.359306 3.578568 1.697665 -v 0.758946 4.176072 2.597807 -v 1.134183 3.892794 2.592223 -v 0.364200 4.314102 2.597855 -v 0.175801 4.455259 1.779792 -v 0.182103 4.331426 2.595907 -v 1.006608 3.948726 -1.472503 -v 1.204536 3.558417 -1.499254 -v 1.482237 2.974503 -0.463777 -v 1.397202 2.921571 -1.499641 -v 1.586139 2.968503 0.781358 -v 1.685376 2.340369 -0.444295 -v 1.767222 2.341368 0.766394 -v 1.603314 1.950525 -1.506739 -v 1.719489 1.951716 -0.429610 -v 1.575573 2.320596 -1.504129 -v 1.123113 3.474102 -2.287129 -v 1.293297 2.873250 -2.291785 -v 0.931437 3.836859 -2.264095 -v 1.001466 3.368694 -3.376809 -v 0.842238 3.690423 -3.389737 -v 0.868191 3.282744 -4.431761 -v 0.737688 3.582855 -4.467461 -v 0.726801 3.215547 -5.421790 -v 0.797496 3.249145 -4.926776 -v 0.625866 3.163263 -6.120244 -v 0.526899 3.092799 -6.785158 -v 0.832843 3.265944 -4.679268 -v 0.972897 2.804221 -4.641820 -v 1.008417 2.808030 -4.398251 -v 0.765219 2.771445 -6.080977 -v 0.866337 2.792796 -5.372530 -v 0.661410 2.741493 -6.772437 -v 0.588291 2.721057 -7.465162 -v 0.474639 3.033159 -7.460692 -v 0.451305 2.195697 -7.522432 -v 0.644760 2.331846 -6.762777 -v 0.379299 2.255772 -8.142409 -v 0.528384 2.712663 -8.089670 -v 0.345991 2.015098 -7.593967 -v 0.289591 2.097984 -8.177647 -v 0.461718 2.988378 -8.080609 -v 0.785463 2.371980 -6.032110 -v 0.923028 2.383908 -5.335334 -v 0.538458 1.910943 -6.572131 -v 0.398073 1.778326 -6.788368 -v 0.756963 2.002734 -5.931311 -v 0.041801 3.512553 -8.172581 -v 0.098130 3.483091 -8.457928 -v 0.177264 3.373885 -8.355184 -v 0.074893 3.558928 -8.456491 -v 0.024499 3.817363 -8.605142 -v 0.000015 3.803309 -8.451863 -v 0.981432 0.858444 -2.317090 -v 0.693708 0.555483 -2.302843 -v 1.230480 1.035141 -1.464463 -v 1.130595 1.087989 -2.321509 -v 1.331148 1.321893 -1.472773 -v 1.204038 1.366044 -2.312809 -v 1.498809 1.613946 -1.493956 -v 1.297323 1.662159 -2.312395 -v 1.411365 1.967781 -2.319409 -v 1.423080 2.306682 -2.309623 -v 1.146753 2.827110 -3.365470 -v 0.555300 0.762156 -3.412180 -v 0.396648 0.696859 -3.373600 -v 0.806601 1.027764 -3.483463 -v 0.911754 1.258362 -3.471160 -v 1.036869 1.625970 -3.434320 -v 1.092240 1.808779 -3.420586 -v 1.214733 2.315916 -3.385330 -v 1.158057 2.026071 -3.404260 -v 1.330740 1.007115 -0.357943 -v 1.504764 1.268439 -0.387724 -v 1.668471 1.574979 -0.415135 -v 0.495066 1.449207 -6.915778 -v 0.444837 1.505019 -7.274275 -v 0.607920 1.410090 -7.057557 -v 0.536580 1.481511 -7.340335 -v 1.197939 2.445849 7.753336 -v 1.185615 2.424846 7.801456 -v 1.229496 2.404689 7.641676 -v 1.213683 2.443854 7.694027 -v 1.225629 2.227791 7.664627 -v 1.186464 2.255070 7.829026 -v 1.197765 2.193894 7.792366 -v 1.197765 2.193894 7.792366 -v 1.199004 2.215476 7.782496 -v 1.213173 2.214537 7.720547 -v 1.195739 2.088064 7.771209 -v 0.866901 1.397133 -4.324602 -v 0.991074 1.935774 -4.441362 -v 0.974598 1.955095 -4.659207 -v 0.855775 1.459569 -4.572080 -v 0.844650 1.522005 -4.819557 -v 0.822399 1.646877 -5.314512 -v 0.785556 1.504506 -5.393353 -v 0.879102 1.345452 -4.904773 -v 0.179475 0.876564 -4.518944 -v 0.188434 0.828601 -4.292953 -v 0.317838 0.885532 -4.359845 -v 0.302329 0.924000 -4.586518 -v 0.425184 0.971436 -4.654093 -v 0.447243 0.942463 -4.426738 -v 0.754423 1.150122 -4.505904 -v 0.631371 1.086015 -4.898322 -v 0.197394 0.780639 -4.066962 -v 0.237996 0.631563 -3.335020 -v 0.333348 0.847065 -4.133173 -v 1.037019 2.360721 -4.396334 -v 0.301644 2.754789 -11.360047 -v 0.411183 2.672648 -10.716697 -v 0.376641 2.938242 -10.725307 -v 0.429210 2.929410 -10.188605 -v 0.409800 2.932671 -10.386772 -v 0.454723 2.694923 -10.376768 -v 0.478621 2.707150 -10.190189 -v 0.443265 2.958135 -9.231702 -v 0.443112 2.942617 -9.639969 -v 0.500128 2.735979 -9.638621 -v 0.501993 2.754759 -9.240403 -v 0.448926 2.953818 -8.612252 -v 0.447510 2.954897 -8.767115 -v 0.497704 2.722723 -8.779392 -v 0.496275 2.712045 -8.625722 -v 0.455322 2.971098 -8.346431 -v 0.512329 2.712354 -8.357697 -v 0.371050 2.290605 -8.404303 -v 0.286176 2.142307 -8.436194 -v 0.201301 1.994008 -8.468086 -v 0.202719 2.047821 -8.723288 -v 0.000000 1.933346 -8.850438 -v 0.366519 2.403477 -9.243193 -v 0.345313 2.396374 -9.621881 -v 0.364660 2.364457 -8.954694 -v 0.499134 2.733402 -8.933063 -v 0.269060 3.138009 -10.168095 -v 0.261948 3.158210 -10.342492 -v 0.274443 3.122721 -10.036116 -v 0.442959 2.927100 -10.048237 -v 0.443035 2.934859 -9.844103 -v 0.280633 3.119243 -9.831667 -v 0.151422 2.166849 -10.119249 -v 0.186729 2.172732 -9.791831 -v 0.117768 2.143266 -10.430947 -v 0.145197 2.020104 -9.233773 -v 0.072606 2.049301 -9.466062 -v 0.057552 1.983867 -9.452366 -v 0.131996 1.947428 -9.259753 -v 0.036310 2.063900 -9.582206 -v 0.204218 2.168841 -9.653164 -v 0.308002 2.367319 -10.151452 -v 0.290014 2.342802 -10.319963 -v 0.203891 2.243034 -10.375456 -v 0.229712 2.267084 -10.135351 -v 0.092139 2.026344 -10.700377 -v 0.324108 2.389272 -10.000570 -v 0.255418 2.281002 -9.896200 -v 0.269464 2.280832 -9.732195 -v 0.334710 2.392823 -9.811226 -v 0.035889 1.623215 -9.285259 -v 0.256686 2.157168 -9.237164 -v 0.229702 2.102494 -8.980226 -v 0.297181 2.233476 -8.967460 -v 0.311602 2.280322 -9.240178 -v 0.255921 2.296332 -10.639358 -v 0.238928 2.231600 -11.256454 -v 0.235786 2.205387 -11.251264 -v 0.174030 2.161338 -10.669867 -v 0.147355 1.881837 -11.142594 -v 0.079662 1.731285 -11.068179 -v 0.179189 2.171574 -11.828695 -v 0.176576 2.117885 -11.821964 -v 0.119550 1.461948 -11.680208 -v 0.083922 1.245576 -11.593570 -v 0.087873 0.866687 -11.996022 -v 0.103782 2.345439 -12.363101 -v 0.109066 2.679843 -12.341629 -v 0.104893 2.030640 -12.385267 -v 0.104599 2.113806 -12.379411 -v 0.000015 2.105220 -12.461259 -v 0.155178 1.678320 -11.766847 -v 0.105996 1.718324 -12.407260 -v 0.108213 1.091213 -12.451451 -v 0.098043 0.978950 -12.223737 -v 0.072597 0.558383 -12.280480 -v 0.071319 0.369836 -12.971261 -v 0.090431 0.743531 -12.701984 -v 0.081514 0.650957 -12.491232 -v 0.000000 1.286699 -12.849672 -v 0.337134 4.550865 -1.286647 -v 0.530880 4.255392 -1.860175 -v 0.496476 4.426287 -1.321468 -v 0.484179 4.206684 -2.466241 -v 0.707808 4.021771 -2.365168 -v 0.738513 4.226496 -1.407832 -v 0.523044 4.650603 -0.322537 -v 0.634455 4.502475 -0.347335 -v 0.353634 4.656351 0.708917 -v 0.255804 4.800555 0.639917 -v 0.389424 4.725579 0.158690 -v 0.494044 4.579412 0.180791 -v 0.176821 4.646301 0.932550 -v 0.330065 4.572790 1.005317 -v 0.160899 4.603905 -1.427278 -v 0.341971 4.627254 -0.874908 -v 0.377355 4.807536 -0.346450 -v 0.261015 4.756641 -0.996184 -v 0.291003 5.061264 -0.420514 -v 0.206415 5.007654 -0.972486 -v 0.196953 4.972194 0.550262 -v 0.173397 5.206644 0.449081 -v 0.232200 5.133954 0.014283 -v 0.287154 4.889865 0.101906 -v 0.127906 4.808163 0.771432 -v 0.098481 4.973572 0.652059 -v 0.086703 5.194057 0.553082 -v 0.190560 5.659777 -0.122059 -v 0.230532 5.609394 -0.491101 -v 0.131942 6.201291 0.012722 -v 0.129386 6.268611 -0.019389 -v 0.156485 6.221625 -0.325418 -v 0.161366 6.154187 -0.299237 -v 0.126831 6.335931 -0.051499 -v 0.100050 6.961100 -0.420859 -v 0.106132 6.857105 -0.623385 -v 0.151604 6.289063 -0.351598 -v 0.104307 7.402701 -0.942577 -v 0.093945 7.300551 -1.069976 -v 0.112215 6.753111 -0.825910 -v 0.073590 7.636790 -1.126523 -v 0.061350 7.570263 -1.215099 -v 0.063421 6.344719 0.001007 -v 0.050031 6.971153 -0.387232 -v 0.064699 6.271790 0.037258 -v 0.190790 6.107083 -0.611197 -v 0.183584 6.174639 -0.631446 -v 0.129818 6.117871 -0.927168 -v 0.134567 6.044853 -0.914980 -v 0.057486 6.693021 -1.263106 -v 0.073758 6.139584 -1.227016 -v 0.125068 6.190889 -0.939356 -v 0.084850 6.723066 -1.044508 -v 0.019031 7.721359 -1.412301 -v 0.036474 7.776766 -1.378334 -v 0.041024 7.816984 -1.310769 -v 0.000012 7.621251 -0.858355 -v 0.000000 7.491805 -0.793408 -v 0.044199 7.845045 -1.263627 -v 0.022105 7.863363 -1.235694 -v 0.008374 7.701509 -1.013948 -v 0.144675 4.705746 -1.645918 -v 0.121827 4.954044 -1.524457 -v 0.162444 5.540064 -0.891267 -v 0.078345 5.982624 -1.218763 -v 0.076051 6.061104 -1.222890 -v 0.094356 5.470734 -1.291432 -v 0.141726 3.485646 -10.652797 -v 0.126894 3.755327 -10.965844 -v 0.138621 3.379190 -10.423867 -v 0.195589 3.339673 -10.650833 -v 0.200284 3.268700 -10.383180 -v 0.129585 3.296360 -10.005277 -v 0.202014 3.209540 -10.020697 -v 0.206877 3.195410 -9.815084 -v 0.133120 3.271577 -9.798498 -v 0.319938 3.153609 -8.605712 -v 0.314754 3.142409 -8.758864 -v 0.319950 3.187297 -8.348321 -v 0.248607 3.280591 -8.351751 -v 0.256585 3.245140 -8.602141 -v 0.193233 3.336672 -8.598571 -v 0.110541 3.462891 -8.593322 -v 0.174759 3.297102 -8.879228 -v 0.183996 3.316887 -8.738899 -v 0.098169 3.440052 -8.715020 -v 0.085797 3.417213 -8.836718 -v 0.147432 3.263556 -9.172451 -v 0.223318 3.186183 -9.195385 -v 0.242165 3.214156 -8.895622 -v 0.132729 3.325180 -10.150924 -v 0.136656 3.246794 -9.591721 -v 0.012948 3.931325 -8.755766 -v 0.062088 3.534406 -8.826925 -v 0.123786 5.122674 -12.522758 -v 0.118323 4.872064 -12.247119 -v 0.112860 4.621455 -11.971480 -v 0.116604 4.225614 -11.509084 -v 0.169092 3.561668 -11.074191 -v 0.254819 3.072582 -11.268055 -v 0.275272 2.933772 -11.308237 -v 0.192465 2.444295 -11.862893 -v 0.204702 2.695653 -11.894410 -v 0.232882 3.219802 -11.836754 -v 0.217427 2.932348 -11.868374 -v 0.253167 3.597077 -11.795255 -v 0.211290 3.368010 -11.182538 -v 0.184885 3.911345 -11.652169 -v 0.128595 3.848981 -12.513577 -v 0.120727 4.235218 -12.242529 -v 0.112976 2.927302 -12.325741 -v 0.110700 3.357044 -12.390697 -v 0.081326 5.676683 -14.001101 -v 0.075927 5.833146 -14.156075 -v 0.089506 5.439608 -13.766284 -v 0.084957 5.571456 -13.896873 -v 0.162261 4.510911 -12.879640 -v 0.093987 5.309763 -13.637678 -v 0.145428 4.179946 -12.696609 -v 0.131875 4.526005 -12.471864 -v 0.143023 4.816792 -12.701199 -v 0.104550 5.731641 -13.350189 -v 0.102228 5.805183 -13.450114 -v 0.093592 5.688319 -13.673494 -v 0.097028 5.585624 -13.558237 -v 0.040805 5.916960 -14.223951 -v 0.079469 6.066023 -14.227453 -v 0.073414 6.154620 -14.312218 -v 0.021007 6.282511 -14.437347 -v 0.009243 6.308505 -14.400448 -v 0.068424 6.190806 -14.020712 -v 0.053877 7.509920 -1.293559 -v 0.034011 7.494805 -1.374483 -v 0.039915 7.270251 -1.342484 -v 0.072439 7.257837 -1.214364 -v 0.416343 1.383552 -5.789503 -v 0.586722 1.543770 -5.707937 -v 0.643920 1.663434 -5.767154 -v 0.452082 1.560486 -6.047740 -v 1.496535 1.968105 6.182719 -v 1.460775 2.284230 6.548746 -v 1.462881 2.146295 6.001260 -v 1.518408 1.834275 6.360049 -v 1.489218 2.066433 6.672647 -v 1.215084 1.289559 7.014496 -v 1.152581 1.355795 7.198538 -v 1.354932 1.393737 6.996946 -v 1.411242 1.540806 6.934395 -v 1.470906 1.663032 6.876076 -v 1.490700 1.785258 6.817786 -v 1.117093 1.256835 6.880019 -v 1.233660 1.231206 6.897646 -v 1.100290 1.242978 6.829710 -v 1.058812 1.276579 6.790954 -v 1.059250 1.325840 6.844145 -v 0.992823 1.309986 6.687014 -v 1.015734 1.372476 6.709156 -v 0.999661 1.469268 6.815123 -v 0.965125 1.541031 6.771355 -v 0.961719 1.420638 6.642830 -v 0.851607 1.595154 7.107407 -v 0.898041 1.513902 7.139175 -v 0.781488 1.602271 7.272047 -v 0.412443 2.112591 7.154447 -v 0.588895 2.059020 6.898893 -v 0.412446 2.112591 5.349350 -v 0.588898 2.059020 5.340304 -v 0.765351 2.005449 5.331259 -v 0.963423 1.682241 5.311613 -v 0.963423 1.682241 6.087290 -v 0.765348 2.005449 6.643341 -v 0.913014 1.292895 5.308463 -v 3.201479 -0.661389 0.974183 -v 3.128219 -0.683658 0.974903 -v 3.282719 -0.871644 0.887531 -v 3.289470 -0.788454 0.829556 -v 2.980469 -0.503025 1.020530 -v 3.051839 -0.501525 0.902843 -v 3.270959 -1.107684 2.197226 -v 2.989106 -0.738087 2.496668 -v 3.123149 -0.620421 2.442190 -v 3.399539 -0.975264 2.150519 -v 3.577529 -1.449453 1.843527 -v 3.640260 -1.341453 1.789262 -v 3.862500 -1.742493 1.471377 -v 3.888840 -1.679403 1.427447 -v 1.969389 1.204242 1.832933 -v 2.118842 0.996459 1.785515 -v 2.264591 1.020273 2.604362 -v 2.096177 1.258239 2.581310 -v 2.107220 1.085553 3.333797 -v 2.230508 0.841911 3.239237 -v 1.909029 0.794721 3.572717 -v 2.043056 0.602232 3.425926 -v 2.405988 0.521607 3.079754 -v 2.258036 0.370140 3.203926 -v 2.506124 0.038721 3.010214 -v 2.645082 0.165009 2.904071 -v 2.746841 -0.345042 2.773072 -v 2.872814 -0.223458 2.683174 -v 2.686013 0.298284 2.564276 -v 3.020550 -0.283113 2.271880 -v 3.505139 -0.989130 1.733307 -v 3.889230 -1.567923 1.281458 -v 1.850049 1.137786 1.362035 -v 1.960791 0.995499 1.249865 -v 2.089100 0.694719 1.108394 -v 2.312772 0.717237 1.761527 -v 2.468390 0.671649 2.699714 -v 2.554571 0.405798 1.706570 -v 2.919338 -0.112050 1.511024 -v 3.420001 -0.813168 1.165130 -v 3.819989 -1.405684 0.847520 -v 4.137540 -1.898160 0.962066 -v 4.086240 -1.783382 0.656018 -v 3.770459 -1.403163 0.617771 -v 4.078771 -1.824630 0.491603 -v 4.086030 -1.799280 0.539087 -v 3.794130 -1.389573 0.685667 -v 3.468899 -1.017420 0.749330 -v 2.852093 -0.234153 0.991595 -v 2.794952 -0.141840 1.111931 -v 2.358732 0.381360 1.128905 -v 2.650146 0.027240 1.077374 -v 1.746030 1.071669 1.149857 -v 1.830111 0.988317 1.006133 -v 4.252350 -2.003429 0.610364 -v 4.266840 -2.039190 0.523544 -v 4.320294 -2.114246 0.595010 -v 4.187521 -1.927890 0.515990 -v 4.165111 -1.983180 1.051874 -v 4.123470 -2.020200 1.043069 -v 4.330979 -2.125949 0.594299 -v 4.362630 -2.199330 0.578303 -v 4.308361 -2.145150 0.588410 -v 4.301910 -2.150340 0.671981 -v 4.275240 -2.130301 0.753287 -v 4.301790 -2.106300 0.758531 -v 4.331640 -2.150850 0.521714 -v 4.276920 -2.078250 0.493781 -v 4.188666 -1.964934 0.485663 -v 4.269990 -2.042521 0.760736 -v 4.023631 -1.833960 0.632639 -v 4.050271 -1.827840 0.525740 -v 3.742769 -1.429323 0.663605 -v 3.743400 -1.569453 1.029653 -v 4.156621 -1.952369 0.505541 -v 4.240951 -2.059650 0.515363 -v 4.292340 -2.125350 0.538499 -v 4.221210 -2.076780 0.694529 -v 4.061970 -1.962540 0.944636 -v 3.288121 -1.071435 1.344254 -v 3.437219 -1.059630 0.800156 -v 4.188666 -1.964934 0.485663 -v 1.789500 0.492576 3.077303 -v 2.021438 0.293649 2.923781 -v 2.269356 -0.020310 2.759306 -v 2.571374 -0.390084 2.567995 -v 2.881896 -0.750588 2.342972 -v 3.188609 -1.114308 2.071943 -v 3.507779 -1.461003 1.752681 -v 3.815399 -1.740183 1.411233 -v 1.826490 0.666888 2.102021 -v 2.162834 0.340101 1.936583 -v 2.688383 -0.335601 1.713415 -v 2.832726 -0.322395 1.066157 -v 2.725658 -0.176301 1.201262 -v 2.550195 0.018885 1.138057 -v 2.283752 0.336366 1.190807 -v 2.016848 0.639942 1.180196 -v 1.783944 0.885870 1.164173 -v 1.678605 0.962046 1.308467 -v 1.672338 0.741063 2.356685 -v 1.667424 0.575112 3.222287 -v 1.186713 0.659090 -5.687936 -v 0.960231 1.129269 -5.263156 -v 0.865635 1.277337 -5.668992 -v 0.995046 1.007676 -6.005297 -v 0.966444 0.936024 -5.301796 -v 0.685800 1.453947 -6.034034 -v 0.573192 1.481184 -6.379386 -v 0.622404 1.494018 -6.431498 -v 0.787827 1.223589 -6.341531 -v 0.705243 1.307037 -6.636847 -v 0.718074 1.244490 -6.686077 -v 0.810666 1.147398 -6.417789 -v 0.999078 0.911910 -6.064396 -v 0.750378 1.125795 -6.375820 -v 0.675096 1.219143 -6.663457 -v 0.556719 1.371750 -6.452497 -v 0.578964 1.277547 -6.066640 -v 0.928779 0.889239 -6.048467 -v 0.678477 1.161390 -5.599633 -v 1.121324 0.711048 -5.774669 -v 0.820116 0.957321 -5.293453 -v 0.567732 1.212900 -5.411834 -v 0.346654 1.467138 -6.156294 -v 0.317206 1.300648 -5.821917 -v 1.008521 2.366518 -4.631083 -v 0.925170 2.013060 -5.312743 -v 0.241227 1.373790 -6.264847 -v 0.218070 1.217745 -5.854329 -v 0.396459 1.139865 -5.260213 -v 0.284625 1.092780 -5.221767 -v 0.172791 1.045695 -5.183322 -v 0.211590 -0.033660 1.556562 -v 0.430641 -0.027180 2.549786 -v 0.609757 0.016023 2.548962 -v 0.773103 0.073425 3.357169 -v 0.918921 0.158022 3.358205 -v 0.196011 0.005506 0.863270 -v 0.392019 0.028131 0.895826 -v 0.575118 0.080179 0.918846 -v 0.758217 0.132228 0.941867 -v 0.600370 0.037087 1.555143 -v 0.777564 0.078411 1.548149 -v 0.788874 0.059226 2.548139 -v 0.935199 0.144070 2.546778 -v 1.308825 0.491214 3.372017 -v 1.064739 0.242619 3.359240 -v 1.032234 0.289026 3.989090 -v 1.304421 0.560907 3.959061 -v 1.405443 0.598095 3.375676 -v 1.448787 0.697206 3.941420 -v 1.381071 0.634992 2.528726 -v 1.303059 0.502350 2.539541 -v 1.459785 0.722658 2.503244 -v 1.501092 0.655275 3.364607 -v 1.365468 0.829185 1.432706 -v 1.468077 0.974406 1.417931 -v 1.375167 0.932265 0.949484 -v 1.554951 0.739275 3.759800 -v 1.278150 0.632409 1.461680 -v 1.081524 0.228915 2.545418 -v 0.921066 0.176502 1.530188 -v 0.918178 0.271876 0.856607 -v 1.078140 0.411525 0.771347 -v 1.260477 0.715602 0.833048 -v 1.583664 1.224930 0.758084 -v 1.749123 1.582761 0.783929 -v 1.064568 0.274593 1.512227 -v 1.575564 1.222809 1.062590 -v 1.815894 1.720821 1.598737 -v 1.793781 1.959261 0.752549 -v 1.663602 2.862522 2.582717 -v 1.377438 3.473604 2.586371 -v 1.629981 2.931231 1.681139 -v 1.790073 2.346420 1.642211 -v 1.816749 2.018694 1.612595 -v 1.731918 1.429797 1.406207 -v 1.664655 1.142403 1.264405 -v 1.764636 1.265703 1.438313 -v 1.574523 1.001313 1.415906 -v 1.552578 0.759345 2.449883 -v 1.832733 2.327961 2.577544 -v 1.890201 2.046729 2.581160 -v 1.955034 1.808913 2.586737 -v 1.897287 1.951347 3.305026 -v 1.918854 1.687287 3.325937 -v 1.828626 2.249058 3.285529 -v 1.710846 2.789400 3.272929 -v 1.820976 2.185446 3.720740 -v 1.857159 1.867578 3.738680 -v 1.740387 2.726049 3.720050 -v 1.868079 1.545960 1.838060 -v 1.876644 1.369989 1.853147 -v 2.011919 1.605765 2.592380 -v 2.000865 1.466409 3.349817 -v 1.851708 1.572138 3.741349 -v 1.842456 1.786473 4.098889 -v 1.833354 1.472112 4.068230 -v 1.730697 1.218675 4.008260 -v 1.830999 1.326228 3.727130 -v 1.590240 0.654744 3.308987 -v 1.684869 0.771348 3.694189 -v 1.600989 0.895854 4.020049 -v 1.713702 1.007112 3.905900 -v 1.859205 1.093770 3.668690 -v 2.055341 1.253532 3.344537 -v 1.992765 1.423911 2.593226 -v 0.958122 1.974417 -4.877053 -v 0.980023 2.372314 -4.865833 -v 4.252350 -2.003429 0.610364 -v 4.330979 -2.125949 0.594299 -v 4.320294 -2.114246 0.595010 -v 4.188666 -1.964934 0.485663 -v 4.292340 -2.125350 0.538499 -v 4.240951 -2.059650 0.515363 -v 4.156621 -1.952369 0.505541 -v 4.023631 -1.833960 0.632639 -v 4.188666 -1.964934 0.485663 -v 1.014645 1.147099 6.905239 -v 1.107102 1.071007 6.816199 -v 1.355196 1.020312 6.341837 -v 1.424016 1.019949 6.003920 -v 1.309659 0.871464 6.043759 -v 1.257900 0.911613 6.402407 -v 1.322058 1.084082 6.520927 -v 1.212747 0.958972 6.568310 -v 1.139373 1.114092 6.716713 -v 1.300722 1.125141 6.636235 -v 1.181331 0.991924 6.683746 -v 1.041564 1.173102 6.803680 -v 0.977466 1.219512 6.820902 -v 0.941052 1.183395 6.938568 -v 0.853527 1.171917 7.043089 -v 0.852691 1.171915 7.041536 -v 0.901610 1.180493 6.931842 -v 0.853527 1.171917 7.043089 -v 0.904908 1.151766 7.055986 -v 0.849483 1.169967 7.049246 -v 0.755436 1.154754 6.868383 -v 0.866790 1.181964 6.742342 -v 0.885624 1.217190 6.765932 -v 0.782742 1.171746 6.911570 -v 0.930453 1.256781 6.709229 -v 1.087644 1.189302 6.756611 -v 0.383322 1.033771 7.342098 -v 0.952435 1.218890 6.806871 -v 1.015158 1.235376 6.785358 -v 0.974512 1.245647 6.748828 -v 1.024785 1.269969 6.774074 -v 0.976683 1.263244 6.737537 -v 1.015158 1.235376 6.785358 -v 1.058812 1.242488 6.790955 -v 0.913011 1.288047 6.617625 -v 0.733692 0.972588 6.216080 -v 0.913011 1.292895 5.997829 -v 0.597203 0.874083 6.425976 -v 0.426441 0.750844 6.688579 -v 0.508698 0.810210 6.562080 -v 0.635037 1.084567 6.977869 -v 0.568074 1.071054 7.074764 -v 0.426441 0.750844 6.688579 -v 1.320132 1.194480 6.746542 -v 1.149969 1.186905 6.775416 -v 1.205031 1.195125 6.831127 -v 1.373052 1.297614 6.850214 -v 1.436730 1.310796 6.667574 -v 1.439730 1.422741 6.753317 -v 1.499103 1.480170 6.445370 -v 1.461682 1.378555 6.578679 -v 1.483521 1.525296 6.661520 -v 1.507065 1.627854 6.569756 -v 1.544256 1.637781 6.191420 -v 1.555581 1.421796 6.071539 -v 1.493613 1.310844 6.366139 -v 1.445415 1.241552 6.514871 -v 1.413315 1.195401 6.613930 -v 1.448541 1.149045 6.332810 -v 1.366415 1.135764 6.501388 -v 1.518873 1.203369 6.011809 -v 1.563156 1.735368 5.993540 -v 1.590555 1.486725 5.854159 -v 1.554864 1.240575 5.775379 -v 1.455078 1.031064 5.753928 -v 1.616820 1.542645 5.616738 -v 1.559022 1.818693 5.757799 -v 1.599795 1.269099 5.529920 -v 1.507164 1.030659 5.497880 -v 1.401606 0.822217 5.525060 -v 1.332588 0.864427 5.782099 -v 0.423177 -0.004236 1.562138 -v 0.150588 5.710160 0.246983 -v 0.075298 5.718751 0.311262 -v 0.065976 6.198860 0.073509 -v 0.176378 6.242195 -0.651696 -v 0.000000 7.459325 -0.804931 -v 0.000000 7.555954 -0.874842 -v 0.000000 7.619603 -0.960261 -v 0.016736 7.686204 -1.041330 -v 0.000000 7.645075 -0.942380 -v 0.469302 0.913491 -4.199384 -v 0.764140 1.127336 -4.275962 -v 0.446095 2.955976 -8.921977 -v 0.363731 2.344948 -8.810444 -v 0.216210 2.075158 -8.851757 -v 0.289971 2.210052 -8.831100 -v 0.309571 3.131209 -8.912016 -v 0.299205 3.108810 -9.218320 -v 0.249375 3.229648 -8.748882 -v 0.219987 2.500278 9.467626 -v 0.000000 2.662065 9.220246 -v 0.000000 2.754720 8.943106 -v 0.000000 2.850825 8.621567 -v 0.000000 2.959899 8.257607 -v 0.000000 3.008577 8.074757 -v 0.000000 3.057255 7.891907 -v 0.000000 1.816617 9.143866 -v 0.000000 2.133414 9.554536 -v 0.000000 2.219991 9.608235 -v 0.000000 2.306569 9.661936 -v 0.000000 0.258118 7.126908 -v 0.708007 3.559297 -4.715628 -v 0.531130 3.693990 -4.729585 -v 0.354254 3.828682 -4.743542 -v 0.937377 2.800413 -4.885390 -v 0.722898 2.153667 8.926217 -v 0.906180 2.177211 8.611516 -v 0.526008 2.129730 9.235456 -v 1.025931 2.209278 8.254758 -v 0.499196 2.726589 -9.837730 -v 0.286824 3.115765 -9.627218 -v 0.221707 2.164950 -9.514498 -v 0.283510 2.280662 -9.568190 -v 0.211740 3.181280 -9.609469 -v 0.249453 3.193700 -10.648869 -v 0.200894 3.231595 -10.159510 -v 0.498264 2.717199 -10.036839 -v 0.277131 2.550299 -11.319557 -v 0.215049 2.032389 -11.217010 -v 0.100677 5.476114 -13.433351 -v 0.107367 5.642466 -13.229023 -v 0.085917 5.807778 -13.824516 -v 0.090508 5.938873 -13.647932 -v 0.078610 5.938566 -13.979771 -v 0.081294 6.043985 -13.803465 -v 0.077698 5.949584 -14.191765 -v 0.076278 6.033490 -14.051927 -v 0.073947 6.120568 -14.142096 -v 0.074859 6.117395 -13.912088 -v 0.036717 6.193822 -14.246683 -v 0.046878 6.221632 -14.364780 -v 0.023449 6.253093 -14.326900 -v 0.362802 2.325438 -8.666195 -v 0.282760 2.186629 -8.694741 -v 0.084449 3.549633 -8.596906 -v 0.073673 3.541039 -8.726732 -v 0.034154 1.996304 -9.525320 -v 0.049072 3.643200 -8.454896 -v 0.043497 3.626302 -8.819245 -v 0.051776 3.631310 -8.737202 -v 0.025983 3.830602 -8.749534 -v 0.058158 3.637040 -8.600517 -v 1.008419 1.403086 7.464851 -v 0.966759 1.384145 7.424916 -v 0.925099 1.402957 7.385004 -v 1.151711 1.640153 7.684997 -v 1.173571 1.787477 7.727949 -v 1.185924 1.944414 7.749385 -v 0.102238 0.957934 7.753042 -v 0.000000 0.880619 7.787120 -v 0.546660 0.957004 7.598269 -v 0.499515 1.007318 7.593683 -v 0.467860 1.050831 7.219772 -v 0.540916 0.833460 5.329064 -v 0.901661 1.507277 7.142295 -v 0.908535 1.447106 7.257532 -v 0.893449 1.419157 7.361999 -v 0.862518 1.446621 7.337930 -v 0.901646 1.507411 7.142037 -v 0.096741 1.984336 -9.034204 -v 0.038314 1.960334 -8.873912 -v 0.049339 1.832943 -9.453801 -v 0.046161 1.691904 -9.454356 -v 0.080262 1.662603 -9.361574 -v 0.108833 1.819900 -9.305342 -v 0.048005 1.805043 -9.149770 -v 0.000000 1.906072 -8.889236 -v 0.060755 1.925107 -9.059778 -v 0.038735 1.835894 -9.487392 -v 0.030116 1.690160 -9.493574 -v 0.005835 1.480627 -9.488686 -v 0.000000 1.957512 -8.823058 -v 0.000000 0.930195 7.784478 -v 0.000000 7.555954 -0.874842 -v -0.868781 0.448350 -0.875571 -v 0.000000 0.169528 -0.844047 -v -0.454360 0.220353 -0.813706 -v -1.031705 3.993166 -0.964750 -v -1.237027 3.612466 -0.989064 -v -1.661401 1.951120 -0.968175 -v -1.630474 2.330482 -0.974212 -v -1.439719 2.948037 -0.981709 -v -1.155404 0.762097 -0.898300 -v -1.280609 1.021128 -0.911203 -v -1.417955 1.295166 -0.930249 -v -1.583639 1.594462 -0.954546 -v -0.787552 4.268670 -0.905779 -v -0.430088 4.600734 -0.804592 -v -0.565465 4.464381 -0.834402 -v -0.227183 0.194941 -0.828877 -v -0.661571 0.334351 -0.844639 -v 0.868782 0.448350 -0.875571 -v 1.155405 0.762097 -0.898300 -v 0.661571 0.334351 -0.844639 -v 0.454360 0.220353 -0.813706 -v 0.227183 0.194941 -0.828876 -v 1.031705 3.993166 -0.964750 -v 1.237027 3.612466 -0.989064 -v 1.439719 2.948037 -0.981709 -v 1.661401 1.951120 -0.968175 -v 1.630474 2.330482 -0.974212 -v 1.280610 1.021128 -0.911203 -v 1.417956 1.295166 -0.930249 -v 1.583640 1.594462 -0.954546 -v 0.787552 4.268670 -0.905779 -v 0.430089 4.600734 -0.804592 -v 0.565465 4.464381 -0.834402 -v 0.339055 4.626878 -0.883805 -v 1.071486 4.043756 0.186888 -v 0.812206 4.317882 0.248249 -v 1.299117 3.659781 0.156041 -v 1.534188 2.971503 0.158790 -v 1.726299 2.340868 0.161049 -v 0.581277 4.505805 0.255518 -v 0.196009 0.068451 0.294599 -v 0.423579 0.113088 0.328154 -v 0.651147 0.157726 0.361710 -v 0.832396 0.288624 0.296040 -v 1.013646 0.419521 0.230370 -v 1.235431 0.729706 0.247088 -v 1.352953 0.969690 0.295770 -v 1.544214 1.246684 0.185180 -v 1.708797 1.578870 0.184397 -v 1.756635 1.955488 0.161469 -v -1.071485 4.043756 0.186888 -v -1.299116 3.659781 0.156041 -v -1.534187 2.971503 0.158790 -v -0.812206 4.317882 0.248249 -v -0.581276 4.505805 0.255518 -v -0.196009 0.068451 0.294599 -v -0.651146 0.157726 0.361710 -v -1.013645 0.419521 0.230370 -v -1.235431 0.729706 0.247088 -v -1.352953 0.969690 0.295770 -v -1.544213 1.246684 0.185180 -v -1.708796 1.578870 0.184397 -v -1.756634 1.955488 0.161469 -v -1.726298 2.340868 0.161049 -v -0.423579 0.113088 0.328154 -v -0.832396 0.288624 0.296040 -v 0.000000 0.042257 0.294287 -v 0.000000 0.842044 7.788106 -v -0.118757 0.908146 7.776113 -v -0.118757 0.908146 7.776113 -v 0.000000 0.842044 7.788106 -v 0.000000 7.491805 -0.793408 -v 0.000000 6.981207 -0.353604 -v 0.000000 6.981207 -0.353604 -v 0.000000 7.491805 -0.793408 -v 0.000000 6.981207 -0.353604 -v 0.000000 7.555954 -0.874842 -v 0.000000 5.732892 -13.099184 -v 0.000000 5.809293 -13.218571 -v 0.000000 5.809293 -13.218571 -v 0.000000 5.732892 -13.099184 -v 0.000000 0.842044 7.788106 -v 0.118757 0.908146 7.776113 -v 0.118757 0.908146 7.776113 -v 0.000000 0.842044 7.788106 -# 2735 vertices - -vt 0.590928 -1.494311 0.000000 -vt 0.592165 -1.441361 0.000000 -vt 0.606540 -1.500347 0.000000 -vt 0.607346 -1.527874 0.000000 -vt 0.592921 -1.515487 0.000000 -vt 0.582566 -1.550740 0.000000 -vt 0.562326 -1.541520 0.000000 -vt 0.522142 -1.507261 0.000000 -vt 0.519947 -1.446893 0.000000 -vt 0.475431 -1.499751 0.000000 -vt 0.473388 -1.444316 0.000000 -vt 0.443607 -1.443343 0.000000 -vt 0.442597 -1.386132 0.000000 -vt 0.416770 -1.381189 0.000000 -vt 0.415531 -1.294937 0.000000 -vt 0.374740 -1.302715 0.000000 -vt 0.372185 -1.212062 0.000000 -vt 0.344024 -1.223621 0.000000 -vt 0.523532 -1.610601 0.000000 -vt 0.476868 -1.634191 0.000000 -vt 0.479462 -1.691017 0.000000 -vt 0.524654 -1.567310 0.000000 -vt 0.475402 -1.584196 0.000000 -vt 0.476107 -1.541826 0.000000 -vt 0.446946 -1.501985 0.000000 -vt 0.416933 -1.439118 0.000000 -vt 0.374791 -1.385177 0.000000 -vt 0.347571 -1.314428 0.000000 -vt 0.315913 -1.324631 0.000000 -vt 0.316114 -1.234680 0.000000 -vt 0.294725 -1.240592 0.000000 -vt 0.296242 -1.169249 0.000000 -vt 0.375255 -1.444526 0.000000 -vt 0.346700 -1.388624 0.000000 -vt 0.313735 -1.397374 0.000000 -vt 0.292049 -1.333177 0.000000 -vt 0.286418 -1.410687 0.000000 -vt 0.312322 -1.442898 0.000000 -vt 0.346050 -1.440139 0.000000 -vt 0.375707 -1.511823 0.000000 -vt 0.415135 -1.503257 0.000000 -vt 0.447038 -1.552912 0.000000 -vt 0.447547 -1.607413 0.000000 -vt 0.446338 -1.654965 0.000000 -vt 0.446752 -1.715340 0.000000 -vt 0.406444 -1.674046 0.000000 -vt 0.344433 -1.492112 0.000000 -vt 0.409720 -1.620384 0.000000 -vt 0.371450 -1.624734 0.000000 -vt 0.414354 -1.561123 0.000000 -vt 0.380545 -1.565754 0.000000 -vt 0.358791 -1.572479 0.000000 -vt 0.346300 -1.533487 0.000000 -vt 0.333462 -1.519934 0.000000 -vt 0.340622 -1.555324 0.000000 -vt 0.328430 -1.542978 0.000000 -vt 0.336681 -1.565476 0.000000 -vt 0.325683 -1.555901 0.000000 -vt 0.305091 -1.545244 0.000000 -vt 0.304983 -1.561234 0.000000 -vt 0.336735 -1.586342 0.000000 -vt 0.342602 -1.582103 0.000000 -vt 0.326903 -1.614759 0.000000 -vt 0.253071 -1.632311 0.000000 -vt 0.245566 -1.648103 0.000000 -vt 0.267425 -1.661375 0.000000 -vt 0.273240 -1.646918 0.000000 -vt 0.263867 -1.616103 0.000000 -vt 0.279274 -1.636400 0.000000 -vt 0.302187 -1.638321 0.000000 -vt 0.303563 -1.630440 0.000000 -vt 0.331470 -1.622061 0.000000 -vt 0.361689 -1.670706 0.000000 -vt 0.341241 -1.656297 0.000000 -vt 0.300284 -1.652797 0.000000 -vt 0.273935 -1.564515 0.000000 -vt 0.278446 -1.584978 0.000000 -vt 0.254884 -1.587066 0.000000 -vt 0.242067 -1.603366 0.000000 -vt 0.235244 -1.625701 0.000000 -vt 0.236464 -1.664327 0.000000 -vt 0.262601 -1.682771 0.000000 -vt 0.297502 -1.680034 0.000000 -vt 0.335429 -1.696165 0.000000 -vt 0.331033 -1.760641 0.000000 -vt 0.292504 -1.772077 0.000000 -vt 0.252555 -1.551578 0.000000 -vt 0.239698 -1.571025 0.000000 -vt 0.227602 -1.598818 0.000000 -vt 0.219895 -1.652916 0.000000 -vt 0.234426 -1.708492 0.000000 -vt 0.260252 -1.719750 0.000000 -vt 0.294263 -1.717558 0.000000 -vt 0.259273 -1.773625 0.000000 -vt 0.233188 -1.769038 0.000000 -vt 0.216253 -1.700998 0.000000 -vt 0.213807 -1.768662 0.000000 -vt 0.291767 -1.838698 0.000000 -vt 0.259684 -1.836845 0.000000 -vt 0.234681 -1.836018 0.000000 -vt 0.212716 -1.832632 0.000000 -vt 0.403717 -1.731732 0.000000 -vt 0.358570 -1.734979 0.000000 -vt 0.330536 -1.820323 0.000000 -vt 0.292140 -1.903167 0.000000 -vt 0.260174 -1.902717 0.000000 -vt 0.233395 -1.901878 0.000000 -vt 0.209900 -1.900594 0.000000 -vt 0.200128 -1.830599 0.000000 -vt 0.204227 -1.761708 0.000000 -vt 0.207223 -1.704071 0.000000 -vt 0.189831 -1.791338 0.000000 -vt 0.449378 -1.773914 0.000000 -vt 0.482736 -1.745417 0.000000 -vt 0.487142 -1.784114 0.000000 -vt 0.525027 -1.744065 0.000000 -vt 0.402566 -1.800541 0.000000 -vt 0.351063 -1.803245 0.000000 -vt 0.331763 -1.886241 0.000000 -vt 0.294060 -1.998123 0.000000 -vt 0.261291 -1.998123 0.000000 -vt 0.354697 -1.861627 0.000000 -vt 0.335668 -1.963089 0.000000 -vt 0.365162 -1.918325 0.000000 -vt 0.413414 -1.863550 0.000000 -vt 0.454220 -1.818596 0.000000 -vt 0.233092 -1.998123 0.000000 -vt 0.207490 -1.998123 0.000000 -vt 0.196899 -1.903391 0.000000 -vt 0.187704 -1.838594 0.000000 -vt 0.179061 -1.788542 0.000000 -vt 0.181658 -1.742250 0.000000 -vt 0.170196 -1.741237 0.000000 -vt 0.174723 -1.690471 0.000000 -vt 0.161322 -1.687738 0.000000 -vt 0.165349 -1.649178 0.000000 -vt 0.150577 -1.647974 0.000000 -vt 0.193355 -1.998123 0.000000 -vt 0.184304 -1.916180 0.000000 -vt 0.176877 -1.841777 0.000000 -vt 0.167131 -1.791695 0.000000 -vt 0.155805 -1.744368 0.000000 -vt 0.143720 -1.690302 0.000000 -vt 0.125860 -1.643955 0.000000 -vt 0.132003 -1.610751 0.000000 -vt 0.082223 -1.664710 0.000000 -vt 0.075563 -1.699664 0.000000 -vt 0.089610 -1.705625 0.000000 -vt 0.097597 -1.668863 0.000000 -vt 0.105760 -1.716434 0.000000 -vt 0.121155 -1.684910 0.000000 -vt 0.118027 -1.742299 0.000000 -vt 0.139482 -1.742248 0.000000 -vt 0.151598 -1.793337 0.000000 -vt 0.163360 -1.844024 0.000000 -vt 0.171416 -1.921191 0.000000 -vt 0.181675 -1.998123 0.000000 -vt 0.097411 -1.747905 0.000000 -vt 0.119529 -1.906975 0.000000 -vt 0.122115 -1.998123 0.000000 -vt 0.096454 -1.979342 0.000000 -vt 0.141310 -1.918942 0.000000 -vt 0.146040 -1.838457 0.000000 -vt 0.132669 -1.790749 0.000000 -vt 0.110892 -1.788463 0.000000 -vt 0.090330 -1.781697 0.000000 -vt 0.081150 -1.740666 0.000000 -vt 0.067490 -1.733082 0.000000 -vt 0.063452 -1.695331 0.000000 -vt 0.056688 -1.727679 0.000000 -vt 0.083082 -1.815702 0.000000 -vt 0.073683 -1.773260 0.000000 -vt 0.061013 -1.766202 0.000000 -vt 0.067845 -1.805737 0.000000 -vt 0.077691 -1.847184 0.000000 -vt 0.102912 -1.824921 0.000000 -vt 0.095799 -1.893192 0.000000 -vt 0.075643 -1.880779 0.000000 -vt 0.062982 -1.836631 0.000000 -vt 0.055767 -1.796061 0.000000 -vt 0.051101 -1.759935 0.000000 -vt 0.047642 -1.721780 0.000000 -vt 0.054948 -1.692947 0.000000 -vt 0.061178 -1.665146 0.000000 -vt 0.069144 -1.663610 0.000000 -vt 0.055851 -1.664450 0.000000 -vt 0.066297 -1.639099 0.000000 -vt 0.048154 -1.689095 0.000000 -vt 0.042312 -1.717822 0.000000 -vt 0.043389 -1.752899 0.000000 -vt 0.046475 -1.787097 0.000000 -vt 0.051095 -1.823497 0.000000 -vt 0.059784 -1.865820 0.000000 -vt 0.076566 -1.916809 0.000000 -vt 0.079779 -1.956599 0.000000 -vt 0.040757 -1.808938 0.000000 -vt 0.045238 -1.846102 0.000000 -vt 0.058445 -1.895681 0.000000 -vt 0.058582 -1.925624 0.000000 -vt 0.042193 -1.871274 0.000000 -vt 0.040662 -1.895972 0.000000 -vt 0.031305 -1.850318 0.000000 -vt 0.035047 -1.828789 0.000000 -vt 0.028504 -1.814632 0.000000 -vt 0.032866 -1.796256 0.000000 -vt 0.023777 -1.801886 0.000000 -vt 0.027396 -1.785532 0.000000 -vt 0.038320 -1.777341 0.000000 -vt 0.037770 -1.745502 0.000000 -vt 0.051476 -1.648531 0.000000 -vt 0.061158 -1.640058 0.000000 -vt 0.064489 -1.617326 0.000000 -vt 0.038954 -1.694980 0.000000 -vt 0.026146 -1.737531 0.000000 -vt 0.020882 -1.767666 0.000000 -vt 0.015974 -1.787372 0.000000 -vt 0.017825 -1.821418 0.000000 -vt 0.024378 -1.831994 0.000000 -vt 0.026290 -1.866354 0.000000 -vt 0.011290 -1.799756 0.000000 -vt 0.014673 -1.763152 0.000000 -vt 0.022742 -1.726604 0.000000 -vt 0.041762 -1.668921 0.000000 -vt 0.056991 -1.617540 0.000000 -vt 0.055156 -1.596577 0.000000 -vt 0.008746 -1.783705 0.000000 -vt 0.125406 -1.833760 0.000000 -vt 0.186903 -1.696989 0.000000 -vt 0.192653 -1.751974 0.000000 -vt 0.197694 -1.705134 0.000000 -vt 0.190461 -1.656656 0.000000 -vt 0.140107 -1.998123 0.000000 -vt 0.158115 -1.923390 0.000000 -vt 0.168522 -1.998123 0.000000 -vt 0.154804 -1.998123 0.000000 -vt 0.594770 -1.604048 0.000000 -vt 0.599111 -1.574327 0.000000 -vt 0.581246 -1.604864 0.000000 -vt 0.611623 -1.555549 0.000000 -vt 0.617143 -1.590482 0.000000 -vt 0.591557 -1.635438 0.000000 -vt 0.570062 -1.638296 0.000000 -vt 0.564251 -1.673203 0.000000 -vt 0.552353 -1.647222 0.000000 -vt 0.548140 -1.689670 0.000000 -vt 0.520854 -1.663489 0.000000 -vt 0.614482 -1.445965 0.000000 -vt 0.618470 -1.523681 0.000000 -vt 0.631315 -1.564903 0.000000 -vt 0.622697 -1.619578 0.000000 -vt 0.593698 -1.658245 0.000000 -vt 0.565907 -1.693971 0.000000 -vt 0.549731 -1.706705 0.000000 -vt 0.521232 -1.711851 0.000000 -vt 0.639041 -1.598096 0.000000 -vt 0.666089 -1.571621 0.000000 -vt 0.658095 -1.531948 0.000000 -vt 0.638163 -1.465243 0.000000 -vt 0.618935 -1.386380 0.000000 -vt 0.592883 -1.381416 0.000000 -vt 0.592464 -1.318407 0.000000 -vt 0.618369 -1.325547 0.000000 -vt 0.591979 -1.251556 0.000000 -vt 0.617392 -1.264145 0.000000 -vt 0.591289 -1.205736 0.000000 -vt 0.616074 -1.220584 0.000000 -vt 0.593173 -1.154422 0.000000 -vt 0.615889 -1.171577 0.000000 -vt 0.599003 -1.119578 0.000000 -vt 0.617705 -1.144318 0.000000 -vt 0.662816 -1.174689 0.000000 -vt 0.664387 -1.192741 0.000000 -vt 0.639267 -1.188892 0.000000 -vt 0.640050 -1.162971 0.000000 -vt 0.638607 -1.234041 0.000000 -vt 0.640213 -1.276789 0.000000 -vt 0.644697 -1.331903 0.000000 -vt 0.648125 -1.395863 0.000000 -vt 0.680287 -1.437896 0.000000 -vt 0.688807 -1.513222 0.000000 -vt 0.667975 -1.235484 0.000000 -vt 0.684586 -1.189772 0.000000 -vt 0.673988 -1.159874 0.000000 -vt 0.695542 -1.554549 0.000000 -vt 0.717034 -1.557598 0.000000 -vt 0.713097 -1.522795 0.000000 -vt 0.706473 -1.452648 0.000000 -vt 0.676310 -1.342834 0.000000 -vt 0.670685 -1.285197 0.000000 -vt 0.703277 -1.354226 0.000000 -vt 0.697273 -1.291975 0.000000 -vt 0.691630 -1.240725 0.000000 -vt 0.674080 -1.144837 0.000000 -vt 0.676805 -1.106695 0.000000 -vt 0.684907 -1.100333 0.000000 -vt 0.687126 -1.102847 0.000000 -vt 0.696252 -1.114714 0.000000 -vt 0.525086 -1.044053 0.000000 -vt 0.563733 -1.087789 0.000000 -vt 0.387381 -1.910405 0.000000 -vt 0.386453 -1.907733 0.000000 -vt 0.381982 -1.906575 0.000000 -vt 0.401941 -1.914162 0.000000 -vt 0.385126 -1.918928 0.000000 -vt 0.387647 -1.921755 0.000000 -vt 0.403322 -1.938097 0.000000 -vt 0.402613 -1.943667 0.000000 -vt 0.388820 -1.906694 0.000000 -vt 0.403451 -1.902720 0.000000 -vt 0.402483 -1.908047 0.000000 -vt 0.482590 -1.959442 0.000000 -vt 0.514505 -1.955261 0.000000 -vt 0.498568 -1.893268 0.000000 -vt 0.472127 -1.908422 0.000000 -vt 0.443956 -1.916963 0.000000 -vt 0.452370 -1.966875 0.000000 -vt 0.427631 -1.953513 0.000000 -vt 0.424247 -1.916230 0.000000 -vt 0.423981 -1.902796 0.000000 -vt 0.442909 -1.895802 0.000000 -vt 0.478544 -1.886325 0.000000 -vt 0.520312 -1.930539 0.000000 -vt 0.428140 -1.964350 0.000000 -vt 0.459643 -1.989051 0.000000 -vt 0.493963 -1.994280 0.000000 -vt 0.529474 -1.991678 0.000000 -vt 0.559288 -1.991382 0.000000 -vt 0.553374 -1.951923 0.000000 -vt 0.530109 -1.922046 0.000000 -vt 0.553633 -1.895935 0.000000 -vt 0.543899 -1.879244 0.000000 -vt 0.519139 -1.835732 0.000000 -vt 0.552719 -1.821755 0.000000 -vt 0.583780 -1.705039 0.000000 -vt 0.581304 -1.706488 0.000000 -vt 0.572264 -1.735272 0.000000 -vt 0.574459 -1.739983 0.000000 -vt 0.561021 -1.778002 0.000000 -vt 0.566472 -1.785545 0.000000 -vt 0.564634 -1.841739 0.000000 -vt 0.539806 -1.787494 0.000000 -vt 0.551521 -1.751714 0.000000 -vt 0.566317 -1.717392 0.000000 -vt 0.577834 -1.695803 0.000000 -vt 0.585532 -1.692688 0.000000 -vt 0.424982 -1.892766 0.000000 -vt 0.445057 -1.879698 0.000000 -vt 0.476981 -1.872089 0.000000 -vt 0.067745 -1.582462 0.000000 -vt 0.074001 -1.578822 0.000000 -vt 0.076523 -1.563028 0.000000 -vt 0.068938 -1.540070 0.000000 -vt 0.069607 -1.555387 0.000000 -vt 0.072679 -1.535981 0.000000 -vt 0.061220 -1.556660 0.000000 -vt 0.061044 -1.573948 0.000000 -vt 0.071043 -1.515590 0.000000 -vt 0.076420 -1.531893 0.000000 -vt 0.067817 -1.520307 0.000000 -vt 0.061396 -1.519704 0.000000 -vt 0.057308 -1.526108 0.000000 -vt 0.056146 -1.561882 0.000000 -vt 0.055607 -1.579136 0.000000 -vt 0.049636 -1.491689 0.000000 -vt 0.040920 -1.488740 0.000000 -vt 0.039453 -1.493529 0.000000 -vt 0.031137 -1.491360 0.000000 -vt 0.033586 -1.499729 0.000000 -vt 0.047788 -1.495727 0.000000 -vt 0.048688 -1.504969 0.000000 -vt 0.055816 -1.500169 0.000000 -vt 0.063152 -1.506295 0.000000 -vt 0.065833 -1.501933 0.000000 -vt 0.045574 -1.511990 0.000000 -vt 0.058119 -1.496033 0.000000 -vt 0.031878 -1.507013 0.000000 -vt 0.016637 -1.502894 0.000000 -vt 0.016832 -1.492939 0.000000 -vt 0.021542 -1.486149 0.000000 -vt 0.031931 -1.485008 0.000000 -vt 0.042387 -1.483950 0.000000 -vt 0.051485 -1.487650 0.000000 -vt 0.060422 -1.491896 0.000000 -vt 0.068515 -1.497570 0.000000 -vt 0.074269 -1.510873 0.000000 -vt 0.001306 -1.494628 0.000000 -vt 0.044253 -1.476796 0.000000 -vt 0.022099 -1.478823 0.000000 -vt 0.012510 -1.479819 0.000000 -vt 0.001824 -1.483959 0.000000 -vt 0.064034 -1.453471 0.000000 -vt 0.075047 -1.460783 0.000000 -vt 0.083881 -1.432119 0.000000 -vt 0.056583 -1.474657 0.000000 -vt 0.046119 -1.469642 0.000000 -vt 0.034001 -1.470381 0.000000 -vt 0.012861 -1.471720 0.000000 -vt 0.002341 -1.473290 0.000000 -vt 0.002779 -1.464289 0.000000 -vt 0.063440 -1.485841 0.000000 -vt 0.054034 -1.481154 0.000000 -vt 0.066457 -1.479787 0.000000 -vt 0.075648 -1.484789 0.000000 -vt 0.072081 -1.491180 0.000000 -vt 0.084222 -1.466680 0.000000 -vt 0.093058 -1.481364 0.000000 -vt 0.082992 -1.498099 0.000000 -vt 0.078630 -1.504486 0.000000 -vt 0.081322 -1.526890 0.000000 -vt 0.094242 -1.442449 0.000000 -vt 0.104722 -1.461998 0.000000 -vt 0.113933 -1.441943 0.000000 -vt 0.101572 -1.416095 0.000000 -vt 0.120869 -1.405478 0.000000 -vt 0.023664 -1.461783 0.000000 -vt 0.035279 -1.462105 0.000000 -vt 0.050634 -1.445945 0.000000 -vt 0.070492 -1.420497 0.000000 -vt 0.089909 -1.404892 0.000000 -vt 0.108264 -1.387326 0.000000 -vt 0.121635 -1.355956 0.000000 -vt 0.133371 -1.368011 0.000000 -vt 0.128450 -1.327870 0.000000 -vt 0.140453 -1.312477 0.000000 -vt 0.130270 -1.284333 0.000000 -vt 0.123260 -1.314045 0.000000 -vt 0.115823 -1.358186 0.000000 -vt 0.120629 -1.330894 0.000000 -vt 0.095995 -1.374557 0.000000 -vt 0.076107 -1.391026 0.000000 -vt 0.055746 -1.408106 0.000000 -vt 0.038916 -1.434224 0.000000 -vt 0.024672 -1.452069 0.000000 -vt 0.014062 -1.452431 0.000000 -vt 0.003609 -1.442902 0.000000 -vt 0.014910 -1.441240 0.000000 -vt 0.104732 -1.345241 0.000000 -vt 0.114893 -1.336146 0.000000 -vt 0.042180 -1.397203 0.000000 -vt 0.060254 -1.379239 0.000000 -vt 0.084211 -1.358095 0.000000 -vt 0.098229 -1.340779 0.000000 -vt 0.110670 -1.319893 0.000000 -vt 0.099334 -1.311112 0.000000 -vt 0.087452 -1.302784 0.000000 -vt 0.103048 -1.272988 0.000000 -vt 0.112500 -1.301316 0.000000 -vt 0.113653 -1.255250 0.000000 -vt 0.115789 -1.286087 0.000000 -vt 0.116179 -1.288260 0.000000 -vt 0.126537 -1.258982 0.000000 -vt 0.121992 -1.276810 0.000000 -vt 0.125074 -1.294381 0.000000 -vt 0.090138 -1.254400 0.000000 -vt 0.070577 -1.245063 0.000000 -vt 0.067747 -1.287183 0.000000 -vt 0.050203 -1.271772 0.000000 -vt 0.047724 -1.341348 0.000000 -vt 0.034241 -1.298772 0.000000 -vt 0.035051 -1.258096 0.000000 -vt 0.026457 -1.252202 0.000000 -vt 0.036896 -1.221098 0.000000 -vt 0.028179 -1.215820 0.000000 -vt 0.018404 -1.268853 0.000000 -vt 0.110570 -1.214377 0.000000 -vt 0.126586 -1.219639 0.000000 -vt 0.139931 -1.240379 0.000000 -vt 0.152071 -1.261056 0.000000 -vt 0.091612 -1.209746 0.000000 -vt 0.111573 -1.161777 0.000000 -vt 0.127024 -1.166337 0.000000 -vt 0.140947 -1.178433 0.000000 -vt 0.155540 -1.193876 0.000000 -vt 0.170856 -1.207144 0.000000 -vt 0.169460 -1.294361 0.000000 -vt 0.191290 -1.278710 0.000000 -vt 0.227577 -1.193990 0.000000 -vt 0.209284 -1.199004 0.000000 -vt 0.208394 -1.129267 0.000000 -vt 0.189630 -1.133489 0.000000 -vt 0.190500 -1.203792 0.000000 -vt 0.210185 -1.269703 0.000000 -vt 0.171244 -1.139303 0.000000 -vt 0.155456 -1.130928 0.000000 -vt 0.141114 -1.122312 0.000000 -vt 0.127278 -1.115911 0.000000 -vt 0.112536 -1.112953 0.000000 -vt 0.093050 -1.159920 0.000000 -vt 0.072386 -1.204922 0.000000 -vt 0.170022 -1.078906 0.000000 -vt 0.187676 -1.070359 0.000000 -vt 0.206477 -1.065513 0.000000 -vt 0.140948 -1.072335 0.000000 -vt 0.127177 -1.070554 0.000000 -vt 0.125964 -1.025503 0.000000 -vt 0.140036 -1.019027 0.000000 -vt 0.154673 -1.075328 0.000000 -vt 0.153712 -1.010623 0.000000 -vt 0.168181 -1.007411 0.000000 -vt 0.185267 -1.002871 0.000000 -vt 0.204602 -1.002871 0.000000 -vt 0.225920 -1.060981 0.000000 -vt 0.227158 -1.123879 0.000000 -vt 0.246266 -1.186306 0.000000 -vt 0.246100 -1.257389 0.000000 -vt 0.264052 -1.251135 0.000000 -vt 0.261129 -1.349253 0.000000 -vt 0.111154 -1.032892 0.000000 -vt 0.224424 -1.002872 0.000000 -vt 0.245597 -1.056585 0.000000 -vt 0.246409 -1.116777 0.000000 -vt 0.265304 -1.110105 0.000000 -vt 0.112706 -1.070264 0.000000 -vt 0.094664 -1.071326 0.000000 -vt 0.264676 -1.179071 0.000000 -vt 0.228194 -1.264358 0.000000 -vt 0.160552 -1.375513 0.000000 -vt 0.196369 -1.376942 0.000000 -vt 0.211570 -1.365063 0.000000 -vt 0.227883 -1.359666 0.000000 -vt 0.245252 -1.354527 0.000000 -vt 0.119308 -1.277911 0.000000 -vt 0.122201 -1.281286 0.000000 -vt 0.119551 -1.281017 0.000000 -vt 0.052167 -1.234462 0.000000 -vt 0.054510 -1.196952 0.000000 -vt 0.074341 -1.161384 0.000000 -vt 0.058215 -1.159194 0.000000 -vt 0.045150 -1.151599 0.000000 -vt 0.040479 -1.183994 0.000000 -vt 0.094332 -1.111872 0.000000 -vt 0.076094 -1.076261 0.000000 -vt 0.075813 -1.117600 0.000000 -vt 0.059519 -1.093050 0.000000 -vt 0.059924 -1.125787 0.000000 -vt 0.045049 -1.109936 0.000000 -vt 0.049429 -1.131354 0.000000 -vt 0.033750 -1.143417 0.000000 -vt 0.032060 -1.181552 0.000000 -vt 0.028830 -1.163698 0.000000 -vt 0.028151 -1.114051 0.000000 -vt 0.041750 -1.084874 0.000000 -vt 0.057503 -1.064972 0.000000 -vt 0.075711 -1.044230 0.000000 -vt 0.093838 -1.036763 0.000000 -vt 0.557203 -1.131802 0.000000 -vt 0.516714 -1.104841 0.000000 -vt 0.552613 -1.194808 0.000000 -vt 0.513689 -1.179779 0.000000 -vt 0.470200 -1.218648 0.000000 -vt 0.471105 -1.159674 0.000000 -vt 0.443205 -1.151542 0.000000 -vt 0.513476 -1.234565 0.000000 -vt 0.551861 -1.246622 0.000000 -vt 0.470509 -1.306074 0.000000 -vt 0.514163 -1.313522 0.000000 -vt 0.552729 -1.316174 0.000000 -vt 0.442142 -1.210480 0.000000 -vt 0.415283 -1.143426 0.000000 -vt 0.442089 -1.300299 0.000000 -vt 0.471896 -1.388738 0.000000 -vt 0.517031 -1.390437 0.000000 -vt 0.555864 -1.381379 0.000000 -vt 0.347728 -1.046174 0.000000 -vt 0.345154 -1.089328 0.000000 -vt 0.372072 -1.102195 0.000000 -vt 0.371916 -1.147159 0.000000 -vt 0.413037 -1.205463 0.000000 -vt 0.348432 -1.002871 0.000000 -vt 0.318629 -1.042435 0.000000 -vt 0.343658 -1.154041 0.000000 -vt 0.318589 -1.098304 0.000000 -vt 0.280323 -1.245846 0.000000 -vt 0.281359 -1.173319 0.000000 -vt 0.281715 -1.104802 0.000000 -vt 0.296919 -1.100902 0.000000 -vt 0.281051 -1.044769 0.000000 -vt 0.296695 -1.042209 0.000000 -vt 0.299724 -1.002871 0.000000 -vt 0.264500 -1.050821 0.000000 -vt 0.317602 -1.165430 0.000000 -vt 0.280698 -1.002875 0.000000 -vt 0.263459 -1.002877 0.000000 -vt 0.244300 -1.002875 0.000000 -vt 0.210996 -1.655101 0.000000 -vt 0.214607 -1.604196 0.000000 -vt 0.229951 -1.542608 0.000000 -vt 0.242227 -1.529133 0.000000 -vt 0.247611 -1.479342 0.000000 -vt 0.262338 -1.467968 0.000000 -vt 0.254746 -1.428298 0.000000 -vt 0.270473 -1.418840 0.000000 -vt 0.277528 -1.341093 0.000000 -vt 0.256246 -1.514288 0.000000 -vt 0.275658 -1.497706 0.000000 -vt 0.281173 -1.456764 0.000000 -vt 0.310062 -1.484286 0.000000 -vt 0.306534 -1.518735 0.000000 -vt 0.272028 -1.533689 0.000000 -vt 0.069311 -1.568009 0.000000 -vt 0.077469 -1.548681 0.000000 -vt 0.060658 -1.585581 0.000000 -vt 0.059133 -1.600918 0.000000 -vt 0.066363 -1.598332 0.000000 -vt 0.104958 -1.635268 0.000000 -vt 0.088683 -1.632837 0.000000 -vt 0.074650 -1.634535 0.000000 -vt 0.067196 -1.616181 0.000000 -vt 0.079216 -1.608818 0.000000 -vt 0.072399 -1.594989 0.000000 -vt 0.082708 -1.589593 0.000000 -vt 0.108975 -1.607283 0.000000 -vt 0.093825 -1.606511 0.000000 -vt 0.113766 -1.584077 0.000000 -vt 0.135691 -1.582011 0.000000 -vt 0.138022 -1.552811 0.000000 -vt 0.155203 -1.614178 0.000000 -vt 0.157676 -1.578463 0.000000 -vt 0.158575 -1.540807 0.000000 -vt 0.138831 -1.522826 0.000000 -vt 0.116736 -1.539872 0.000000 -vt 0.115901 -1.518888 0.000000 -vt 0.101569 -1.531284 0.000000 -vt 0.112397 -1.493210 0.000000 -vt 0.099328 -1.507950 0.000000 -vt 0.128049 -1.507488 0.000000 -vt 0.138267 -1.494457 0.000000 -vt 0.149182 -1.418690 0.000000 -vt 0.133183 -1.458485 0.000000 -vt 0.124110 -1.478336 0.000000 -vt 0.157872 -1.502480 0.000000 -vt 0.155509 -1.465161 0.000000 -vt 0.027536 -1.421293 0.000000 -vt 0.063716 -1.350995 0.000000 -vt 0.044757 -1.368741 0.000000 -vt 0.029800 -1.381501 0.000000 -vt 0.016391 -1.409298 0.000000 -vt 0.004001 -1.430517 0.000000 -vt 0.031945 -1.335490 0.000000 -vt 0.017542 -1.368135 0.000000 -vt 0.004001 -1.399524 0.000000 -vt 0.018868 -1.319180 0.000000 -vt 0.004001 -1.366125 0.000000 -vt 0.004001 -1.321399 0.000000 -vt 0.019337 -1.279916 0.000000 -vt 0.018521 -1.252949 0.000000 -vt 0.020942 -1.213698 0.000000 -vt 0.004001 -1.254163 0.000000 -vt 0.004001 -1.275770 0.000000 -vt 0.004001 -1.284609 0.000000 -vt 0.011652 -1.185944 0.000000 -vt 0.015963 -1.164604 0.000000 -vt 0.021269 -1.141642 0.000000 -vt 0.025424 -1.180835 0.000000 -vt 0.121897 -1.328335 0.000000 -vt 0.124318 -1.315580 0.000000 -vt 0.958873 -1.893777 0.000000 -vt 0.953808 -1.861751 0.000000 -vt 0.994546 -1.852151 0.000000 -vt 0.954338 -1.827497 0.000000 -vt 0.965123 -1.799370 0.000000 -vt 0.980062 -1.779385 0.000000 -vt 0.999357 -1.730440 0.000000 -vt 0.970663 -1.924002 0.000000 -vt 0.928244 -1.945391 0.000000 -vt 0.926769 -1.893220 0.000000 -vt 0.927048 -1.856910 0.000000 -vt 0.923277 -1.822591 0.000000 -vt 0.925764 -1.764183 0.000000 -vt 0.938117 -1.710843 0.000000 -vt 0.956645 -1.685330 0.000000 -vt 0.989201 -1.948489 0.000000 -vt 0.942482 -1.983014 0.000000 -vt 0.916796 -1.998607 0.000000 -vt 0.909100 -1.990362 0.000000 -vt 0.906615 -1.967295 0.000000 -vt 0.907843 -1.926622 0.000000 -vt 0.904987 -1.885869 0.000000 -vt 0.902730 -1.858766 0.000000 -vt 0.900427 -1.834083 0.000000 -vt 0.899434 -1.809395 0.000000 -vt 0.901911 -1.768313 0.000000 -vt 0.903507 -1.730192 0.000000 -vt 0.912863 -1.702382 0.000000 -vt 0.919938 -1.674206 0.000000 -vt 0.931004 -1.666544 0.000000 -vt 0.239676 -1.435187 0.000000 -vt 0.225132 -1.441651 0.000000 -vt 0.234272 -1.489750 0.000000 -vt 0.222098 -1.496886 0.000000 -vt 0.218564 -1.551303 0.000000 -vt 0.206801 -1.556883 0.000000 -vt 0.203634 -1.608481 0.000000 -vt 0.193201 -1.609948 0.000000 -vt 0.200662 -1.658381 0.000000 -vt 0.195318 -1.560638 0.000000 -vt 0.208998 -1.503417 0.000000 -vt 0.211009 -1.448208 0.000000 -vt 0.196543 -1.510135 0.000000 -vt 0.197906 -1.454998 0.000000 -vt 0.112348 -1.316229 0.000000 -vt 0.111931 -1.330433 0.000000 -vt 0.113731 -1.300853 0.000000 -vt 0.113361 -1.326869 0.000000 -vt 0.116186 -1.331598 0.000000 -vt 0.118006 -1.338238 0.000000 -vt 0.118890 -1.334722 0.000000 -vt 0.635545 -1.834651 0.000000 -vt 0.664843 -1.844897 0.000000 -vt 0.663736 -1.821580 0.000000 -vt 0.658145 -1.927803 0.000000 -vt 0.624734 -1.916325 0.000000 -vt 0.609506 -1.826174 0.000000 -vt 0.632450 -1.808114 0.000000 -vt 0.605818 -1.797296 0.000000 -vt 0.649104 -2.000000 0.000000 -vt 0.674404 -2.000000 0.000000 -vt 0.630588 -2.000000 0.000000 -vt 0.624247 -2.000000 0.000000 -vt 0.606706 -1.897207 0.000000 -vt 0.591098 -1.821240 0.000000 -vt 0.584928 -1.788339 0.000000 -vt 0.691797 -1.603798 0.000000 -vt 0.685165 -1.594479 0.000000 -vt 0.672168 -1.603508 0.000000 -vt 0.683532 -1.617246 0.000000 -vt 0.706602 -1.627915 0.000000 -vt 0.680387 -1.681479 0.000000 -vt 0.662003 -1.656000 0.000000 -vt 0.633129 -1.717710 0.000000 -vt 0.649271 -1.633070 0.000000 -vt 0.619739 -1.688735 0.000000 -vt 0.593859 -1.749042 0.000000 -vt 0.611552 -1.768040 0.000000 -vt 0.637651 -1.785493 0.000000 -vt 0.668662 -1.802818 0.000000 -vt 0.650162 -1.754521 0.000000 -vt 0.731355 -1.656428 0.000000 -vt 0.697042 -1.593955 0.000000 -vt 0.691308 -1.574101 0.000000 -vt 0.712508 -1.619079 0.000000 -vt 0.735445 -1.646480 0.000000 -vt 0.319701 -1.002891 0.000000 -vt 0.178356 -1.651137 0.000000 -vt 0.181639 -1.609963 0.000000 -vt 0.169174 -1.612300 0.000000 -vt 0.171333 -1.571906 0.000000 -vt 0.183419 -1.564786 0.000000 -vt 0.171678 -1.528616 0.000000 -vt 0.184355 -1.517579 0.000000 -vt 0.170287 -1.485541 0.000000 -vt 0.183866 -1.467952 0.000000 -vt 0.168411 -1.439861 0.000000 -vt 0.182301 -1.419072 0.000000 -vt 0.115901 -1.562303 0.000000 -vt 0.101592 -1.549777 0.000000 -vt 0.087816 -1.541102 0.000000 -vt 0.087365 -1.557073 0.000000 -vt 0.100481 -1.568195 0.000000 -vt 0.086223 -1.521888 0.000000 -vt 0.324517 -1.611261 0.000000 -vt 0.085471 -1.574157 0.000000 -vt 0.097086 -1.587238 0.000000 -vt 0.124699 -1.282167 0.000000 -vt 0.124666 -1.286551 0.000000 -vt 0.125604 -1.299490 0.000000 -vt 0.735771 -1.543787 0.000000 -vt 0.868464 -1.449891 0.000000 -vt 0.831471 -1.447903 0.000000 -vt 0.832612 -1.407113 0.000000 -vt 0.790689 -1.379832 0.000000 -vt 0.791941 -1.431306 0.000000 -vt 0.744584 -1.342777 0.000000 -vt 0.750824 -1.406667 0.000000 -vt 0.718187 -1.313491 0.000000 -vt 0.723628 -1.375553 0.000000 -vt 0.728746 -1.470001 0.000000 -vt 0.767888 -1.602933 0.000000 -vt 0.753775 -1.484318 0.000000 -vt 0.783954 -1.327620 0.000000 -vt 0.831175 -1.363399 0.000000 -vt 0.776932 -1.653661 0.000000 -vt 0.789319 -1.603460 0.000000 -vt 0.789028 -1.583573 0.000000 -vt 0.759135 -1.643469 0.000000 -vt 0.766556 -1.664376 0.000000 -vt 0.769892 -1.669891 0.000000 -vt 0.796397 -1.535006 0.000000 -vt 0.806950 -1.546212 0.000000 -vt 0.809411 -1.534909 0.000000 -vt 0.796609 -1.555446 0.000000 -vt 0.783281 -1.546125 0.000000 -vt 0.759508 -1.551500 0.000000 -vt 0.790233 -1.495239 0.000000 -vt 0.823086 -1.508166 0.000000 -vt 0.851456 -1.544599 0.000000 -vt 0.821917 -1.551077 0.000000 -vt 0.838329 -1.586606 0.000000 -vt 0.818290 -1.558999 0.000000 -vt 0.833771 -1.598464 0.000000 -vt 0.872707 -1.595751 0.000000 -vt 0.854798 -1.647519 0.000000 -vt 0.855348 -1.715277 0.000000 -vt 0.849165 -1.663175 0.000000 -vt 0.774210 -1.675986 0.000000 -vt 0.780923 -1.676583 0.000000 -vt 0.920535 -1.537478 0.000000 -vt 0.930603 -1.561657 0.000000 -vt 0.928462 -1.575369 0.000000 -vt 0.904673 -1.608760 0.000000 -vt 0.888811 -1.680042 0.000000 -vt 0.862037 -1.697608 0.000000 -vt 0.866439 -1.733115 0.000000 -vt 0.859678 -1.750128 0.000000 -vt 0.873211 -1.788904 0.000000 -vt 0.926320 -1.589081 0.000000 -vt 0.922038 -1.616506 0.000000 -vt 0.907985 -1.701513 0.000000 -vt 0.904568 -1.721845 0.000000 -vt 0.889277 -1.773130 0.000000 -vt 0.899397 -1.756141 0.000000 -vt 0.890270 -1.817101 0.000000 -vt 0.448424 -1.026541 0.000000 -vt 0.460156 -1.009018 0.000000 -vt 0.465046 -1.083032 0.000000 -vt 0.460564 -1.009188 0.000000 -vt 0.416465 -1.096594 0.000000 -vt 0.417352 -1.060327 0.000000 -vt 0.378312 -1.060181 0.000000 -vt 0.386269 -1.035703 0.000000 -vt 0.418597 -1.030385 0.000000 -vt 0.448674 -1.060313 0.000000 -vt 0.486775 -1.018199 0.000000 -vt 0.483748 -1.090110 0.000000 -vt 0.371632 -1.012923 0.000000 -vt 0.446848 -1.102002 0.000000 -vt 0.873556 -1.057154 0.000000 -vt 0.882301 -1.034338 0.000000 -vt 0.877625 -1.076667 0.000000 -vt 0.868702 -1.170970 0.000000 -vt 0.856767 -1.162794 0.000000 -vt 0.872678 -1.033555 0.000000 -vt 0.838879 -1.143008 0.000000 -vt 0.836671 -1.247690 0.000000 -vt 0.848911 -1.264801 0.000000 -vt 0.862667 -1.275749 0.000000 -vt 0.856602 -1.311743 0.000000 -vt 0.843253 -1.294858 0.000000 -vt 0.831256 -1.278594 0.000000 -vt 0.822419 -1.228117 0.000000 -vt 0.794525 -1.194206 0.000000 -vt 0.806075 -1.115153 0.000000 -vt 0.759715 -1.155960 0.000000 -vt 0.722991 -1.114285 0.000000 -vt 0.737200 -1.068398 0.000000 -vt 0.697592 -1.056618 0.000000 -vt 0.704073 -1.041870 0.000000 -vt 0.683979 -1.038960 0.000000 -vt 0.686805 -1.026919 0.000000 -vt 0.754748 -1.174980 0.000000 -vt 0.816185 -1.255371 0.000000 -vt 0.788251 -1.028544 0.000000 -vt 0.778228 -1.026391 0.000000 -vt 0.743095 -1.018616 0.000000 -vt 0.683446 -1.001410 0.000000 -vt 0.674577 -1.016457 0.000000 -vt 0.669294 -1.010868 0.000000 -vt 0.674465 -1.035880 0.000000 -vt 0.717604 -1.126985 0.000000 -vt 0.669081 -1.032925 0.000000 -vt 0.682678 -1.069603 0.000000 -vt 0.884478 -1.023802 0.000000 -vt 0.891191 -1.009180 0.000000 -vt 0.886146 -1.001169 0.000000 -vt 0.856125 -1.034210 0.000000 -vt 0.821950 -1.034136 0.000000 -vt 0.791851 -1.011704 0.000000 -vt 0.785059 -1.011152 0.000000 -vt 0.778266 -1.010600 0.000000 -vt 0.750097 -1.007531 0.000000 -vt 0.821321 -1.014169 0.000000 -vt 0.864709 -1.009795 0.000000 -vt 0.911712 -1.376173 0.000000 -vt 0.902175 -1.303666 0.000000 -vt 0.871793 -1.337811 0.000000 -vt 0.874605 -1.380220 0.000000 -vt 0.901591 -1.479251 0.000000 -vt 0.943406 -1.408566 0.000000 -vt 0.941100 -1.506833 0.000000 -vt 0.946986 -1.478539 0.000000 -vt 0.958182 -1.427882 0.000000 -vt 0.966740 -1.378092 0.000000 -vt 0.947957 -1.345697 0.000000 -vt 0.961157 -1.264556 0.000000 -vt 0.980454 -1.268193 0.000000 -vt 0.979086 -1.143921 0.000000 -vt 0.990721 -1.164675 0.000000 -vt 0.992966 -1.146823 0.000000 -vt 0.985707 -1.104695 0.000000 -vt 0.995277 -1.127823 0.000000 -vt 0.996872 -1.096645 0.000000 -vt 0.992327 -1.065469 0.000000 -vt 0.997689 -1.080234 0.000000 -vt 0.998506 -1.063823 0.000000 -vt 0.997879 -1.053395 0.000000 -vt 0.990076 -1.039680 0.000000 -vt 0.918930 -1.263019 0.000000 -vt 0.933605 -1.196023 0.000000 -vt 0.964147 -1.093431 0.000000 -vt 0.980260 -1.035985 0.000000 -vt 0.996635 -1.032298 0.000000 -vt 0.996733 -1.024555 0.000000 -vt 0.993292 -1.019213 0.000000 -vt 0.986591 -1.029888 0.000000 -vt 0.983862 -1.018574 0.000000 -vt 0.967548 -1.048480 0.000000 -vt 0.948655 -1.096395 0.000000 -vt 0.918020 -1.195984 0.000000 -vt 0.909298 -1.235384 0.000000 -vt 0.895102 -1.279751 0.000000 -vt 0.868171 -1.322349 0.000000 -vt 0.841689 -1.338467 0.000000 -vt 0.840453 -1.326999 0.000000 -vt 0.817873 -1.318832 0.000000 -vt 0.786259 -1.292840 0.000000 -vt 0.738767 -1.277552 0.000000 -vt 0.713570 -1.257357 0.000000 -vt 0.704198 -1.204683 0.000000 -vt 0.695617 -1.167916 0.000000 -vt 0.715974 -1.214550 0.000000 -vt 0.709123 -1.176195 0.000000 -vt 0.733426 -1.232167 0.000000 -vt 0.754549 -1.252159 0.000000 -vt 0.818910 -1.306408 0.000000 -vt 0.786953 -1.272963 0.000000 -vt 0.754786 -1.228972 0.000000 -vt 0.727630 -1.190724 0.000000 -vt 0.717370 -1.167818 0.000000 -vt 0.742804 -1.006548 0.000000 -vt 0.735512 -1.005566 0.000000 -vt 0.707649 -1.009399 0.000000 -vt 0.691990 -1.017693 0.000000 -vt 0.706908 -1.001807 0.000000 -vt 0.818734 -1.750746 0.000000 -vt 0.821558 -1.743763 0.000000 -vt 0.836605 -1.765130 0.000000 -vt 0.806083 -1.725569 0.000000 -vt 0.767717 -1.873315 0.000000 -vt 0.731884 -1.857072 0.000000 -vt 0.734750 -1.844921 0.000000 -vt 0.770279 -1.864333 0.000000 -vt 0.804203 -1.890521 0.000000 -vt 0.805482 -1.885027 0.000000 -vt 0.839887 -1.906794 0.000000 -vt 0.697293 -1.839755 0.000000 -vt 0.701933 -1.823977 0.000000 -vt 0.728434 -1.809179 0.000000 -vt 0.795259 -1.852893 0.000000 -vt 0.680426 -1.775428 0.000000 -vt 0.710091 -1.707665 0.000000 -vt 0.755581 -1.744866 0.000000 -vt 0.819690 -1.799653 0.000000 -vt 0.844632 -1.887231 0.000000 -vt 0.862555 -1.849119 0.000000 -vt 0.872334 -1.903581 0.000000 -vt 0.875543 -1.838784 0.000000 -vt 0.895359 -1.881641 0.000000 -vt 0.891669 -1.880324 0.000000 -vt 0.870737 -1.841385 0.000000 -vt 0.847863 -1.792350 0.000000 -vt 0.833298 -1.771548 0.000000 -vt 0.786481 -1.715187 0.000000 -vt 0.772770 -1.699979 0.000000 -vt 0.759059 -1.684771 0.000000 -vt 0.802608 -1.732966 0.000000 -vt 0.895671 -1.905655 0.000000 -vt 0.902254 -1.909584 0.000000 -vt 0.901453 -1.918279 0.000000 -vt 0.899046 -1.894277 0.000000 -vt 0.885574 -1.880452 0.000000 -vt 0.840665 -1.902468 0.000000 -vt 0.870833 -1.913367 0.000000 -vt 0.890827 -1.920774 0.000000 -vt 0.896034 -1.923808 0.000000 -vt 0.900198 -1.923259 0.000000 -vt 0.901816 -1.929562 0.000000 -vt 0.902802 -1.925418 0.000000 -vt 0.903007 -1.915511 0.000000 -vt 0.901766 -1.898455 0.000000 -vt 0.888213 -1.913529 0.000000 -vt 0.879281 -1.968759 0.000000 -vt 0.881910 -1.980870 0.000000 -vt 0.851332 -1.993116 0.000000 -vt 0.892315 -1.971011 0.000000 -vt 0.903579 -1.896675 0.000000 -vt 0.904864 -1.915397 0.000000 -vt 0.903982 -1.928508 0.000000 -vt 0.901738 -1.935303 0.000000 -vt 0.897240 -1.930644 0.000000 -vt 0.891578 -1.926810 0.000000 -vt 0.871482 -1.917706 0.000000 -vt 0.891390 -1.939873 0.000000 -vt 0.872790 -1.931483 0.000000 -vt 0.847530 -1.950827 0.000000 -vt 0.791573 -1.948929 0.000000 -vt 0.894119 -1.958670 0.000000 -vt 0.901972 -1.947420 0.000000 -vt 0.698768 -1.857813 0.000000 -vt 0.732920 -1.868553 0.000000 -vt 0.769226 -1.883032 0.000000 -vt 0.805016 -1.895773 0.000000 -vt 0.840911 -1.909371 0.000000 -vt 0.720049 -1.939264 0.000000 -vt 0.812356 -2.000000 0.000000 -vt 0.793879 -2.000000 0.000000 -vt 0.775403 -2.000000 0.000000 -vt 0.756302 -2.000000 0.000000 -vt 0.737200 -2.000000 0.000000 -vt 0.721244 -2.000000 0.000000 -vt 0.705288 -2.000000 0.000000 -vt 0.762013 -1.675753 0.000000 -vt 0.776310 -1.691565 0.000000 -vt 0.790608 -1.707376 0.000000 -vt 0.900073 -1.959154 0.000000 -vt 0.896981 -1.878276 0.000000 -vt 0.878507 -1.833722 0.000000 -vt 0.851652 -1.786498 0.000000 -vt 0.390421 -1.005564 0.000000 -vt 0.789915 -1.216425 0.000000 -vt 0.777015 -1.094719 0.000000 -vt 0.767205 -1.164189 0.000000 -vt 0.763570 -1.185377 0.000000 -vt 0.768845 -1.089199 0.000000 -vt 0.772930 -1.091959 0.000000 -vt 0.783239 -1.027467 0.000000 -vt 0.763460 -1.160074 0.000000 -vt 0.759159 -1.180178 0.000000 -vt 0.401810 -1.048015 0.000000 -vt 0.846719 -1.205242 0.000000 -vt 0.858806 -1.217885 0.000000 -vt 0.404509 -1.017974 0.000000 -vt 0.830649 -1.185562 0.000000 -vt 0.800300 -1.154680 0.000000 -vt 0.730096 -1.091341 0.000000 -vt 0.772110 -1.129454 0.000000 -vt 0.764280 -1.122580 0.000000 -vt 0.768195 -1.126017 0.000000 -vt 0.871129 -1.114062 0.000000 -vt 0.864722 -1.098175 0.000000 -vt 0.740147 -1.043507 0.000000 -vt 0.847502 -1.088609 0.000000 -vt 0.814013 -1.074645 0.000000 -vt 0.782633 -1.061631 0.000000 -vt 0.773536 -1.057795 0.000000 -vt 0.778085 -1.059713 0.000000 -vt 0.707526 -1.025428 0.000000 -vt 0.680666 -1.049033 0.000000 -vt 0.677689 -1.056144 0.000000 -vt 0.693307 -1.007996 0.000000 -vt 0.693821 -1.001585 0.000000 -vt 0.557941 -1.596903 0.000000 -vt 0.731385 -1.328134 0.000000 -vt 0.737226 -1.391110 0.000000 -vt 0.741261 -1.477160 0.000000 -vt 0.747639 -1.547643 0.000000 -vt 0.726169 -1.267455 0.000000 -vt 0.502894 -1.879317 0.000000 -vt 0.490766 -1.880166 0.000000 -vt 0.006606 -1.206461 0.000000 -vt 0.008836 -1.447666 0.000000 -vt 0.126570 -1.048028 0.000000 -vt 0.140492 -1.045681 0.000000 -vt 0.154193 -1.042975 0.000000 -vt 0.169102 -1.043159 0.000000 -vt 0.186471 -1.036615 0.000000 -vt 0.205539 -1.034192 0.000000 -vt 0.225172 -1.031927 0.000000 -vt 0.030951 -1.128734 0.000000 -vt 0.043399 -1.097405 0.000000 -vt 0.058511 -1.079011 0.000000 -vt 0.075902 -1.060246 0.000000 -vt 0.094251 -1.054044 0.000000 -vt 0.111930 -1.051578 0.000000 -vt 0.296956 -1.022540 0.000000 -vt 0.280875 -1.023822 0.000000 -vt 0.263979 -1.026849 0.000000 -vt 0.244949 -1.029730 0.000000 -vt 0.009456 -1.435879 0.000000 -vt 0.010196 -1.404411 0.000000 -vt 0.010771 -1.367130 0.000000 -vt 0.011434 -1.320289 0.000000 -vt 0.011202 -1.272311 0.000000 -vt 0.011669 -1.282262 0.000000 -vt 0.011261 -1.253556 0.000000 -vt 0.025050 -1.152670 0.000000 -vt 0.020693 -1.172719 0.000000 -vt 0.016297 -1.199821 0.000000 -vt 0.013774 -1.210080 0.000000 -vt 0.348080 -1.024523 0.000000 -vt 0.319165 -1.022663 0.000000 -vt 0.033010 -1.160599 0.000000 -vt 0.260733 -1.950420 0.000000 -vt 0.233243 -1.950001 0.000000 -vt 0.208695 -1.949359 0.000000 -vt 0.195127 -1.950757 0.000000 -vt 0.182990 -1.957152 0.000000 -vt 0.120822 -1.952549 0.000000 -vt 0.096126 -1.936267 0.000000 -vt 0.140709 -1.958533 0.000000 -vt 0.169969 -1.959657 0.000000 -vt 0.156460 -1.960757 0.000000 -vt 0.293100 -1.950645 0.000000 -vt 0.359930 -1.889976 0.000000 -vt 0.333715 -1.924665 0.000000 -vt 0.484939 -1.764766 0.000000 -vt 0.451799 -1.796255 0.000000 -vt 0.407990 -1.832045 0.000000 -vt 0.234038 -1.868948 0.000000 -vt 0.211308 -1.866613 0.000000 -vt 0.198514 -1.866995 0.000000 -vt 0.099355 -1.859057 0.000000 -vt 0.122468 -1.870368 0.000000 -vt 0.186004 -1.877387 0.000000 -vt 0.143675 -1.878700 0.000000 -vt 0.174147 -1.881484 0.000000 -vt 0.160737 -1.883707 0.000000 -vt 0.523130 -1.727958 0.000000 -vt 0.565493 -1.688779 0.000000 -vt 0.259929 -1.869781 0.000000 -vt 0.352880 -1.832436 0.000000 -vt 0.331150 -1.853282 0.000000 -vt 0.291954 -1.870933 0.000000 -vt 0.077818 -1.846440 0.000000 -vt 0.076698 -1.846472 0.000000 -vt 0.448065 -1.744627 0.000000 -vt 0.403141 -1.766137 0.000000 -vt 0.202177 -1.796154 0.000000 -vt 0.213262 -1.800647 0.000000 -vt 0.521043 -1.687670 0.000000 -vt 0.481099 -1.718217 0.000000 -vt 0.550246 -1.668446 0.000000 -vt 0.567156 -1.655750 0.000000 -vt 0.624892 -1.544292 0.000000 -vt 0.614383 -1.573015 0.000000 -vt 0.593163 -1.619743 0.000000 -vt 0.233934 -1.802528 0.000000 -vt 0.259479 -1.805235 0.000000 -vt 0.292136 -1.805387 0.000000 -vt 0.330784 -1.790482 0.000000 -vt 0.354816 -1.769112 0.000000 -vt 0.571951 -1.200272 0.000000 -vt 0.575188 -1.143112 0.000000 -vt 0.581368 -1.103683 0.000000 -vt 0.571920 -1.249089 0.000000 -vt 0.576627 -1.517915 0.000000 -vt 0.572597 -1.317291 0.000000 -vt 0.574373 -1.381397 0.000000 -vt 0.576874 -1.451439 0.000000 -vt 0.521139 -1.479678 0.000000 -vt 0.561584 -1.461517 0.000000 -vt 0.048964 -1.306560 0.000000 -vt 0.034646 -1.278434 0.000000 -vt 0.065731 -1.319089 0.000000 -vt 0.085832 -1.330440 0.000000 -vt 0.011088 -1.344768 0.000000 -vt 0.023361 -1.285007 0.000000 -vt 0.024648 -1.272536 0.000000 -vt 0.674511 -1.027898 0.000000 -vt 0.678820 -1.009259 0.000000 -vt 0.378951 -1.024313 0.000000 -vt 0.859635 -1.293746 0.000000 -vt 0.375807 -1.042459 0.000000 -vt 0.846082 -1.279830 0.000000 -vt 0.833964 -1.263142 0.000000 -vt 0.757231 -1.165470 0.000000 -vt 0.819302 -1.241744 0.000000 -vt 0.720297 -1.120635 0.000000 -vt 0.671773 -1.034402 0.000000 -vt 0.685582 -1.067610 0.000000 -vt 0.792220 -1.205316 0.000000 -vt 0.765387 -1.174783 0.000000 -vt 0.761309 -1.170126 0.000000 -vt 0.679177 -1.052589 0.000000 -vt 0.889036 -1.724908 0.000000 -vt 0.767637 -1.361305 0.000000 -vt 0.771382 -1.418987 0.000000 -vt 0.778458 -1.593253 0.000000 -vt 0.771394 -1.548813 0.000000 -vt 0.772004 -1.489779 0.000000 -vt 0.761361 -1.302586 0.000000 -vt 0.811651 -1.393472 0.000000 -vt 0.811706 -1.439605 0.000000 -vt 0.807564 -1.345510 0.000000 -vt 0.806660 -1.501703 0.000000 -vt 0.797993 -1.498292 0.000000 -vt 0.800857 -1.435050 0.000000 -vt 0.799380 -1.385488 0.000000 -vt 0.794125 -1.335326 0.000000 -vt 0.797259 -1.301884 0.000000 -vt 0.797468 -1.283968 0.000000 -vt 0.928462 -1.575369 0.000000 -vt 0.871646 -1.413785 0.000000 -vt 0.907476 -1.419315 0.000000 -vt 0.913659 -1.215684 0.000000 -vt 0.926268 -1.229521 0.000000 -vt 0.954557 -1.305127 0.000000 -vt 0.973483 -1.325801 0.000000 -vt 0.904249 -1.452185 0.000000 -vt 0.870256 -1.429556 0.000000 -vt 0.928509 -1.496037 0.000000 -vt 0.894454 -1.508035 0.000000 -vt 0.863649 -1.476700 0.000000 -vt 0.934410 -1.465370 0.000000 -vt 0.912573 -1.573260 0.000000 -vt 0.885187 -1.545414 0.000000 -vt 0.855529 -1.521919 0.000000 -vt 0.956865 -1.117890 0.000000 -vt 0.945665 -1.106115 0.000000 -vt 0.954648 -1.081197 0.000000 -vt 0.982371 -1.124458 0.000000 -vt 0.960856 -1.104486 0.000000 -vt 0.950011 -1.092956 0.000000 -vt 0.988369 -1.088922 0.000000 -vt 0.969733 -1.073515 0.000000 -vt 0.962069 -1.062375 0.000000 -vt 0.974125 -1.057857 0.000000 -vt 0.990135 -1.046771 0.000000 -vt 0.976206 -1.027821 0.000000 -vt 0.997512 -1.047169 0.000000 -vt 0.971877 -1.038151 0.000000 -vt 0.977193 -1.046921 0.000000 -vt 0.991231 -1.056120 0.000000 -vt 0.994896 -1.059882 0.000000 -vt 0.997059 -1.039486 0.000000 -vt 0.992483 -1.034211 0.000000 -vt 0.989514 -1.025232 0.000000 -vt 0.836432 -1.350933 0.000000 -vt 0.785107 -1.310230 0.000000 -vt 0.708884 -1.231020 0.000000 -vt 0.736097 -1.254859 0.000000 -vt 0.873199 -1.359015 0.000000 -vt 0.906944 -1.339919 0.000000 -vt 0.933443 -1.304358 0.000000 -vt 0.947381 -1.230289 0.000000 -vt 0.974927 -1.099063 0.000000 -vt 0.721071 -1.241002 0.000000 -vt 0.757955 -1.277372 0.000000 -vt 0.812719 -1.332171 0.000000 -vt 0.795692 -1.318605 0.000000 -vt 0.940412 -1.267324 0.000000 -vt 0.967976 -1.130906 0.000000 -vt 0.971614 -1.114472 0.000000 -vt 0.979051 -1.081219 0.000000 -vt 0.983226 -1.061663 0.000000 -vt 0.985198 -1.041378 0.000000 -vt 0.988333 -1.034784 0.000000 -vt 0.984212 -1.051520 0.000000 -vt 0.990998 -1.029721 0.000000 -vt 0.638937 -1.211467 0.000000 -vt 0.666181 -1.214113 0.000000 -vt 0.554908 -1.163305 0.000000 -vt 0.515201 -1.142310 0.000000 -vt 0.592231 -1.180079 0.000000 -vt 0.615982 -1.196080 0.000000 -vt 0.688108 -1.215248 0.000000 -vt 0.477426 -1.124892 0.000000 -vt 0.573570 -1.171692 0.000000 -vt 0.707730 -1.302733 0.000000 -vt 0.713452 -1.364890 0.000000 -vt 0.717610 -1.461324 0.000000 -vt 0.724434 -1.533291 0.000000 -vt 0.730107 -1.574776 0.000000 -vt 0.702600 -1.249041 0.000000 -vt 0.694392 -1.197227 0.000000 -vt 0.688126 -1.160658 0.000000 -vt 0.698496 -1.223134 0.000000 -vt 0.676805 -1.106695 0.000000 -vt 0.677229 -1.156718 0.000000 -vt 0.724786 -1.320812 0.000000 -vt 0.741705 -1.545715 0.000000 -vt 0.719869 -1.262406 0.000000 -vt 0.710086 -1.209616 0.000000 -vt 0.702370 -1.172056 0.000000 -vt 0.730427 -1.383332 0.000000 -vt 0.735003 -1.473580 0.000000 -vt 0.714978 -1.236011 0.000000 -vt 0.780825 -1.603251 0.000000 -vt 0.675443 -1.125766 0.000000 -vt 0.690262 -1.134125 0.000000 -vt 0.702688 -1.145454 0.000000 -vt 0.706811 -1.141266 0.000000 -vt 0.682465 -1.133677 0.000000 -vt 0.694748 -1.137451 0.000000 -vt 0.690510 -1.118213 0.000000 -vt 0.686821 -1.112411 0.000000 -vt 0.690476 -1.107204 0.000000 -vt 0.688368 -1.108490 0.000000 -vt 0.685445 -1.147878 0.000000 -vt 0.692950 -1.151085 0.000000 -vt 0.698345 -1.153784 0.000000 -vt 0.705516 -1.158965 0.000000 -vt 0.712188 -1.154787 0.000000 -vt 0.856146 -1.518482 0.000000 -vt 0.886711 -1.539266 0.000000 -vt 0.914676 -1.563807 0.000000 -vt 0.994829 -1.028880 0.000000 -vt 0.993432 -1.024969 0.000000 -vt 0.992080 -1.021143 0.000000 -vt 0.120468 -1.257224 0.000000 -vt 0.118578 -1.217008 0.000000 -vt 0.119299 -1.164057 0.000000 -vt 0.119907 -1.114432 0.000000 -vt 0.118559 -1.029198 0.000000 -vt 0.119942 -1.070409 0.000000 -vt 0.119250 -1.049803 0.000000 -vt 0.101191 -1.292050 0.000000 -vt 0.088795 -1.278592 0.000000 -vt 0.069162 -1.266123 0.000000 -vt 0.035974 -1.239597 0.000000 -vt 0.027318 -1.234011 0.000000 -vt 0.051185 -1.253117 0.000000 -vt 0.019732 -1.233324 0.000000 -vt 0.005303 -1.230312 0.000000 -vt 0.012518 -1.231818 0.000000 -vt 0.071053 -1.482288 0.000000 -vt 0.067760 -1.488510 0.000000 -vt 0.064469 -1.494733 0.000000 -vt 0.079635 -1.463732 0.000000 -vt 0.089061 -1.437284 0.000000 -vt 0.095741 -1.410493 0.000000 -vt 0.102130 -1.380942 0.000000 -vt 0.110278 -1.351714 0.000000 -vt 0.068755 -1.481037 0.000000 -vt 0.077341 -1.462257 0.000000 -vt 0.086471 -1.434701 0.000000 -vt 0.092825 -1.407693 0.000000 -vt 0.065600 -1.487176 0.000000 -vt 0.062445 -1.493315 0.000000 -vt 0.099062 -1.377749 0.000000 -vt 0.107505 -1.348477 0.000000 -vt 0.111931 -1.330433 0.000000 -vt 0.055953 -1.489773 0.000000 -vt 0.058737 -1.483498 0.000000 -vt 0.061520 -1.477222 0.000000 -vt 0.069541 -1.457127 0.000000 -vt 0.077186 -1.426308 0.000000 -vt 0.083008 -1.397959 0.000000 -vt 0.090103 -1.366326 0.000000 -vt 0.101091 -1.212062 0.000000 -vt 0.102312 -1.160848 0.000000 -vt 0.102496 -1.034827 0.000000 -vt 0.103685 -1.070795 0.000000 -vt 0.103434 -1.112412 0.000000 -vt 0.103091 -1.052811 0.000000 -vt 0.095860 -1.338803 0.000000 -vt 0.088640 -1.474022 0.000000 -vt 0.079320 -1.491444 0.000000 -vt 0.075355 -1.497833 0.000000 -vt 0.071392 -1.504221 0.000000 -vt 0.099482 -1.452224 0.000000 -vt 0.107753 -1.429019 0.000000 -vt 0.114567 -1.396402 0.000000 -vt 0.121635 -1.355956 0.000000 -vt 0.109858 -1.677215 0.000000 -vt 0.113534 -1.638832 0.000000 -vt 0.117994 -1.608641 0.000000 -vt 0.123510 -1.583159 0.000000 -vt 0.120848 -1.596052 0.000000 -vt 0.124744 -1.558508 0.000000 -vt 0.125575 -1.533053 0.000000 -vt 0.033584 -1.881386 0.000000 -vt 0.027431 -1.851104 0.000000 -vt 0.025444 -1.851157 0.000000 -vt 0.025657 -1.841912 0.000000 -vt 0.013632 -1.793564 0.000000 -vt 0.011710 -1.773428 0.000000 -vt 0.912948 -1.994485 0.000000 -vt 0.979932 -1.936245 0.000000 -vt 0.935363 -1.964203 0.000000 -vt 0.020457 -1.812779 0.000000 -vt 0.049145 -1.789672 0.000000 -vt 0.040765 -1.780266 0.000000 -vt 0.042483 -1.783894 0.000000 -vt 0.035166 -1.763071 0.000000 -vt 0.029234 -1.753252 0.000000 -vt 0.030113 -1.724352 0.000000 -vt 0.029130 -1.707231 0.000000 -vt 0.907027 -1.953635 0.000000 -vt 0.036702 -1.684266 0.000000 -vt 0.907516 -1.937442 0.000000 -vt 0.928244 -1.945391 0.000000 -vt 0.043914 -1.676582 0.000000 -vt 0.058879 -1.662701 0.000000 -vt 0.055413 -1.665854 0.000000 -vt 0.055799 -1.664262 0.000000 -vt 0.058746 -1.642169 0.000000 -vt 0.062480 -1.617383 0.000000 -vt 0.062894 -1.599573 0.000000 -vt 0.063354 -1.591873 0.000000 -vt 0.049758 -1.628381 0.000000 -vt 0.905602 -1.894651 0.000000 -vt 0.045916 -1.647860 0.000000 -vt 0.906679 -1.910013 0.000000 -vt 0.927424 -1.916396 0.000000 -vt 0.961451 -1.900387 0.000000 -vt 0.927849 -1.931424 0.000000 -vt 0.966270 -1.912741 0.000000 -vt 0.053609 -1.493723 0.000000 -vt 0.051344 -1.497695 0.000000 -vt 0.055042 -1.512336 0.000000 -vt 0.051441 -1.519049 0.000000 -vt 0.902709 -1.749253 0.000000 -vt 0.931941 -1.737513 0.000000 -vt 0.972592 -1.789377 0.000000 -vt 0.060187 -1.497615 0.000000 -vt 0.058115 -1.502089 0.000000 -vt 0.061816 -1.498860 0.000000 -vt 0.059229 -1.503019 0.000000 -vt 0.068324 -1.508463 0.000000 -vt 0.065321 -1.512809 0.000000 -vt 0.061716 -1.519164 0.000000 -vt 0.061720 -1.519135 0.000000 -vt 0.063152 -1.506295 0.000000 -vt 0.031523 -1.488273 0.000000 -vt 0.021811 -1.482606 0.000000 -vt 0.012710 -1.475196 0.000000 -vt 0.008406 -1.468437 0.000000 -vt 0.007803 -1.472111 0.000000 -vt 0.007104 -1.476348 0.000000 -vt 0.007521 -1.487368 0.000000 -vt 0.008168 -1.498328 0.000000 -vt 0.926051 -1.669974 0.000000 -vt 0.956645 -1.685330 0.000000 -vt 0.684547 -1.475559 0.000000 -vt 0.709785 -1.487721 0.000000 -vt 0.648129 -1.498595 0.000000 -vt 0.732258 -1.506894 0.000000 -vt 0.786757 -1.520682 0.000000 -vt 0.822502 -1.529621 0.000000 -vt 0.756642 -1.517909 0.000000 -vt 0.844893 -1.565603 0.000000 -vt 0.863752 -1.621635 0.000000 -vt 0.875424 -1.688825 0.000000 -vt 0.744450 -1.512401 0.000000 -vt 0.877737 -1.729011 0.000000 -vt 0.771699 -1.519295 0.000000 -vt 0.808035 -1.518306 0.000000 -vt 0.797195 -1.516649 0.000000 -vt 0.721022 -1.497308 0.000000 -vt 0.738354 -1.509648 0.000000 -vt 0.769727 -1.613245 0.000000 -vt 0.782013 -1.641141 0.000000 -vt 0.772953 -1.631341 0.000000 -vt 0.781495 -1.624611 0.000000 -vt 0.785380 -1.623775 0.000000 -vt 0.785380 -1.623775 0.000000 -vt 0.781495 -1.624611 0.000000 -vt 0.756201 -1.595970 0.000000 -vt 0.758351 -1.610034 0.000000 -vt 0.765229 -1.638120 0.000000 -vt 0.771195 -1.659586 0.000000 -vt 0.773039 -1.662635 0.000000 -vt 0.776960 -1.676231 0.000000 -vt 0.780025 -1.651358 0.000000 -vt 0.778566 -1.676373 0.000000 -vt 0.783438 -1.624193 0.000000 -vt 0.746757 -1.591153 0.000000 -vt 0.781662 -1.425146 0.000000 -vt 0.777338 -1.547469 0.000000 -vt 0.772657 -1.315103 0.000000 -vt 0.770404 -1.272500 0.000000 -vt 0.770869 -1.250968 0.000000 -vt 0.779163 -1.370568 0.000000 -vt 0.783743 -1.588413 0.000000 -vt 0.781119 -1.492509 0.000000 -vt 0.771531 -1.293801 0.000000 -vt 0.785072 -1.603356 0.000000 -vt 0.779228 -1.519989 0.000000 -vt 0.783438 -1.624193 0.000000 -vt 0.783438 -1.624193 0.000000 -vt 0.781122 -1.651433 0.000000 -vt 0.779568 -1.676463 0.000000 -vt 0.572550 -1.095736 0.000000 -vt 0.556195 -1.681437 0.000000 -vt 0.561208 -1.642759 0.000000 -vt 0.565815 -1.593769 0.000000 -vt 0.557612 -1.697742 0.000000 -vt 0.558702 -1.662098 0.000000 -vt 0.562282 -1.197540 0.000000 -vt 0.566195 -1.137457 0.000000 -vt 0.561890 -1.247855 0.000000 -vt 0.569477 -1.529718 0.000000 -vt 0.562663 -1.316732 0.000000 -vt 0.565119 -1.381388 0.000000 -vt 0.569229 -1.456478 0.000000 -vt 0.564239 -1.167499 0.000000 -vt 0.027380 -1.862869 0.000000 -vt 0.743319 -1.589605 0.000000 -vt 0.911852 -1.672553 0.000000 -vt 0.684445 -1.057049 0.000000 -vt 0.689818 -1.064299 0.000000 -vt 0.693719 -1.072999 0.000000 -vt 0.690844 -1.075648 0.000000 -vt 0.682275 -1.059854 0.000000 -vt 0.028298 -1.866741 0.000000 -vt 0.027655 -1.861896 0.000000 -vt 0.743703 -1.590411 0.000000 -vt 0.748650 -1.607294 0.000000 -vt 0.748289 -1.606488 0.000000 -vt 0.446752 -1.715340 0.000000 -vt 0.403717 -1.731732 0.000000 -vt 0.406444 -1.674046 0.000000 -vt 0.446338 -1.654965 0.000000 -vt 0.448065 -1.744627 0.000000 -vt 0.403141 -1.766137 0.000000 -vt 0.482736 -1.745417 0.000000 -vt 0.449378 -1.773914 0.000000 -vt 0.481099 -1.718217 0.000000 -vt 0.484939 -1.764766 0.000000 -vt 0.451799 -1.796255 0.000000 -vt 0.525027 -1.744065 0.000000 -vt 0.487142 -1.784114 0.000000 -vt 0.523130 -1.727958 0.000000 -vt 0.294060 -1.998123 0.000000 -vt 0.261291 -1.998123 0.000000 -vt 0.260733 -1.950420 0.000000 -vt 0.293100 -1.950645 0.000000 -vt 0.402566 -1.800541 0.000000 -vt 0.407990 -1.832045 0.000000 -vt 0.212716 -1.832632 0.000000 -vt 0.234681 -1.836018 0.000000 -vt 0.234038 -1.868948 0.000000 -vt 0.211308 -1.866613 0.000000 -vt 0.260174 -1.902717 0.000000 -vt 0.233395 -1.901878 0.000000 -vt 0.259929 -1.869781 0.000000 -vt 0.233243 -1.950001 0.000000 -vt 0.207490 -1.998123 0.000000 -vt 0.208695 -1.949359 0.000000 -vt 0.233092 -1.998123 0.000000 -vt 0.200128 -1.830599 0.000000 -vt 0.202177 -1.796154 0.000000 -vt 0.213262 -1.800647 0.000000 -vt 0.198514 -1.866995 0.000000 -vt 0.196899 -1.903391 0.000000 -vt 0.209900 -1.900594 0.000000 -vt 0.195127 -1.950757 0.000000 -vt 0.193355 -1.998123 0.000000 -vt 0.181675 -1.998123 0.000000 -vt 0.182990 -1.957152 0.000000 -vt 0.119529 -1.906975 0.000000 -vt 0.120822 -1.952549 0.000000 -vt 0.096126 -1.936267 0.000000 -vt 0.095799 -1.893192 0.000000 -vt 0.076566 -1.916809 0.000000 -vt 0.075643 -1.880779 0.000000 -vt 0.020457 -1.812779 0.000000 -vt 0.017825 -1.821418 0.000000 -vt 0.011290 -1.799756 0.000000 -vt 0.013632 -1.793564 0.000000 -vt 0.027396 -1.785532 0.000000 -vt 0.023777 -1.801886 0.000000 -vt 0.015974 -1.787372 0.000000 -vt 0.020882 -1.767666 0.000000 -vt 0.048154 -1.689095 0.000000 -vt 0.042312 -1.717822 0.000000 -vt 0.038954 -1.694980 0.000000 -vt 0.043914 -1.676582 0.000000 -vt 0.037770 -1.745502 0.000000 -vt 0.030113 -1.724352 0.000000 -vt 0.026146 -1.737531 0.000000 -vt 0.029234 -1.753252 0.000000 -vt 0.014673 -1.763152 0.000000 -vt 0.011710 -1.773428 0.000000 -vt 0.047642 -1.721780 0.000000 -vt 0.043389 -1.752899 0.000000 -vt 0.040662 -1.895972 0.000000 -vt 0.033584 -1.881386 0.000000 -vt 0.031305 -1.850318 0.000000 -vt 0.042193 -1.871274 0.000000 -vt 0.058582 -1.925624 0.000000 -vt 0.058445 -1.895681 0.000000 -vt 0.079779 -1.956599 0.000000 -vt 0.059784 -1.865820 0.000000 -vt 0.062982 -1.836631 0.000000 -vt 0.076698 -1.846472 0.000000 -vt 0.077691 -1.847184 0.000000 -vt 0.051095 -1.823497 0.000000 -vt 0.045238 -1.846102 0.000000 -vt 0.055767 -1.796061 0.000000 -vt 0.067845 -1.805737 0.000000 -vt 0.049145 -1.789672 0.000000 -vt 0.040757 -1.808938 0.000000 -vt 0.051101 -1.759935 0.000000 -vt 0.061013 -1.766202 0.000000 -vt 0.056688 -1.727679 0.000000 -vt 0.054948 -1.692947 0.000000 -vt 0.063452 -1.695331 0.000000 -vt 0.061178 -1.665146 0.000000 -vt 0.069144 -1.663610 0.000000 -vt 0.035047 -1.828789 0.000000 -vt 0.032866 -1.796256 0.000000 -vt 0.028504 -1.814632 0.000000 -vt 0.027431 -1.851104 0.000000 -vt 0.075563 -1.699664 0.000000 -vt 0.067490 -1.733082 0.000000 -vt 0.073683 -1.773260 0.000000 -vt 0.083082 -1.815702 0.000000 -vt 0.077818 -1.846440 0.000000 -vt 0.102912 -1.824921 0.000000 -vt 0.099355 -1.859057 0.000000 -vt 0.090330 -1.781697 0.000000 -vt 0.110892 -1.788463 0.000000 -vt 0.097411 -1.747905 0.000000 -vt 0.118027 -1.742299 0.000000 -vt 0.105760 -1.716434 0.000000 -vt 0.089610 -1.705625 0.000000 -vt 0.081150 -1.740666 0.000000 -vt 0.082223 -1.664710 0.000000 -vt 0.097597 -1.668863 0.000000 -vt 0.109858 -1.677215 0.000000 -vt 0.121155 -1.684910 0.000000 -vt 0.143720 -1.690302 0.000000 -vt 0.139482 -1.742248 0.000000 -vt 0.122468 -1.870368 0.000000 -vt 0.125406 -1.833760 0.000000 -vt 0.132669 -1.790749 0.000000 -vt 0.155805 -1.744368 0.000000 -vt 0.161322 -1.687738 0.000000 -vt 0.170196 -1.741237 0.000000 -vt 0.174723 -1.690471 0.000000 -vt 0.181658 -1.742250 0.000000 -vt 0.186903 -1.696989 0.000000 -vt 0.192653 -1.751974 0.000000 -vt 0.197694 -1.705134 0.000000 -vt 0.189831 -1.791338 0.000000 -vt 0.179061 -1.788542 0.000000 -vt 0.204227 -1.761708 0.000000 -vt 0.190461 -1.656656 0.000000 -vt 0.200662 -1.658381 0.000000 -vt 0.207223 -1.704071 0.000000 -vt 0.184304 -1.916180 0.000000 -vt 0.186004 -1.877387 0.000000 -vt 0.187704 -1.838594 0.000000 -vt 0.176877 -1.841777 0.000000 -vt 0.167131 -1.791695 0.000000 -vt 0.151598 -1.793337 0.000000 -vt 0.146040 -1.838457 0.000000 -vt 0.143675 -1.878700 0.000000 -vt 0.141310 -1.918942 0.000000 -vt 0.122115 -1.998123 0.000000 -vt 0.140709 -1.958533 0.000000 -vt 0.140107 -1.998123 0.000000 -vt 0.168522 -1.998123 0.000000 -vt 0.169969 -1.959657 0.000000 -vt 0.171416 -1.921191 0.000000 -vt 0.174147 -1.881484 0.000000 -vt 0.163360 -1.844024 0.000000 -vt 0.160737 -1.883707 0.000000 -vt 0.158115 -1.923390 0.000000 -vt 0.156460 -1.960757 0.000000 -vt 0.154804 -1.998123 0.000000 -vt 0.662816 -1.174689 0.000000 -vt 0.664387 -1.192741 0.000000 -vt 0.639267 -1.188892 0.000000 -vt 0.640050 -1.162971 0.000000 -vt 0.617705 -1.144318 0.000000 -vt 0.615889 -1.171577 0.000000 -vt 0.599003 -1.119578 0.000000 -vt 0.593173 -1.154422 0.000000 -vt 0.638937 -1.211467 0.000000 -vt 0.615982 -1.196080 0.000000 -vt 0.638607 -1.234041 0.000000 -vt 0.666181 -1.214113 0.000000 -vt 0.667975 -1.235484 0.000000 -vt 0.688108 -1.215248 0.000000 -vt 0.691630 -1.240725 0.000000 -vt 0.684586 -1.189772 0.000000 -vt 0.673988 -1.159874 0.000000 -vt 0.688807 -1.513222 0.000000 -vt 0.695542 -1.554549 0.000000 -vt 0.666089 -1.571621 0.000000 -vt 0.658095 -1.531948 0.000000 -vt 0.713097 -1.522795 0.000000 -vt 0.717034 -1.557598 0.000000 -vt 0.385126 -1.918928 0.000000 -vt 0.387647 -1.921755 0.000000 -vt 0.403322 -1.938097 0.000000 -vt 0.402613 -1.943667 0.000000 -vt 0.388820 -1.906694 0.000000 -vt 0.386453 -1.907733 0.000000 -vt 0.381982 -1.906575 0.000000 -vt 0.403451 -1.902720 0.000000 -vt 0.402483 -1.908047 0.000000 -vt 0.001306 -1.494628 0.000000 -vt 0.001824 -1.483959 0.000000 -vt 0.007521 -1.487368 0.000000 -vt 0.008168 -1.498328 0.000000 -vt 0.016637 -1.502894 0.000000 -vt 0.016832 -1.492939 0.000000 -vt 0.033586 -1.499729 0.000000 -vt 0.031878 -1.507013 0.000000 -vt 0.048688 -1.504969 0.000000 -vt 0.045574 -1.511990 0.000000 -vt 0.002341 -1.473290 0.000000 -vt 0.007104 -1.476348 0.000000 -vt 0.012510 -1.479819 0.000000 -vt 0.021542 -1.486149 0.000000 -vt 0.031137 -1.491360 0.000000 -vt 0.039453 -1.493529 0.000000 -vt 0.047788 -1.495727 0.000000 -vt 0.055816 -1.500169 0.000000 -vt 0.058115 -1.502089 0.000000 -vt 0.055042 -1.512336 0.000000 -vt 0.067817 -1.520307 0.000000 -vt 0.071043 -1.515590 0.000000 -vt 0.072679 -1.535981 0.000000 -vt 0.068938 -1.540070 0.000000 -vt 0.065321 -1.512809 0.000000 -vt 0.063152 -1.506295 0.000000 -vt 0.065833 -1.501933 0.000000 -vt 0.068324 -1.508463 0.000000 -vt 0.058119 -1.496033 0.000000 -vt 0.060187 -1.497615 0.000000 -vt 0.051344 -1.497695 0.000000 -vt 0.049636 -1.491689 0.000000 -vt 0.053609 -1.493723 0.000000 -vt 0.040920 -1.488740 0.000000 -vt 0.031523 -1.488273 0.000000 -vt 0.031931 -1.485008 0.000000 -vt 0.042387 -1.483950 0.000000 -vt 0.021811 -1.482606 0.000000 -vt 0.022099 -1.478823 0.000000 -vt 0.012710 -1.475196 0.000000 -vt 0.012861 -1.471720 0.000000 -vt 0.007803 -1.472111 0.000000 -vt 0.002779 -1.464289 0.000000 -vt 0.008406 -1.468437 0.000000 -vt 0.051485 -1.487650 0.000000 -vt 0.055953 -1.489773 0.000000 -vt 0.063440 -1.485841 0.000000 -vt 0.060422 -1.491896 0.000000 -vt 0.058737 -1.483498 0.000000 -vt 0.054034 -1.481154 0.000000 -vt 0.044253 -1.476796 0.000000 -vt 0.066457 -1.479787 0.000000 -vt 0.061520 -1.477222 0.000000 -vt 0.068755 -1.481037 0.000000 -vt 0.065600 -1.487176 0.000000 -vt 0.062445 -1.493315 0.000000 -vt 0.023664 -1.461783 0.000000 -vt 0.034001 -1.470381 0.000000 -vt 0.056583 -1.474657 0.000000 -vt 0.046119 -1.469642 0.000000 -vt 0.075047 -1.460783 0.000000 -vt 0.069541 -1.457127 0.000000 -vt 0.077341 -1.462257 0.000000 -vt 0.075648 -1.484789 0.000000 -vt 0.084222 -1.466680 0.000000 -vt 0.088640 -1.474022 0.000000 -vt 0.079320 -1.491444 0.000000 -vt 0.072081 -1.491180 0.000000 -vt 0.075355 -1.497833 0.000000 -vt 0.068515 -1.497570 0.000000 -vt 0.071392 -1.504221 0.000000 -vt 0.074269 -1.510873 0.000000 -vt 0.078630 -1.504486 0.000000 -vt 0.081322 -1.526890 0.000000 -vt 0.076420 -1.531893 0.000000 -vt 0.014062 -1.452431 0.000000 -vt 0.035279 -1.462105 0.000000 -vt 0.064034 -1.453471 0.000000 -vt 0.050634 -1.445945 0.000000 -vt 0.083881 -1.432119 0.000000 -vt 0.077186 -1.426308 0.000000 -vt 0.079635 -1.463732 0.000000 -vt 0.089061 -1.437284 0.000000 -vt 0.094242 -1.442449 0.000000 -vt 0.093058 -1.481364 0.000000 -vt 0.099482 -1.452224 0.000000 -vt 0.104722 -1.461998 0.000000 -vt 0.113933 -1.441943 0.000000 -vt 0.107753 -1.429019 0.000000 -vt 0.120869 -1.405478 0.000000 -vt 0.114567 -1.396402 0.000000 -vt 0.101572 -1.416095 0.000000 -vt 0.095741 -1.410493 0.000000 -vt 0.024672 -1.452069 0.000000 -vt 0.038916 -1.434224 0.000000 -vt 0.070492 -1.420497 0.000000 -vt 0.055746 -1.408106 0.000000 -vt 0.089909 -1.404892 0.000000 -vt 0.083008 -1.397959 0.000000 -vt 0.108264 -1.387326 0.000000 -vt 0.102130 -1.380942 0.000000 -vt 0.121635 -1.355956 0.000000 -vt 0.128450 -1.327870 0.000000 -vt 0.133371 -1.368011 0.000000 -vt 0.121635 -1.355956 0.000000 -vt 0.140453 -1.312477 0.000000 -vt 0.130270 -1.284333 0.000000 -vt 0.123260 -1.314045 0.000000 -vt 0.125074 -1.294381 0.000000 -vt 0.120629 -1.330894 0.000000 -vt 0.115823 -1.358186 0.000000 -vt 0.118006 -1.338238 0.000000 -vt 0.110278 -1.351714 0.000000 -vt 0.095995 -1.374557 0.000000 -vt 0.090103 -1.366326 0.000000 -vt 0.076107 -1.391026 0.000000 -vt 0.060254 -1.379239 0.000000 -vt 0.042180 -1.397203 0.000000 -vt 0.027536 -1.421293 0.000000 -vt 0.014910 -1.441240 0.000000 -vt 0.003609 -1.442902 0.000000 -vt 0.008836 -1.447666 0.000000 -vt 0.114893 -1.336146 0.000000 -vt 0.044757 -1.368741 0.000000 -vt 0.084211 -1.358095 0.000000 -vt 0.063716 -1.350995 0.000000 -vt 0.085832 -1.330440 0.000000 -vt 0.095860 -1.338803 0.000000 -vt 0.110670 -1.319893 0.000000 -vt 0.104732 -1.345241 0.000000 -vt 0.098229 -1.340779 0.000000 -vt 0.099334 -1.311112 0.000000 -vt 0.103048 -1.272988 0.000000 -vt 0.101191 -1.292050 0.000000 -vt 0.088795 -1.278592 0.000000 -vt 0.090138 -1.254400 0.000000 -vt 0.112500 -1.301316 0.000000 -vt 0.113653 -1.255250 0.000000 -vt 0.119308 -1.277911 0.000000 -vt 0.115789 -1.286087 0.000000 -vt 0.116179 -1.288260 0.000000 -vt 0.113731 -1.300853 0.000000 -vt 0.126537 -1.258982 0.000000 -vt 0.124699 -1.282167 0.000000 -vt 0.121992 -1.276810 0.000000 -vt 0.120468 -1.257224 0.000000 -vt 0.139931 -1.240379 0.000000 -vt 0.126586 -1.219639 0.000000 -vt 0.118578 -1.217008 0.000000 -vt 0.091612 -1.209746 0.000000 -vt 0.101091 -1.212062 0.000000 -vt 0.070577 -1.245063 0.000000 -vt 0.069162 -1.266123 0.000000 -vt 0.051185 -1.253117 0.000000 -vt 0.052167 -1.234462 0.000000 -vt 0.047724 -1.341348 0.000000 -vt 0.048964 -1.306560 0.000000 -vt 0.065731 -1.319089 0.000000 -vt 0.034241 -1.298772 0.000000 -vt 0.034646 -1.278434 0.000000 -vt 0.023361 -1.285007 0.000000 -vt 0.024648 -1.272536 0.000000 -vt 0.036896 -1.221098 0.000000 -vt 0.035974 -1.239597 0.000000 -vt 0.027318 -1.234011 0.000000 -vt 0.028179 -1.215820 0.000000 -vt 0.152071 -1.261056 0.000000 -vt 0.111573 -1.161777 0.000000 -vt 0.110570 -1.214377 0.000000 -vt 0.102312 -1.160848 0.000000 -vt 0.119299 -1.164057 0.000000 -vt 0.127024 -1.166337 0.000000 -vt 0.140947 -1.178433 0.000000 -vt 0.155540 -1.193876 0.000000 -vt 0.170856 -1.207144 0.000000 -vt 0.169460 -1.294361 0.000000 -vt 0.191290 -1.278710 0.000000 -vt 0.190500 -1.203792 0.000000 -vt 0.227577 -1.193990 0.000000 -vt 0.209284 -1.199004 0.000000 -vt 0.208394 -1.129267 0.000000 -vt 0.227158 -1.123879 0.000000 -vt 0.189630 -1.133489 0.000000 -vt 0.210185 -1.269703 0.000000 -vt 0.171244 -1.139303 0.000000 -vt 0.155456 -1.130928 0.000000 -vt 0.141114 -1.122312 0.000000 -vt 0.127278 -1.115911 0.000000 -vt 0.112536 -1.112953 0.000000 -vt 0.119907 -1.114432 0.000000 -vt 0.103434 -1.112412 0.000000 -vt 0.093050 -1.159920 0.000000 -vt 0.072386 -1.204922 0.000000 -vt 0.074341 -1.161384 0.000000 -vt 0.170022 -1.078906 0.000000 -vt 0.187676 -1.070359 0.000000 -vt 0.206477 -1.065513 0.000000 -vt 0.140948 -1.072335 0.000000 -vt 0.127177 -1.070554 0.000000 -vt 0.126570 -1.048028 0.000000 -vt 0.140492 -1.045681 0.000000 -vt 0.154673 -1.075328 0.000000 -vt 0.154193 -1.042975 0.000000 -vt 0.169102 -1.043159 0.000000 -vt 0.186471 -1.036615 0.000000 -vt 0.205539 -1.034192 0.000000 -vt 0.225172 -1.031927 0.000000 -vt 0.225920 -1.060981 0.000000 -vt 0.246266 -1.186306 0.000000 -vt 0.246409 -1.116777 0.000000 -vt 0.246100 -1.257389 0.000000 -vt 0.228194 -1.264358 0.000000 -vt 0.264052 -1.251135 0.000000 -vt 0.264676 -1.179071 0.000000 -vt 0.261129 -1.349253 0.000000 -vt 0.245252 -1.354527 0.000000 -vt 0.245597 -1.056585 0.000000 -vt 0.244949 -1.029730 0.000000 -vt 0.040479 -1.183994 0.000000 -vt 0.032060 -1.181552 0.000000 -vt 0.033010 -1.160599 0.000000 -vt 0.045150 -1.151599 0.000000 -vt 0.033750 -1.143417 0.000000 -vt 0.049429 -1.131354 0.000000 -vt 0.028151 -1.114051 0.000000 -vt 0.030951 -1.128734 0.000000 -vt 0.025050 -1.152670 0.000000 -vt 0.021269 -1.141642 0.000000 -vt 0.045049 -1.109936 0.000000 -vt 0.043399 -1.097405 0.000000 -vt 0.059519 -1.093050 0.000000 -vt 0.058511 -1.079011 0.000000 -vt 0.076094 -1.076261 0.000000 -vt 0.075902 -1.060246 0.000000 -vt 0.094664 -1.071326 0.000000 -vt 0.094251 -1.054044 0.000000 -vt 0.112706 -1.070264 0.000000 -vt 0.103685 -1.070795 0.000000 -vt 0.103091 -1.052811 0.000000 -vt 0.111930 -1.051578 0.000000 -vt 0.119942 -1.070409 0.000000 -vt 0.119250 -1.049803 0.000000 -vt 0.059924 -1.125787 0.000000 -vt 0.075813 -1.117600 0.000000 -vt 0.094332 -1.111872 0.000000 -vt 0.058215 -1.159194 0.000000 -vt 0.054510 -1.196952 0.000000 -vt 0.525086 -1.044053 0.000000 -vt 0.563733 -1.087789 0.000000 -vt 0.557203 -1.131802 0.000000 -vt 0.516714 -1.104841 0.000000 -vt 0.591289 -1.205736 0.000000 -vt 0.571951 -1.200272 0.000000 -vt 0.573570 -1.171692 0.000000 -vt 0.592231 -1.180079 0.000000 -vt 0.554908 -1.163305 0.000000 -vt 0.515201 -1.142310 0.000000 -vt 0.575188 -1.143112 0.000000 -vt 0.581368 -1.103683 0.000000 -vt 0.616074 -1.220584 0.000000 -vt 0.265304 -1.110105 0.000000 -vt 0.280323 -1.245846 0.000000 -vt 0.281359 -1.173319 0.000000 -vt 0.294725 -1.240592 0.000000 -vt 0.296242 -1.169249 0.000000 -vt 0.281715 -1.104802 0.000000 -vt 0.296919 -1.100902 0.000000 -vt 0.281051 -1.044769 0.000000 -vt 0.296695 -1.042209 0.000000 -vt 0.299724 -1.002871 0.000000 -vt 0.296956 -1.022540 0.000000 -vt 0.280875 -1.023822 0.000000 -vt 0.280698 -1.002875 0.000000 -vt 0.264500 -1.050821 0.000000 -vt 0.263459 -1.002877 0.000000 -vt 0.263979 -1.026849 0.000000 -vt 0.244300 -1.002875 0.000000 -vt 0.004001 -1.430517 0.000000 -vt 0.009456 -1.435879 0.000000 -vt 0.016391 -1.409298 0.000000 -vt 0.029800 -1.381501 0.000000 -vt 0.004001 -1.399524 0.000000 -vt 0.010196 -1.404411 0.000000 -vt 0.017542 -1.368135 0.000000 -vt 0.031945 -1.335490 0.000000 -vt 0.004001 -1.366125 0.000000 -vt 0.010771 -1.367130 0.000000 -vt 0.018868 -1.319180 0.000000 -vt 0.011088 -1.344768 0.000000 -vt 0.004001 -1.284609 0.000000 -vt 0.004001 -1.275770 0.000000 -vt 0.011202 -1.272311 0.000000 -vt 0.011669 -1.282262 0.000000 -vt 0.019337 -1.279916 0.000000 -vt 0.011434 -1.320289 0.000000 -vt 0.018521 -1.252949 0.000000 -vt 0.018404 -1.268853 0.000000 -vt 0.011261 -1.253556 0.000000 -vt 0.019732 -1.233324 0.000000 -vt 0.026457 -1.252202 0.000000 -vt 0.020942 -1.213698 0.000000 -vt 0.012518 -1.231818 0.000000 -vt 0.013774 -1.210080 0.000000 -vt 0.015963 -1.164604 0.000000 -vt 0.020693 -1.172719 0.000000 -vt 0.025424 -1.180835 0.000000 -vt 0.016297 -1.199821 0.000000 -vt 0.994546 -1.852151 0.000000 -vt 0.958873 -1.893777 0.000000 -vt 0.961451 -1.900387 0.000000 -vt 0.970663 -1.924002 0.000000 -vt 0.979932 -1.936245 0.000000 -vt 0.942482 -1.983014 0.000000 -vt 0.989201 -1.948489 0.000000 -vt 0.935363 -1.964203 0.000000 -vt 0.956645 -1.685330 0.000000 -vt 0.931004 -1.666544 0.000000 -vt 0.926051 -1.669974 0.000000 -vt 0.956645 -1.685330 0.000000 -vt 0.254746 -1.428298 0.000000 -vt 0.239676 -1.435187 0.000000 -vt 0.227883 -1.359666 0.000000 -vt 0.225132 -1.441651 0.000000 -vt 0.234272 -1.489750 0.000000 -vt 0.222098 -1.496886 0.000000 -vt 0.218564 -1.551303 0.000000 -vt 0.229951 -1.542608 0.000000 -vt 0.206801 -1.556883 0.000000 -vt 0.208998 -1.503417 0.000000 -vt 0.203634 -1.608481 0.000000 -vt 0.214607 -1.604196 0.000000 -vt 0.193201 -1.609948 0.000000 -vt 0.195318 -1.560638 0.000000 -vt 0.210996 -1.655101 0.000000 -vt 0.213807 -1.768662 0.000000 -vt 0.216253 -1.700998 0.000000 -vt 0.233934 -1.802528 0.000000 -vt 0.196543 -1.510135 0.000000 -vt 0.211009 -1.448208 0.000000 -vt 0.211570 -1.365063 0.000000 -vt 0.197906 -1.454998 0.000000 -vt 0.196369 -1.376942 0.000000 -vt 0.227602 -1.598818 0.000000 -vt 0.219895 -1.652916 0.000000 -vt 0.121897 -1.328335 0.000000 -vt 0.124318 -1.315580 0.000000 -vt 0.378312 -1.060181 0.000000 -vt 0.372072 -1.102195 0.000000 -vt 0.345154 -1.089328 0.000000 -vt 0.347728 -1.046174 0.000000 -vt 0.371916 -1.147159 0.000000 -vt 0.343658 -1.154041 0.000000 -vt 0.415283 -1.143426 0.000000 -vt 0.416465 -1.096594 0.000000 -vt 0.413037 -1.205463 0.000000 -vt 0.372185 -1.212062 0.000000 -vt 0.344024 -1.223621 0.000000 -vt 0.318589 -1.098304 0.000000 -vt 0.317602 -1.165430 0.000000 -vt 0.318629 -1.042435 0.000000 -vt 0.348432 -1.002871 0.000000 -vt 0.348080 -1.024523 0.000000 -vt 0.319165 -1.022663 0.000000 -vt 0.319701 -1.002891 0.000000 -vt 0.443205 -1.151542 0.000000 -vt 0.442142 -1.210480 0.000000 -vt 0.415531 -1.294937 0.000000 -vt 0.442089 -1.300299 0.000000 -vt 0.374740 -1.302715 0.000000 -vt 0.416770 -1.381189 0.000000 -vt 0.374791 -1.385177 0.000000 -vt 0.443607 -1.443343 0.000000 -vt 0.416933 -1.439118 0.000000 -vt 0.442597 -1.386132 0.000000 -vt 0.470200 -1.218648 0.000000 -vt 0.470509 -1.306074 0.000000 -vt 0.471105 -1.159674 0.000000 -vt 0.513476 -1.234565 0.000000 -vt 0.513689 -1.179779 0.000000 -vt 0.551861 -1.246622 0.000000 -vt 0.552613 -1.194808 0.000000 -vt 0.591979 -1.251556 0.000000 -vt 0.571920 -1.249089 0.000000 -vt 0.617392 -1.264145 0.000000 -vt 0.640213 -1.276789 0.000000 -vt 0.561890 -1.247855 0.000000 -vt 0.562663 -1.316732 0.000000 -vt 0.552729 -1.316174 0.000000 -vt 0.618369 -1.325547 0.000000 -vt 0.592464 -1.318407 0.000000 -vt 0.644697 -1.331903 0.000000 -vt 0.676310 -1.342834 0.000000 -vt 0.670685 -1.285197 0.000000 -vt 0.680287 -1.437896 0.000000 -vt 0.648125 -1.395863 0.000000 -vt 0.706473 -1.452648 0.000000 -vt 0.703277 -1.354226 0.000000 -vt 0.684547 -1.475559 0.000000 -vt 0.709785 -1.487721 0.000000 -vt 0.697273 -1.291975 0.000000 -vt 0.618935 -1.386380 0.000000 -vt 0.592883 -1.381416 0.000000 -vt 0.638163 -1.465243 0.000000 -vt 0.648129 -1.498595 0.000000 -vt 0.614482 -1.445965 0.000000 -vt 0.677229 -1.156718 0.000000 -vt 0.688126 -1.160658 0.000000 -vt 0.694392 -1.197227 0.000000 -vt 0.674080 -1.144837 0.000000 -vt 0.685445 -1.147878 0.000000 -vt 0.676805 -1.106695 0.000000 -vt 0.684907 -1.100333 0.000000 -vt 0.686821 -1.112411 0.000000 -vt 0.676805 -1.106695 0.000000 -vt 0.476868 -1.634191 0.000000 -vt 0.479462 -1.691017 0.000000 -vt 0.447547 -1.607413 0.000000 -vt 0.475402 -1.584196 0.000000 -vt 0.447038 -1.552912 0.000000 -vt 0.476107 -1.541826 0.000000 -vt 0.446946 -1.501985 0.000000 -vt 0.475431 -1.499751 0.000000 -vt 0.473388 -1.444316 0.000000 -vt 0.471896 -1.388738 0.000000 -vt 0.514163 -1.313522 0.000000 -vt 0.520854 -1.663489 0.000000 -vt 0.521043 -1.687670 0.000000 -vt 0.523532 -1.610601 0.000000 -vt 0.524654 -1.567310 0.000000 -vt 0.522142 -1.507261 0.000000 -vt 0.521139 -1.479678 0.000000 -vt 0.517031 -1.390437 0.000000 -vt 0.519947 -1.446893 0.000000 -vt 0.549731 -1.706705 0.000000 -vt 0.409720 -1.620384 0.000000 -vt 0.414354 -1.561123 0.000000 -vt 0.415135 -1.503257 0.000000 -vt 0.583780 -1.705039 0.000000 -vt 0.574459 -1.739983 0.000000 -vt 0.572264 -1.735272 0.000000 -vt 0.581304 -1.706488 0.000000 -vt 0.566317 -1.717392 0.000000 -vt 0.577834 -1.695803 0.000000 -vt 0.585532 -1.692688 0.000000 -vt 0.401941 -1.914162 0.000000 -vt 0.387381 -1.910405 0.000000 -vt 0.122201 -1.281286 0.000000 -vt 0.119551 -1.281017 0.000000 -vt 0.125604 -1.299490 0.000000 -vt 0.124666 -1.286551 0.000000 -vt 0.118890 -1.334722 0.000000 -vt 0.112348 -1.316229 0.000000 -vt 0.111931 -1.330433 0.000000 -vt 0.111931 -1.330433 0.000000 -vt 0.113361 -1.326869 0.000000 -vt 0.116186 -1.331598 0.000000 -vt 0.107505 -1.348477 0.000000 -vt 0.562326 -1.541520 0.000000 -vt 0.561584 -1.461517 0.000000 -vt 0.569229 -1.456478 0.000000 -vt 0.569477 -1.529718 0.000000 -vt 0.576627 -1.517915 0.000000 -vt 0.590928 -1.494311 0.000000 -vt 0.592921 -1.515487 0.000000 -vt 0.582566 -1.550740 0.000000 -vt 0.564251 -1.673203 0.000000 -vt 0.556195 -1.681437 0.000000 -vt 0.558702 -1.662098 0.000000 -vt 0.567156 -1.655750 0.000000 -vt 0.570062 -1.638296 0.000000 -vt 0.561208 -1.642759 0.000000 -vt 0.565815 -1.593769 0.000000 -vt 0.581246 -1.604864 0.000000 -vt 0.548140 -1.689670 0.000000 -vt 0.521232 -1.711851 0.000000 -vt 0.550246 -1.668446 0.000000 -vt 0.555864 -1.381379 0.000000 -vt 0.868464 -1.449891 0.000000 -vt 0.831471 -1.447903 0.000000 -vt 0.832612 -1.407113 0.000000 -vt 0.799380 -1.385488 0.000000 -vt 0.811651 -1.393472 0.000000 -vt 0.811706 -1.439605 0.000000 -vt 0.800857 -1.435050 0.000000 -vt 0.744584 -1.342777 0.000000 -vt 0.767637 -1.361305 0.000000 -vt 0.771382 -1.418987 0.000000 -vt 0.750824 -1.406667 0.000000 -vt 0.718187 -1.313491 0.000000 -vt 0.724786 -1.320812 0.000000 -vt 0.730427 -1.383332 0.000000 -vt 0.723628 -1.375553 0.000000 -vt 0.707730 -1.302733 0.000000 -vt 0.713452 -1.364890 0.000000 -vt 0.717610 -1.461324 0.000000 -vt 0.721022 -1.497308 0.000000 -vt 0.724434 -1.533291 0.000000 -vt 0.735771 -1.543787 0.000000 -vt 0.743319 -1.589605 0.000000 -vt 0.730107 -1.574776 0.000000 -vt 0.753775 -1.484318 0.000000 -vt 0.772004 -1.489779 0.000000 -vt 0.741261 -1.477160 0.000000 -vt 0.737226 -1.391110 0.000000 -vt 0.794125 -1.335326 0.000000 -vt 0.807564 -1.345510 0.000000 -vt 0.783954 -1.327620 0.000000 -vt 0.790689 -1.379832 0.000000 -vt 0.779163 -1.370568 0.000000 -vt 0.772657 -1.315103 0.000000 -vt 0.796397 -1.535006 0.000000 -vt 0.796609 -1.555446 0.000000 -vt 0.789028 -1.583573 0.000000 -vt 0.783281 -1.546125 0.000000 -vt 0.809411 -1.534909 0.000000 -vt 0.806950 -1.546212 0.000000 -vt 0.767888 -1.602933 0.000000 -vt 0.778458 -1.593253 0.000000 -vt 0.780825 -1.603251 0.000000 -vt 0.769727 -1.613245 0.000000 -vt 0.783743 -1.588413 0.000000 -vt 0.777338 -1.547469 0.000000 -vt 0.797993 -1.498292 0.000000 -vt 0.806660 -1.501703 0.000000 -vt 0.808035 -1.518306 0.000000 -vt 0.797195 -1.516649 0.000000 -vt 0.821917 -1.551077 0.000000 -vt 0.818290 -1.558999 0.000000 -vt 0.790233 -1.495239 0.000000 -vt 0.786757 -1.520682 0.000000 -vt 0.779228 -1.519989 0.000000 -vt 0.781119 -1.492509 0.000000 -vt 0.776960 -1.676231 0.000000 -vt 0.774210 -1.675986 0.000000 -vt 0.769892 -1.669891 0.000000 -vt 0.773039 -1.662635 0.000000 -vt 0.759508 -1.551500 0.000000 -vt 0.747639 -1.547643 0.000000 -vt 0.744450 -1.512401 0.000000 -vt 0.756642 -1.517909 0.000000 -vt 0.823086 -1.508166 0.000000 -vt 0.856146 -1.518482 0.000000 -vt 0.855529 -1.521919 0.000000 -vt 0.822502 -1.529621 0.000000 -vt 0.844893 -1.565603 0.000000 -vt 0.838329 -1.586606 0.000000 -vt 0.833771 -1.598464 0.000000 -vt 0.886711 -1.539266 0.000000 -vt 0.885187 -1.545414 0.000000 -vt 0.863752 -1.621635 0.000000 -vt 0.854798 -1.647519 0.000000 -vt 0.849165 -1.663175 0.000000 -vt 0.862037 -1.697608 0.000000 -vt 0.855348 -1.715277 0.000000 -vt 0.920535 -1.537478 0.000000 -vt 0.928509 -1.496037 0.000000 -vt 0.941100 -1.506833 0.000000 -vt 0.930603 -1.561657 0.000000 -vt 0.928462 -1.575369 0.000000 -vt 0.926320 -1.589081 0.000000 -vt 0.912573 -1.573260 0.000000 -vt 0.914676 -1.563807 0.000000 -vt 0.928462 -1.575369 0.000000 -vt 0.872707 -1.595751 0.000000 -vt 0.904673 -1.608760 0.000000 -vt 0.888811 -1.680042 0.000000 -vt 0.875424 -1.688825 0.000000 -vt 0.866439 -1.733115 0.000000 -vt 0.859678 -1.750128 0.000000 -vt 0.873211 -1.788904 0.000000 -vt 0.889277 -1.773130 0.000000 -vt 0.889036 -1.724908 0.000000 -vt 0.877737 -1.729011 0.000000 -vt 0.922038 -1.616506 0.000000 -vt 0.911852 -1.672553 0.000000 -vt 0.904568 -1.721845 0.000000 -vt 0.899397 -1.756141 0.000000 -vt 0.448424 -1.026541 0.000000 -vt 0.460156 -1.009018 0.000000 -vt 0.465046 -1.083032 0.000000 -vt 0.448674 -1.060313 0.000000 -vt 0.486775 -1.018199 0.000000 -vt 0.483748 -1.090110 0.000000 -vt 0.477426 -1.124892 0.000000 -vt 0.446848 -1.102002 0.000000 -vt 0.418597 -1.030385 0.000000 -vt 0.417352 -1.060327 0.000000 -vt 0.386269 -1.035703 0.000000 -vt 0.390421 -1.005564 0.000000 -vt 0.404509 -1.017974 0.000000 -vt 0.401810 -1.048015 0.000000 -vt 0.371632 -1.012923 0.000000 -vt 0.378951 -1.024313 0.000000 -vt 0.375807 -1.042459 0.000000 -vt 0.873556 -1.057154 0.000000 -vt 0.884478 -1.023802 0.000000 -vt 0.882301 -1.034338 0.000000 -vt 0.877625 -1.076667 0.000000 -vt 0.868702 -1.170970 0.000000 -vt 0.871129 -1.114062 0.000000 -vt 0.856767 -1.162794 0.000000 -vt 0.864722 -1.098175 0.000000 -vt 0.838879 -1.143008 0.000000 -vt 0.847502 -1.088609 0.000000 -vt 0.836671 -1.247690 0.000000 -vt 0.822419 -1.228117 0.000000 -vt 0.830649 -1.185562 0.000000 -vt 0.846719 -1.205242 0.000000 -vt 0.858806 -1.217885 0.000000 -vt 0.862667 -1.275749 0.000000 -vt 0.859635 -1.293746 0.000000 -vt 0.846082 -1.279830 0.000000 -vt 0.848911 -1.264801 0.000000 -vt 0.833964 -1.263142 0.000000 -vt 0.816185 -1.255371 0.000000 -vt 0.819302 -1.241744 0.000000 -vt 0.831256 -1.278594 0.000000 -vt 0.800300 -1.154680 0.000000 -vt 0.806075 -1.115153 0.000000 -vt 0.767205 -1.164189 0.000000 -vt 0.763460 -1.160074 0.000000 -vt 0.768195 -1.126017 0.000000 -vt 0.772110 -1.129454 0.000000 -vt 0.759715 -1.155960 0.000000 -vt 0.722991 -1.114285 0.000000 -vt 0.730096 -1.091341 0.000000 -vt 0.764280 -1.122580 0.000000 -vt 0.697592 -1.056618 0.000000 -vt 0.704073 -1.041870 0.000000 -vt 0.737200 -1.068398 0.000000 -vt 0.683979 -1.038960 0.000000 -vt 0.686805 -1.026919 0.000000 -vt 0.757231 -1.165470 0.000000 -vt 0.720297 -1.120635 0.000000 -vt 0.754748 -1.174980 0.000000 -vt 0.761309 -1.170126 0.000000 -vt 0.759159 -1.180178 0.000000 -vt 0.777015 -1.094719 0.000000 -vt 0.772930 -1.091959 0.000000 -vt 0.778085 -1.059713 0.000000 -vt 0.782633 -1.061631 0.000000 -vt 0.743095 -1.018616 0.000000 -vt 0.778228 -1.026391 0.000000 -vt 0.773536 -1.057795 0.000000 -vt 0.740147 -1.043507 0.000000 -vt 0.683446 -1.001410 0.000000 -vt 0.678820 -1.009259 0.000000 -vt 0.669294 -1.010868 0.000000 -vt 0.674577 -1.016457 0.000000 -vt 0.674511 -1.027898 0.000000 -vt 0.682678 -1.069603 0.000000 -vt 0.685582 -1.067610 0.000000 -vt 0.690844 -1.075648 0.000000 -vt 0.717604 -1.126985 0.000000 -vt 0.674465 -1.035880 0.000000 -vt 0.671773 -1.034402 0.000000 -vt 0.677689 -1.056144 0.000000 -vt 0.669081 -1.032925 0.000000 -vt 0.679177 -1.052589 0.000000 -vt 0.891191 -1.009180 0.000000 -vt 0.872678 -1.033555 0.000000 -vt 0.886146 -1.001169 0.000000 -vt 0.864709 -1.009795 0.000000 -vt 0.856125 -1.034210 0.000000 -vt 0.814013 -1.074645 0.000000 -vt 0.788251 -1.028544 0.000000 -vt 0.783239 -1.027467 0.000000 -vt 0.791851 -1.011704 0.000000 -vt 0.778266 -1.010600 0.000000 -vt 0.750097 -1.007531 0.000000 -vt 0.821950 -1.034136 0.000000 -vt 0.821321 -1.014169 0.000000 -vt 0.841689 -1.338467 0.000000 -vt 0.840453 -1.326999 0.000000 -vt 0.868171 -1.322349 0.000000 -vt 0.871793 -1.337811 0.000000 -vt 0.817873 -1.318832 0.000000 -vt 0.818910 -1.306408 0.000000 -vt 0.836432 -1.350933 0.000000 -vt 0.812719 -1.332171 0.000000 -vt 0.786259 -1.292840 0.000000 -vt 0.785107 -1.310230 0.000000 -vt 0.771531 -1.293801 0.000000 -vt 0.770404 -1.272500 0.000000 -vt 0.713570 -1.257357 0.000000 -vt 0.719869 -1.262406 0.000000 -vt 0.702600 -1.249041 0.000000 -vt 0.698496 -1.223134 0.000000 -vt 0.708884 -1.231020 0.000000 -vt 0.704198 -1.204683 0.000000 -vt 0.695617 -1.167916 0.000000 -vt 0.715974 -1.214550 0.000000 -vt 0.710086 -1.209616 0.000000 -vt 0.702370 -1.172056 0.000000 -vt 0.709123 -1.176195 0.000000 -vt 0.733426 -1.232167 0.000000 -vt 0.736097 -1.254859 0.000000 -vt 0.721071 -1.241002 0.000000 -vt 0.727630 -1.190724 0.000000 -vt 0.797259 -1.301884 0.000000 -vt 0.797468 -1.283968 0.000000 -vt 0.786953 -1.272963 0.000000 -vt 0.770869 -1.250968 0.000000 -vt 0.754786 -1.228972 0.000000 -vt 0.754549 -1.252159 0.000000 -vt 0.690476 -1.107204 0.000000 -vt 0.688368 -1.108490 0.000000 -vt 0.717370 -1.167818 0.000000 -vt 0.705516 -1.158965 0.000000 -vt 0.712188 -1.154787 0.000000 -vt 0.918020 -1.195984 0.000000 -vt 0.933605 -1.196023 0.000000 -vt 0.926268 -1.229521 0.000000 -vt 0.913659 -1.215684 0.000000 -vt 0.895102 -1.279751 0.000000 -vt 0.909298 -1.235384 0.000000 -vt 0.918930 -1.263019 0.000000 -vt 0.902175 -1.303666 0.000000 -vt 0.873199 -1.359015 0.000000 -vt 0.871646 -1.413785 0.000000 -vt 0.870256 -1.429556 0.000000 -vt 0.894454 -1.508035 0.000000 -vt 0.901591 -1.479251 0.000000 -vt 0.907476 -1.419315 0.000000 -vt 0.904249 -1.452185 0.000000 -vt 0.911712 -1.376173 0.000000 -vt 0.874605 -1.380220 0.000000 -vt 0.906944 -1.339919 0.000000 -vt 0.947957 -1.345697 0.000000 -vt 0.933443 -1.304358 0.000000 -vt 0.934410 -1.465370 0.000000 -vt 0.943406 -1.408566 0.000000 -vt 0.988369 -1.088922 0.000000 -vt 0.992327 -1.065469 0.000000 -vt 0.997689 -1.080234 0.000000 -vt 0.996872 -1.096645 0.000000 -vt 0.995277 -1.127823 0.000000 -vt 0.992966 -1.146823 0.000000 -vt 0.982371 -1.124458 0.000000 -vt 0.985707 -1.104695 0.000000 -vt 0.980454 -1.268193 0.000000 -vt 0.961157 -1.264556 0.000000 -vt 0.979086 -1.143921 0.000000 -vt 0.990721 -1.164675 0.000000 -vt 0.966740 -1.378092 0.000000 -vt 0.954557 -1.305127 0.000000 -vt 0.973483 -1.325801 0.000000 -vt 0.958182 -1.427882 0.000000 -vt 0.946986 -1.478539 0.000000 -vt 0.940412 -1.267324 0.000000 -vt 0.947381 -1.230289 0.000000 -vt 0.960856 -1.104486 0.000000 -vt 0.964147 -1.093431 0.000000 -vt 0.974927 -1.099063 0.000000 -vt 0.971614 -1.114472 0.000000 -vt 0.998506 -1.063823 0.000000 -vt 0.994896 -1.059882 0.000000 -vt 0.997879 -1.053395 0.000000 -vt 0.990135 -1.046771 0.000000 -vt 0.990076 -1.039680 0.000000 -vt 0.997512 -1.047169 0.000000 -vt 0.994829 -1.028880 0.000000 -vt 0.996733 -1.024555 0.000000 -vt 0.996635 -1.032298 0.000000 -vt 0.993292 -1.019213 0.000000 -vt 0.993432 -1.024969 0.000000 -vt 0.992080 -1.021143 0.000000 -vt 0.983862 -1.018574 0.000000 -vt 0.986591 -1.029888 0.000000 -vt 0.980260 -1.035985 0.000000 -vt 0.976206 -1.027821 0.000000 -vt 0.735512 -1.005566 0.000000 -vt 0.691990 -1.017693 0.000000 -vt 0.693821 -1.001585 0.000000 -vt 0.693307 -1.007996 0.000000 -vt 0.706908 -1.001807 0.000000 -vt 0.707649 -1.009399 0.000000 -vt 0.707526 -1.025428 0.000000 -vt 0.611623 -1.555549 0.000000 -vt 0.607346 -1.527874 0.000000 -vt 0.606540 -1.500347 0.000000 -vt 0.618470 -1.523681 0.000000 -vt 0.168411 -1.439861 0.000000 -vt 0.160552 -1.375513 0.000000 -vt 0.182301 -1.419072 0.000000 -vt 0.155509 -1.465161 0.000000 -vt 0.149182 -1.418690 0.000000 -vt 0.086223 -1.521888 0.000000 -vt 0.082992 -1.498099 0.000000 -vt 0.099328 -1.507950 0.000000 -vt 0.112397 -1.493210 0.000000 -vt 0.124110 -1.478336 0.000000 -vt 0.133183 -1.458485 0.000000 -vt 0.077469 -1.548681 0.000000 -vt 0.087816 -1.541102 0.000000 -vt 0.076523 -1.563028 0.000000 -vt 0.069311 -1.568009 0.000000 -vt 0.069607 -1.555387 0.000000 -vt 0.060658 -1.585581 0.000000 -vt 0.061044 -1.573948 0.000000 -vt 0.061220 -1.556660 0.000000 -vt 0.056146 -1.561882 0.000000 -vt 0.055607 -1.579136 0.000000 -vt 0.057308 -1.526108 0.000000 -vt 0.061396 -1.519704 0.000000 -vt 0.051441 -1.519049 0.000000 -vt 0.919938 -1.674206 0.000000 -vt 0.912863 -1.702382 0.000000 -vt 0.938117 -1.710843 0.000000 -vt 0.903507 -1.730192 0.000000 -vt 0.902709 -1.749253 0.000000 -vt 0.931941 -1.737513 0.000000 -vt 0.980062 -1.779385 0.000000 -vt 0.972592 -1.789377 0.000000 -vt 0.965123 -1.799370 0.000000 -vt 0.954338 -1.827497 0.000000 -vt 0.923277 -1.822591 0.000000 -vt 0.925764 -1.764183 0.000000 -vt 0.953808 -1.861751 0.000000 -vt 0.899434 -1.809395 0.000000 -vt 0.901911 -1.768313 0.000000 -vt 0.818734 -1.750746 0.000000 -vt 0.821558 -1.743763 0.000000 -vt 0.836605 -1.765130 0.000000 -vt 0.833298 -1.771548 0.000000 -vt 0.806083 -1.725569 0.000000 -vt 0.802608 -1.732966 0.000000 -vt 0.767717 -1.873315 0.000000 -vt 0.731884 -1.857072 0.000000 -vt 0.734750 -1.844921 0.000000 -vt 0.770279 -1.864333 0.000000 -vt 0.804203 -1.890521 0.000000 -vt 0.805482 -1.885027 0.000000 -vt 0.839887 -1.906794 0.000000 -vt 0.840665 -1.902468 0.000000 -vt 0.649271 -1.633070 0.000000 -vt 0.662003 -1.656000 0.000000 -vt 0.633129 -1.717710 0.000000 -vt 0.619739 -1.688735 0.000000 -vt 0.593859 -1.749042 0.000000 -vt 0.611552 -1.768040 0.000000 -vt 0.584928 -1.788339 0.000000 -vt 0.605818 -1.797296 0.000000 -vt 0.637651 -1.785493 0.000000 -vt 0.632450 -1.808114 0.000000 -vt 0.663736 -1.821580 0.000000 -vt 0.668662 -1.802818 0.000000 -vt 0.697293 -1.839755 0.000000 -vt 0.701933 -1.823977 0.000000 -vt 0.680426 -1.775428 0.000000 -vt 0.728434 -1.809179 0.000000 -vt 0.795259 -1.852893 0.000000 -vt 0.844632 -1.887231 0.000000 -vt 0.672168 -1.603508 0.000000 -vt 0.683532 -1.617246 0.000000 -vt 0.706602 -1.627915 0.000000 -vt 0.680387 -1.681479 0.000000 -vt 0.650162 -1.754521 0.000000 -vt 0.710091 -1.707665 0.000000 -vt 0.755581 -1.744866 0.000000 -vt 0.819690 -1.799653 0.000000 -vt 0.862555 -1.849119 0.000000 -vt 0.872334 -1.903581 0.000000 -vt 0.885574 -1.880452 0.000000 -vt 0.875543 -1.838784 0.000000 -vt 0.895359 -1.881641 0.000000 -vt 0.891669 -1.880324 0.000000 -vt 0.870737 -1.841385 0.000000 -vt 0.847863 -1.792350 0.000000 -vt 0.786481 -1.715187 0.000000 -vt 0.772770 -1.699979 0.000000 -vt 0.731355 -1.656428 0.000000 -vt 0.759059 -1.684771 0.000000 -vt 0.685165 -1.594479 0.000000 -vt 0.691797 -1.603798 0.000000 -vt 0.895671 -1.905655 0.000000 -vt 0.902254 -1.909584 0.000000 -vt 0.901453 -1.918279 0.000000 -vt 0.899046 -1.894277 0.000000 -vt 0.870833 -1.913367 0.000000 -vt 0.871482 -1.917706 0.000000 -vt 0.896034 -1.923808 0.000000 -vt 0.900198 -1.923259 0.000000 -vt 0.901816 -1.929562 0.000000 -vt 0.901738 -1.935303 0.000000 -vt 0.897240 -1.930644 0.000000 -vt 0.891578 -1.926810 0.000000 -vt 0.890827 -1.920774 0.000000 -vt 0.902802 -1.925418 0.000000 -vt 0.903007 -1.915511 0.000000 -vt 0.901766 -1.898455 0.000000 -vt 0.888213 -1.913529 0.000000 -vt 0.879281 -1.968759 0.000000 -vt 0.881910 -1.980870 0.000000 -vt 0.851332 -1.993116 0.000000 -vt 0.847530 -1.950827 0.000000 -vt 0.892315 -1.971011 0.000000 -vt 0.903579 -1.896675 0.000000 -vt 0.904864 -1.915397 0.000000 -vt 0.903982 -1.928508 0.000000 -vt 0.891390 -1.939873 0.000000 -vt 0.872790 -1.931483 0.000000 -vt 0.791573 -1.948929 0.000000 -vt 0.812356 -2.000000 0.000000 -vt 0.894119 -1.958670 0.000000 -vt 0.901972 -1.947420 0.000000 -vt 0.609506 -1.826174 0.000000 -vt 0.635545 -1.834651 0.000000 -vt 0.664843 -1.844897 0.000000 -vt 0.698768 -1.857813 0.000000 -vt 0.732920 -1.868553 0.000000 -vt 0.769226 -1.883032 0.000000 -vt 0.805016 -1.895773 0.000000 -vt 0.840911 -1.909371 0.000000 -vt 0.624734 -1.916325 0.000000 -vt 0.658145 -1.927803 0.000000 -vt 0.720049 -1.939264 0.000000 -vt 0.793879 -2.000000 0.000000 -vt 0.775403 -2.000000 0.000000 -vt 0.756302 -2.000000 0.000000 -vt 0.737200 -2.000000 0.000000 -vt 0.721244 -2.000000 0.000000 -vt 0.705288 -2.000000 0.000000 -vt 0.674404 -2.000000 0.000000 -vt 0.649104 -2.000000 0.000000 -vt 0.630588 -2.000000 0.000000 -vt 0.624247 -2.000000 0.000000 -vt 0.606706 -1.897207 0.000000 -vt 0.591098 -1.821240 0.000000 -vt 0.498568 -1.893268 0.000000 -vt 0.514505 -1.955261 0.000000 -vt 0.482590 -1.959442 0.000000 -vt 0.472127 -1.908422 0.000000 -vt 0.520312 -1.930539 0.000000 -vt 0.559288 -1.991382 0.000000 -vt 0.529474 -1.991678 0.000000 -vt 0.493963 -1.994280 0.000000 -vt 0.459643 -1.989051 0.000000 -vt 0.452370 -1.966875 0.000000 -vt 0.428140 -1.964350 0.000000 -vt 0.427631 -1.953513 0.000000 -vt 0.443956 -1.916963 0.000000 -vt 0.424247 -1.916230 0.000000 -vt 0.423981 -1.902796 0.000000 -vt 0.442909 -1.895802 0.000000 -vt 0.478544 -1.886325 0.000000 -vt 0.539806 -1.787494 0.000000 -vt 0.551521 -1.751714 0.000000 -vt 0.561021 -1.778002 0.000000 -vt 0.552719 -1.821755 0.000000 -vt 0.519139 -1.835732 0.000000 -vt 0.543899 -1.879244 0.000000 -vt 0.502894 -1.879317 0.000000 -vt 0.530109 -1.922046 0.000000 -vt 0.553374 -1.951923 0.000000 -vt 0.553633 -1.895935 0.000000 -vt 0.564634 -1.841739 0.000000 -vt 0.566472 -1.785545 0.000000 -vt 0.476981 -1.872089 0.000000 -vt 0.490766 -1.880166 0.000000 -vt 0.445057 -1.879698 0.000000 -vt 0.424982 -1.892766 0.000000 -vt 0.624892 -1.544292 0.000000 -vt 0.614383 -1.573015 0.000000 -vt 0.565119 -1.381388 0.000000 -vt 0.592165 -1.441361 0.000000 -vt 0.631315 -1.564903 0.000000 -vt 0.639041 -1.598096 0.000000 -vt 0.622697 -1.619578 0.000000 -vt 0.617143 -1.590482 0.000000 -vt 0.594770 -1.604048 0.000000 -vt 0.593163 -1.619743 0.000000 -vt 0.599111 -1.574327 0.000000 -vt 0.591557 -1.635438 0.000000 -vt 0.593698 -1.658245 0.000000 -vt 0.565907 -1.693971 0.000000 -vt 0.565493 -1.688779 0.000000 -vt 0.557612 -1.697742 0.000000 -vt 0.333715 -1.924665 0.000000 -vt 0.335668 -1.963089 0.000000 -vt 0.292140 -1.903167 0.000000 -vt 0.291954 -1.870933 0.000000 -vt 0.259684 -1.836845 0.000000 -vt 0.259479 -1.805235 0.000000 -vt 0.365162 -1.918325 0.000000 -vt 0.359930 -1.889976 0.000000 -vt 0.413414 -1.863550 0.000000 -vt 0.354697 -1.861627 0.000000 -vt 0.352880 -1.832436 0.000000 -vt 0.351063 -1.803245 0.000000 -vt 0.331150 -1.853282 0.000000 -vt 0.330536 -1.820323 0.000000 -vt 0.291767 -1.838698 0.000000 -vt 0.292136 -1.805387 0.000000 -vt 0.260252 -1.719750 0.000000 -vt 0.259273 -1.773625 0.000000 -vt 0.233188 -1.769038 0.000000 -vt 0.234426 -1.708492 0.000000 -vt 0.262601 -1.682771 0.000000 -vt 0.236464 -1.664327 0.000000 -vt 0.297502 -1.680034 0.000000 -vt 0.294263 -1.717558 0.000000 -vt 0.300284 -1.652797 0.000000 -vt 0.267425 -1.661375 0.000000 -vt 0.341241 -1.656297 0.000000 -vt 0.331470 -1.622061 0.000000 -vt 0.371450 -1.624734 0.000000 -vt 0.245566 -1.648103 0.000000 -vt 0.335429 -1.696165 0.000000 -vt 0.292504 -1.772077 0.000000 -vt 0.330784 -1.790482 0.000000 -vt 0.354816 -1.769112 0.000000 -vt 0.358570 -1.734979 0.000000 -vt 0.361689 -1.670706 0.000000 -vt 0.380545 -1.565754 0.000000 -vt 0.375707 -1.511823 0.000000 -vt 0.331033 -1.760641 0.000000 -vt 0.358791 -1.572479 0.000000 -vt 0.344433 -1.492112 0.000000 -vt 0.375255 -1.444526 0.000000 -vt 0.315913 -1.324631 0.000000 -vt 0.316114 -1.234680 0.000000 -vt 0.347571 -1.314428 0.000000 -vt 0.346700 -1.388624 0.000000 -vt 0.346050 -1.440139 0.000000 -vt 0.346300 -1.533487 0.000000 -vt 0.342602 -1.582103 0.000000 -vt 0.340622 -1.555324 0.000000 -vt 0.326903 -1.614759 0.000000 -vt 0.302187 -1.638321 0.000000 -vt 0.313735 -1.397374 0.000000 -vt 0.312322 -1.442898 0.000000 -vt 0.310062 -1.484286 0.000000 -vt 0.281173 -1.456764 0.000000 -vt 0.275658 -1.497706 0.000000 -vt 0.286418 -1.410687 0.000000 -vt 0.292049 -1.333177 0.000000 -vt 0.270473 -1.418840 0.000000 -vt 0.262338 -1.467968 0.000000 -vt 0.277528 -1.341093 0.000000 -vt 0.333462 -1.519934 0.000000 -vt 0.328430 -1.542978 0.000000 -vt 0.306534 -1.518735 0.000000 -vt 0.272028 -1.533689 0.000000 -vt 0.256246 -1.514288 0.000000 -vt 0.247611 -1.479342 0.000000 -vt 0.336681 -1.565476 0.000000 -vt 0.325683 -1.555901 0.000000 -vt 0.336735 -1.586342 0.000000 -vt 0.242227 -1.529133 0.000000 -vt 0.239698 -1.571025 0.000000 -vt 0.252555 -1.551578 0.000000 -vt 0.273240 -1.646918 0.000000 -vt 0.253071 -1.632311 0.000000 -vt 0.235244 -1.625701 0.000000 -vt 0.242067 -1.603366 0.000000 -vt 0.254884 -1.587066 0.000000 -vt 0.273935 -1.564515 0.000000 -vt 0.305091 -1.545244 0.000000 -vt 0.304983 -1.561234 0.000000 -vt 0.278446 -1.584978 0.000000 -vt 0.263867 -1.616103 0.000000 -vt 0.324517 -1.611261 0.000000 -vt 0.303563 -1.630440 0.000000 -vt 0.279274 -1.636400 0.000000 -vt 0.576874 -1.451439 0.000000 -vt 0.574373 -1.381397 0.000000 -vt 0.691308 -1.574101 0.000000 -vt 0.697042 -1.593955 0.000000 -vt 0.712508 -1.619079 0.000000 -vt 0.735445 -1.646480 0.000000 -vt 0.762013 -1.675753 0.000000 -vt 0.776310 -1.691565 0.000000 -vt 0.790608 -1.707376 0.000000 -vt 0.900073 -1.959154 0.000000 -vt 0.896981 -1.878276 0.000000 -vt 0.878507 -1.833722 0.000000 -vt 0.851652 -1.786498 0.000000 -vt 0.074650 -1.634535 0.000000 -vt 0.088683 -1.632837 0.000000 -vt 0.132003 -1.610751 0.000000 -vt 0.155203 -1.614178 0.000000 -vt 0.150577 -1.647974 0.000000 -vt 0.125860 -1.643955 0.000000 -vt 0.117994 -1.608641 0.000000 -vt 0.113534 -1.638832 0.000000 -vt 0.093825 -1.606511 0.000000 -vt 0.108975 -1.607283 0.000000 -vt 0.104958 -1.635268 0.000000 -vt 0.079216 -1.608818 0.000000 -vt 0.067196 -1.616181 0.000000 -vt 0.066297 -1.639099 0.000000 -vt 0.061158 -1.640058 0.000000 -vt 0.058879 -1.662701 0.000000 -vt 0.055851 -1.664450 0.000000 -vt 0.055799 -1.664262 0.000000 -vt 0.058746 -1.642169 0.000000 -vt 0.055413 -1.665854 0.000000 -vt 0.045916 -1.647860 0.000000 -vt 0.049758 -1.628381 0.000000 -vt 0.056991 -1.617540 0.000000 -vt 0.051476 -1.648531 0.000000 -vt 0.082708 -1.589593 0.000000 -vt 0.097086 -1.587238 0.000000 -vt 0.022742 -1.726604 0.000000 -vt 0.064489 -1.617326 0.000000 -vt 0.062480 -1.617383 0.000000 -vt 0.066363 -1.598332 0.000000 -vt 0.062894 -1.599573 0.000000 -vt 0.067745 -1.582462 0.000000 -vt 0.063354 -1.591873 0.000000 -vt 0.074001 -1.578822 0.000000 -vt 0.055156 -1.596577 0.000000 -vt 0.059133 -1.600918 0.000000 -vt 0.926769 -1.893220 0.000000 -vt 0.927048 -1.856910 0.000000 -vt 0.927424 -1.916396 0.000000 -vt 0.916796 -1.998607 0.000000 -vt 0.912948 -1.994485 0.000000 -vt 0.909100 -1.990362 0.000000 -vt 0.928244 -1.945391 0.000000 -vt 0.906615 -1.967295 0.000000 -vt 0.927849 -1.931424 0.000000 -vt 0.907843 -1.926622 0.000000 -vt 0.907516 -1.937442 0.000000 -vt 0.928244 -1.945391 0.000000 -vt 0.905602 -1.894651 0.000000 -vt 0.906679 -1.910013 0.000000 -vt 0.904987 -1.885869 0.000000 -vt 0.902730 -1.858766 0.000000 -vt 0.900427 -1.834083 0.000000 -vt 0.999357 -1.730440 0.000000 -vt 0.100481 -1.568195 0.000000 -vt 0.085471 -1.574157 0.000000 -vt 0.087365 -1.557073 0.000000 -vt 0.072399 -1.594989 0.000000 -vt 0.101592 -1.549777 0.000000 -vt 0.101569 -1.531284 0.000000 -vt 0.116736 -1.539872 0.000000 -vt 0.115901 -1.518888 0.000000 -vt 0.138831 -1.522826 0.000000 -vt 0.125575 -1.533053 0.000000 -vt 0.128049 -1.507488 0.000000 -vt 0.138267 -1.494457 0.000000 -vt 0.157872 -1.502480 0.000000 -vt 0.158575 -1.540807 0.000000 -vt 0.138022 -1.552811 0.000000 -vt 0.124744 -1.558508 0.000000 -vt 0.115901 -1.562303 0.000000 -vt 0.135691 -1.582011 0.000000 -vt 0.123510 -1.583159 0.000000 -vt 0.157676 -1.578463 0.000000 -vt 0.170287 -1.485541 0.000000 -vt 0.171678 -1.528616 0.000000 -vt 0.171333 -1.571906 0.000000 -vt 0.169174 -1.612300 0.000000 -vt 0.120848 -1.596052 0.000000 -vt 0.184355 -1.517579 0.000000 -vt 0.183866 -1.467952 0.000000 -vt 0.183419 -1.564786 0.000000 -vt 0.181639 -1.609963 0.000000 -vt 0.178356 -1.651137 0.000000 -vt 0.165349 -1.649178 0.000000 -vt 0.331763 -1.886241 0.000000 -vt 0.794525 -1.194206 0.000000 -vt 0.792220 -1.205316 0.000000 -vt 0.765387 -1.174783 0.000000 -vt 0.768845 -1.089199 0.000000 -vt 0.785059 -1.011152 0.000000 -vt 0.693719 -1.072999 0.000000 -vt 0.689818 -1.064299 0.000000 -vt 0.684445 -1.057049 0.000000 -vt 0.680666 -1.049033 0.000000 -vt 0.682275 -1.059854 0.000000 -vt 0.552353 -1.647222 0.000000 -vt 0.557941 -1.596903 0.000000 -vt 0.731385 -1.328134 0.000000 -vt 0.735003 -1.473580 0.000000 -vt 0.741705 -1.545715 0.000000 -vt 0.738354 -1.509648 0.000000 -vt 0.726169 -1.267455 0.000000 -vt 0.738767 -1.277552 0.000000 -vt 0.714978 -1.236011 0.000000 -vt 0.125964 -1.025503 0.000000 -vt 0.140036 -1.019027 0.000000 -vt 0.153712 -1.010623 0.000000 -vt 0.168181 -1.007411 0.000000 -vt 0.185267 -1.002871 0.000000 -vt 0.204602 -1.002871 0.000000 -vt 0.224424 -1.002872 0.000000 -vt 0.028830 -1.163698 0.000000 -vt 0.041750 -1.084874 0.000000 -vt 0.057503 -1.064972 0.000000 -vt 0.075711 -1.044230 0.000000 -vt 0.093838 -1.036763 0.000000 -vt 0.102496 -1.034827 0.000000 -vt 0.111154 -1.032892 0.000000 -vt 0.118559 -1.029198 0.000000 -vt 0.004001 -1.321399 0.000000 -vt 0.004001 -1.254163 0.000000 -vt 0.005303 -1.230312 0.000000 -vt 0.011652 -1.185944 0.000000 -vt 0.096454 -1.979342 0.000000 -vt 0.454220 -1.818596 0.000000 -vt 0.562282 -1.197540 0.000000 -vt 0.564239 -1.167499 0.000000 -vt 0.566195 -1.137457 0.000000 -vt 0.572550 -1.095736 0.000000 -vt 0.572597 -1.317291 0.000000 -vt 0.050203 -1.271772 0.000000 -vt 0.067747 -1.287183 0.000000 -vt 0.035051 -1.258096 0.000000 -vt 0.087452 -1.302784 0.000000 -vt 0.856602 -1.311743 0.000000 -vt 0.843253 -1.294858 0.000000 -vt 0.789915 -1.216425 0.000000 -vt 0.763570 -1.185377 0.000000 -vt 0.907985 -1.701513 0.000000 -vt 0.781662 -1.425146 0.000000 -vt 0.761361 -1.302586 0.000000 -vt 0.771394 -1.548813 0.000000 -vt 0.771699 -1.519295 0.000000 -vt 0.757955 -1.277372 0.000000 -vt 0.831175 -1.363399 0.000000 -vt 0.795692 -1.318605 0.000000 -vt 0.791941 -1.431306 0.000000 -vt 0.863649 -1.476700 0.000000 -vt 0.851456 -1.544599 0.000000 -vt 0.967976 -1.130906 0.000000 -vt 0.956865 -1.117890 0.000000 -vt 0.945665 -1.106115 0.000000 -vt 0.950011 -1.092956 0.000000 -vt 0.954648 -1.081197 0.000000 -vt 0.948655 -1.096395 0.000000 -vt 0.979051 -1.081219 0.000000 -vt 0.969733 -1.073515 0.000000 -vt 0.962069 -1.062375 0.000000 -vt 0.983226 -1.061663 0.000000 -vt 0.974125 -1.057857 0.000000 -vt 0.967548 -1.048480 0.000000 -vt 0.991231 -1.056120 0.000000 -vt 0.984212 -1.051520 0.000000 -vt 0.985198 -1.041378 0.000000 -vt 0.977193 -1.046921 0.000000 -vt 0.971877 -1.038151 0.000000 -vt 0.988333 -1.034784 0.000000 -vt 0.997059 -1.039486 0.000000 -vt 0.992483 -1.034211 0.000000 -vt 0.990998 -1.029721 0.000000 -vt 0.989514 -1.025232 0.000000 -vt 0.728746 -1.470001 0.000000 -vt 0.732258 -1.506894 0.000000 -vt 0.692950 -1.151085 0.000000 -vt 0.698345 -1.153784 0.000000 -vt 0.785072 -1.603356 0.000000 -vt 0.675443 -1.125766 0.000000 -vt 0.682465 -1.133677 0.000000 -vt 0.702688 -1.145454 0.000000 -vt 0.696252 -1.114714 0.000000 -vt 0.706811 -1.141266 0.000000 -vt 0.694748 -1.137451 0.000000 -vt 0.690510 -1.118213 0.000000 -vt 0.690262 -1.134125 0.000000 -vt 0.006606 -1.206461 0.000000 -vt 0.071053 -1.482288 0.000000 -vt 0.067760 -1.488510 0.000000 -vt 0.064469 -1.494733 0.000000 -vt 0.086471 -1.434701 0.000000 -vt 0.092825 -1.407693 0.000000 -vt 0.099062 -1.377749 0.000000 -vt 0.113766 -1.584077 0.000000 -vt 0.025444 -1.851157 0.000000 -vt 0.024378 -1.831994 0.000000 -vt 0.028298 -1.866741 0.000000 -vt 0.025657 -1.841912 0.000000 -vt 0.027655 -1.861896 0.000000 -vt 0.027380 -1.862869 0.000000 -vt 0.026290 -1.866354 0.000000 -vt 0.008746 -1.783705 0.000000 -vt 0.046475 -1.787097 0.000000 -vt 0.042483 -1.783894 0.000000 -vt 0.040765 -1.780266 0.000000 -vt 0.035166 -1.763071 0.000000 -vt 0.038320 -1.777341 0.000000 -vt 0.029130 -1.707231 0.000000 -vt 0.907027 -1.953635 0.000000 -vt 0.036702 -1.684266 0.000000 -vt 0.041762 -1.668921 0.000000 -vt 0.966270 -1.912741 0.000000 -vt 0.061720 -1.519135 0.000000 -vt 0.063152 -1.506295 0.000000 -vt 0.061816 -1.498860 0.000000 -vt 0.059229 -1.503019 0.000000 -vt 0.061716 -1.519164 0.000000 -vt 0.756201 -1.595970 0.000000 -vt 0.746757 -1.591153 0.000000 -vt 0.781495 -1.624611 0.000000 -vt 0.782013 -1.641141 0.000000 -vt 0.776932 -1.653661 0.000000 -vt 0.772953 -1.631341 0.000000 -vt 0.771195 -1.659586 0.000000 -vt 0.766556 -1.664376 0.000000 -vt 0.759135 -1.643469 0.000000 -vt 0.765229 -1.638120 0.000000 -vt 0.748650 -1.607294 0.000000 -vt 0.758351 -1.610034 0.000000 -vt 0.783438 -1.624193 0.000000 -vt 0.783438 -1.624193 0.000000 -vt 0.781495 -1.624611 0.000000 -vt 0.778566 -1.676373 0.000000 -vt 0.780025 -1.651358 0.000000 -vt 0.779568 -1.676463 0.000000 -vt 0.743703 -1.590411 0.000000 -vt 0.789319 -1.603460 0.000000 -vt 0.785380 -1.623775 0.000000 -vt 0.785380 -1.623775 0.000000 -vt 0.781122 -1.651433 0.000000 -vt 0.780923 -1.676583 0.000000 -vt 0.748289 -1.606488 0.000000 -vt 0.578955 -1.694752 0.000000 -vt 0.567981 -1.781509 0.000000 -vt 0.084154 -1.588112 0.000000 -vt 0.905326 -1.893363 0.000000 -vt 0.575735 -1.738647 0.000000 -vt 0.578955 -1.694752 0.000000 -vt 0.567981 -1.781509 0.000000 -vt 0.905326 -1.893363 0.000000 -vt 0.425234 -1.723536 0.000000 -vt 0.433817 -1.841073 0.000000 -vt 0.433817 -1.841073 0.000000 -vt 0.425972 -1.787228 0.000000 -vt 0.429244 -1.147484 0.000000 -vt 0.427590 -1.207972 0.000000 -vt 0.430270 -1.441231 0.000000 -vt 0.429684 -1.383661 0.000000 -vt 0.428810 -1.297618 0.000000 -vt 0.426391 -1.664505 0.000000 -vt 0.428634 -1.613899 0.000000 -vt 0.430696 -1.557018 0.000000 -vt 0.431040 -1.502621 0.000000 -vt 0.431657 -1.099298 0.000000 -vt 0.433511 -1.028463 0.000000 -vt 0.873163 -1.123819 0.000000 -vt 0.433013 -1.060320 0.000000 -vt 0.429895 -1.814150 0.000000 -vt 0.425603 -1.755382 0.000000 -vt 0.425235 -1.723536 0.000000 -vt 0.426391 -1.664505 0.000000 -vt 0.425603 -1.755382 0.000000 -vt 0.425972 -1.787228 0.000000 -vt 0.429894 -1.814150 0.000000 -vt 0.429244 -1.147484 0.000000 -vt 0.427590 -1.207972 0.000000 -vt 0.428810 -1.297618 0.000000 -vt 0.430270 -1.441231 0.000000 -vt 0.429684 -1.383661 0.000000 -vt 0.428633 -1.613899 0.000000 -vt 0.430696 -1.557017 0.000000 -vt 0.431040 -1.502621 0.000000 -vt 0.431657 -1.099298 0.000000 -vt 0.433511 -1.028463 0.000000 -vt 0.873164 -1.123818 0.000000 -vt 0.433013 -1.060320 0.000000 -vt 0.871168 -1.113146 0.000000 -vt 0.393600 -1.145293 0.000000 -vt 0.394269 -1.099395 0.000000 -vt 0.392611 -1.208763 0.000000 -vt 0.395136 -1.298826 0.000000 -vt 0.395781 -1.383183 0.000000 -vt 0.397832 -1.060254 0.000000 -vt 0.384055 -1.862589 0.000000 -vt 0.380435 -1.832241 0.000000 -vt 0.376814 -1.801893 0.000000 -vt 0.378979 -1.767624 0.000000 -vt 0.381144 -1.733356 0.000000 -vt 0.384067 -1.672376 0.000000 -vt 0.390585 -1.622559 0.000000 -vt 0.397449 -1.563439 0.000000 -vt 0.395421 -1.507540 0.000000 -vt 0.396094 -1.441822 0.000000 -vt 0.393600 -1.145293 0.000000 -vt 0.392611 -1.208763 0.000000 -vt 0.395136 -1.298826 0.000000 -vt 0.394269 -1.099395 0.000000 -vt 0.397832 -1.060254 0.000000 -vt 0.384055 -1.862588 0.000000 -vt 0.376815 -1.801893 0.000000 -vt 0.381144 -1.733356 0.000000 -vt 0.384067 -1.672376 0.000000 -vt 0.390585 -1.622559 0.000000 -vt 0.397449 -1.563439 0.000000 -vt 0.395421 -1.507540 0.000000 -vt 0.396094 -1.441822 0.000000 -vt 0.395781 -1.383183 0.000000 -vt 0.380435 -1.832241 0.000000 -vt 0.378979 -1.767624 0.000000 -vt 0.387920 -1.892490 0.000000 -vt 0.387920 -1.892490 0.000000 -# 3092 texture coords - -g great_white_shark -usemtl _Sharkgreatwhiteshark -f 2651/3022 2659/3031 344/44 1/45 -f 726/102 2651/3022 2667/3040 1041/1136 -f 343/114 9/113 1040/1135 1045/1140 -f 9/113 343/114 1021/1115 1022/1116 -f 2/116 8/115 1021/1115 1033/1127 -f 3/121 1008/1102 1018/1112 4/120 -f 2653/3025 2666/3039 1023/1117 11/117 -f 12/101 710/100 1024/1118 1025/1119 -f 711/106 13/107 1024/1118 1034/1129 -f 13/107 711/106 1008/1102 1009/1103 -f 1010/1104 1009/1103 1410/127 1408/128 -f 12/101 14/109 1042/1137 1043/1138 -f 14/109 12/101 1025/1119 1026/1120 -f 16/129 15/108 1010/1104 1011/1105 -f 1418/138 1419/157 1012/1106 1011/1105 -f 1013/1107 1014/1108 55/177 54/159 -f 1014/1108 25/194 26/178 55/177 -f 1278/1380 2649/217 18/220 1274/1375 -f 23/216 21/215 362/207 886/206 -f 887/188 919/189 829/213 1286/1392 -f 19/209 1282/1386 829/213 919/189 -f 21/215 20/214 1281/1385 362/207 -f 22/221 21/215 23/216 -f 23/216 1274/1375 1275/1376 22/221 -f 24/190 19/209 919/189 30/182 -f 1445/201 1446/1371 915/202 37/200 -f 37/200 35/198 1449/199 1445/201 -f 35/198 25/194 1451/195 1449/199 -f 25/194 35/198 34/193 26/178 -f 26/178 34/193 27/179 1039/1134 -f 26/178 1039/1134 41/175 -f 34/193 32/197 28/192 27/179 -f 40/180 51/174 27/179 28/192 -f 1279/1381 40/180 28/192 33/196 -f 31/181 50/173 40/180 1279/1381 -f 30/182 39/170 31/181 24/190 -f 888/183 916/169 39/170 30/182 -f 827/184 825/185 916/169 888/183 -f 32/197 36/203 33/196 28/192 -f 36/203 363/204 914/205 33/196 -f 35/198 37/200 32/197 34/193 -f 37/200 915/202 36/203 32/197 -f 363/204 36/203 915/202 1271/1372 -f 38/168 39/170 916/169 48/147 -f 50/173 31/181 39/170 38/168 -f 50/173 49/172 51/174 40/180 -f 51/174 42/171 1038/1133 27/179 -f 1039/1134 27/179 1038/1133 -f 42/171 56/176 1027/1121 1038/1133 -f 43/166 57/165 56/176 42/171 -f 43/166 46/158 53/152 57/165 -f 44/150 53/152 46/158 -f 46/158 45/167 47/148 44/150 -f 42/171 51/174 49/172 43/166 -f 45/167 46/158 43/166 49/172 -f 45/167 38/168 48/147 47/148 -f 49/172 50/173 38/168 45/167 -f 825/185 816/146 48/147 916/169 -f 816/146 52/149 47/148 48/147 -f 876/151 53/152 44/150 1265/1364 -f 877/143 59/153 53/152 876/151 -f 54/159 55/177 1027/1121 1028/1122 -f 57/165 58/164 69/227 56/176 -f 53/152 59/153 58/164 57/165 -f 877/143 879/135 68/142 59/153 -f 879/135 878/134 60/133 68/142 -f 878/134 62/228 61/132 60/133 -f 62/228 65/230 64/229 61/132 -f 63/112 71/131 61/132 64/229 -f 272/110 1042/1137 63/112 64/229 -f 882/231 281/695 65/230 62/228 -f 65/230 282/111 272/110 64/229 -f 16/129 17/139 1029/1123 1026/1120 -f 66/130 72/140 71/131 63/112 -f 71/131 73/141 60/133 61/132 -f 73/141 67/154 68/142 60/133 -f 67/154 58/164 59/153 68/142 -f 74/163 69/227 58/164 67/154 -f 1028/1122 1030/1124 70/162 54/159 -f 1013/1107 1015/1109 1521/232 1519/160 -f 1419/157 1522/234 1016/1110 1012/1106 -f 17/139 77/156 1031/1125 1029/1123 -f 72/140 75/155 73/141 71/131 -f 75/155 74/163 67/154 73/141 -f 1030/1124 1032/1126 76/233 70/162 -f 1015/1109 1017/1111 1530/235 1521/232 -f 1522/234 1530/235 1017/1111 1016/1110 -f 77/156 76/233 1032/1126 1031/1125 -f 80/273 81/274 890/271 79/272 -f 80/273 82/268 83/270 81/274 -f 82/268 224/267 78/269 83/270 -f 82/268 80/273 1162/1259 1167/1264 -f 1162/1259 1163/1260 325/281 228/275 -f 325/281 1163/1260 1168/1265 326/292 -f 890/271 85/283 328/282 79/272 -f 889/256 697/257 322/280 84/284 -f 322/280 395/286 897/285 84/284 -f 87/306 688/307 355/304 359/305 -f 360/345 355/334 89/344 88/3014 -f 353/309 692/310 88/301 89/308 -f 1555/386 1556/390 1320/1430 1321/1431 -f 95/368 90/376 576/377 93/378 -f 572/370 577/374 90/376 95/368 -f 1556/390 1596/398 1319/1429 1320/1430 -f 93/378 91/389 92/379 -f 94/367 95/368 93/378 92/379 -f 95/368 94/367 102/366 -f 95/368 102/366 96/369 572/370 -f 100/371 1306/1416 1301/1410 572/370 -f 573/354 574/352 97/359 565/357 -f 98/372 99/373 1309/1419 1310/1420 -f 100/371 101/375 1305/1415 1306/1416 -f 96/369 103/364 1299/1408 1300/1409 -f 102/366 104/365 103/364 96/369 -f 104/365 1314/1424 112/380 113/381 -f 112/380 1314/1424 1315/1425 111/388 -f 111/388 1315/1425 1316/1426 105/397 -f 1318/1428 1596/399 1317/1427 -f 103/364 108/382 1244/1342 1299/1408 -f 104/365 113/381 108/382 103/364 -f 109/400 106/383 1244/1342 1245/1343 -f 113/381 122/387 107/401 108/382 -f 115/402 109/400 1245/1343 1246/1344 -f 109/400 115/402 1235/1333 1239/1337 -f 106/383 109/400 1239/1337 1240/1338 -f 111/388 128/415 129/396 112/380 -f 129/396 122/387 113/381 112/380 -f 122/387 130/395 114/394 107/401 -f 123/392 115/402 1246/1344 1247/1345 -f 115/402 123/392 1236/1334 1235/1333 -f 116/403 124/405 1257/1356 1258/1357 -f 110/404 116/403 1258/1357 1259/1358 -f 119/384 110/404 1259/1358 1260/1359 -f 99/373 119/384 1260/1359 1309/1419 -f 121/409 566/358 120/385 553/408 -f 105/397 143/434 128/415 111/388 -f 129/396 131/416 130/395 122/387 -f 130/395 141/417 132/391 114/394 -f 133/393 123/392 1247/1345 1248/1346 -f 1230/1328 1231/1329 126/410 124/405 -f 1257/1356 1261/1360 125/411 117/406 -f 125/411 1261/1360 1262/1361 557/412 -f 557/412 1262/1361 1263/1362 559/414 -f 127/413 126/410 1231/1329 1232/1330 -f 128/415 142/433 131/416 129/396 -f 131/416 244/432 141/417 130/395 -f 141/417 139/431 140/418 132/391 -f 138/419 133/393 1248/1346 1249/1347 -f 137/420 127/413 1232/1330 1233/1331 -f 134/421 136/423 560/422 1263/1362 -f 560/422 559/414 1263/1362 -f 134/421 1263/1362 1264/1363 -f 560/422 136/423 563/424 -f 135/425 169/467 563/424 136/423 -f 287/426 366/453 135/425 136/423 -f 134/421 288/428 287/426 136/423 -f 371/427 375/706 288/428 1264/1363 -f 134/421 1264/1363 288/428 -f 371/427 137/420 1233/1331 1234/1332 -f 148/429 138/419 1249/1347 1250/1348 -f 139/431 251/440 147/430 140/418 -f 244/432 250/439 139/431 141/417 -f 142/433 245/633 244/432 131/416 -f 143/434 243/436 142/433 128/415 -f 1596/399 144/435 977/1070 1317/1427 -f 145/438 375/706 371/427 1234/1332 -f 250/439 249/635 251/440 139/431 -f 251/440 252/634 146/441 147/430 -f 146/441 1069/1164 1256/1355 1250/1348 -f 149/443 373/437 150/442 151/444 -f 150/442 1256/1355 151/444 -f 156/446 1219/1316 1220/1317 157/454 -f 151/444 1219/1316 153/447 149/443 -f 155/448 377/522 152/449 156/446 -f 382/450 379/703 153/447 152/449 -f 154/451 378/764 365/452 1212/1309 -f 154/451 165/466 169/467 135/425 -f 1212/1309 1213/1310 165/466 154/451 -f 157/454 166/469 1251/1349 156/446 -f 157/454 1220/1317 1221/1318 217/455 -f 217/455 1221/1318 1224/1321 218/525 -f 160/458 1066/1161 1068/1163 252/634 -f 164/459 1067/1162 1066/1161 160/458 -f 1071/1166 1072/1167 1067/1162 164/459 -f 163/462 1222/1319 1223/1320 918/463 -f 170/468 563/424 169/467 -f 181/470 167/465 1251/1349 1252/1350 -f 1213/1310 1214/1311 168/471 165/466 -f 168/471 179/472 169/467 165/466 -f 171/473 170/468 169/467 179/472 -f 172/474 173/475 170/468 171/473 -f 172/474 175/481 176/476 173/475 -f 190/479 229/503 191/477 174/478 -f 174/478 175/481 183/480 190/479 -f 793/482 176/476 175/481 174/478 -f 213/483 183/480 175/481 172/474 -f 171/473 177/484 213/483 172/474 -f 179/472 178/485 177/484 171/473 -f 179/472 168/471 180/486 178/485 -f 211/487 1215/1312 1214/1311 181/470 -f 181/470 1252/1350 1254/1353 211/487 -f 216/489 221/527 182/488 166/469 -f 215/490 186/491 183/480 213/483 -f 186/491 188/492 190/479 183/480 -f 212/493 206/494 978/1071 979/1072 -f 214/497 212/493 979/1072 980/1073 -f 214/497 980/1073 981/1074 215/490 -f 215/490 981/1074 982/1075 186/491 -f 186/491 982/1075 983/1076 188/492 -f 188/492 983/1076 984/1077 189/502 -f 189/502 229/503 190/479 188/492 -f 229/503 242/511 230/504 191/477 -f 192/505 795/516 191/477 230/504 -f 230/504 231/515 761/506 192/505 -f 266/507 265/521 192/505 761/506 -f 189/502 984/1077 994/1087 239/510 -f 239/510 242/511 229/503 189/502 -f 918/463 261/539 198/530 163/462 -f 261/539 1007/1101 197/529 198/530 -f 200/538 207/537 197/529 1007/1101 -f 1777/541 985/1078 1002/1095 1780/653 -f 200/538 985/1078 986/1079 208/536 -f 208/536 986/1079 987/1080 201/534 -f 201/534 987/1080 988/1081 202/532 -f 202/532 988/1081 989/1082 203/514 -f 204/513 1253/1352 1255/1354 990/1083 -f 206/494 1217/1314 1218/1315 978/1071 -f 200/538 208/536 207/537 -f 208/536 201/534 210/535 207/537 -f 201/534 202/532 209/533 210/535 -f 202/532 203/514 220/531 209/533 -f 211/487 1254/1353 1253/1352 204/513 -f 180/486 1215/1312 1217/1314 206/494 -f 206/494 212/493 178/485 180/486 -f 212/493 214/497 177/484 178/485 -f 214/497 215/490 213/483 177/484 -f 210/535 219/528 197/529 207/537 -f 157/454 217/455 216/489 166/469 -f 218/525 222/526 216/489 217/455 -f 218/525 1224/1321 1222/1319 163/462 -f 222/526 218/525 163/462 198/530 -f 197/529 219/528 222/526 198/530 -f 209/533 221/527 219/528 210/535 -f 220/531 182/488 221/527 209/533 -f 222/526 219/528 221/527 216/489 -f 86/298 227/299 225/546 223/547 -f 311/265 1056/1151 1170/1267 1166/1263 -f 225/546 1164/1261 1165/1262 223/547 -f 224/267 1057/1152 1058/1153 78/269 -f 226/266 311/265 1166/1263 1167/1264 -f 242/511 240/512 231/515 230/504 -f 231/515 233/574 232/573 761/506 -f 233/574 748/32 762/31 232/573 -f 241/575 296/576 748/32 233/574 -f 234/577 297/578 296/576 241/575 -f 991/1084 992/1085 236/582 356/579 -f 241/575 240/512 238/580 234/577 -f 235/583 236/582 992/1085 993/1086 -f 237/584 235/583 993/1086 994/1087 -f 240/512 242/511 239/510 238/580 -f 233/574 231/515 240/512 241/575 -f 144/435 247/638 995/1088 977/1070 -f 243/436 246/637 245/633 142/433 -f 245/633 248/636 250/439 244/432 -f 247/638 1826/641 996/1089 995/1088 -f 246/637 254/640 248/636 245/633 -f 248/636 255/639 249/635 250/439 -f 249/635 160/458 252/634 251/440 -f 252/634 1068/1163 1069/1164 146/441 -f 1826/641 1830/643 997/1090 996/1089 -f 254/640 256/642 255/639 248/636 -f 255/639 164/459 160/458 249/635 -f 256/642 1071/1166 164/459 255/639 -f 256/642 254/640 997/1090 1070/1165 -f 1834/650 1835/649 999/1092 1000/1093 -f 258/645 256/642 998/1091 1000/1093 -f 259/646 257/464 999/1092 1001/1094 -f 259/646 1225/1322 1223/1320 161/461 -f 891/647 1225/1322 1226/1324 1004/1098 -f 1780/653 1002/1095 1003/1096 1848/652 -f 260/654 891/647 1004/1097 1003/1096 -f 260/654 261/539 918/463 891/647 -f 845/659 843/658 839/657 1296/1405 -f 263/672 1276/1378 1277/1379 264/673 -f 1321/1432 1322/1433 1856/671 1555/686 -f 759/591 267/687 265/521 266/507 -f 794/520 795/516 192/505 265/521 -f 267/687 276/688 794/520 265/521 -f 278/689 268/690 276/688 267/687 -f 278/689 765/587 279/691 268/690 -f 269/692 274/697 268/690 279/691 -f 279/691 285/586 270/693 269/692 -f 271/694 883/696 269/692 270/693 -f 281/695 882/231 271/694 270/693 -f 281/695 280/585 282/111 65/230 -f 282/111 284/96 273/97 272/110 -f 710/100 12/101 1043/1138 1051/1146 -f 883/696 865/699 274/697 269/692 -f 275/698 276/688 268/690 274/697 -f 277/519 794/520 276/688 275/698 -f 865/699 875/700 275/698 274/697 -f 875/700 792/518 277/519 275/698 -f 765/587 776/89 285/586 279/691 -f 280/585 281/695 270/693 285/586 -f 280/585 283/90 284/96 282/111 -f 285/586 776/89 283/90 280/585 -f 287/426 288/428 376/655 286/656 -f 439/829 441/566 290/565 289/564 -f 292/567 293/571 290/565 441/566 -f 2701/3075 2704/3078 435/827 291/559 -f 2701/3075 2702/3076 735/17 292/567 -f 735/17 738/18 293/571 292/567 -f 293/571 298/581 294/572 290/565 -f 294/572 295/570 289/564 290/565 -f 1005/1099 1006/1100 357/743 896/569 -f 356/579 357/743 1006/1100 991/1084 -f 294/572 296/576 297/578 295/570 -f 298/581 748/32 296/576 294/572 -f 2654/3026 2655/3027 301/568 291/559 -f 305/15 301/568 2655/3027 2658/3030 -f 735/17 2702/3076 2703/3077 736/16 -f 736/16 2703/3077 2714/3088 739/27 -f 2656/3028 2657/3029 304/13 302/12 -f 2657/3029 2658/3030 303/560 304/13 -f 336/550 337/555 303/560 300/558 -f 299/552 432/551 336/550 300/558 -f 432/551 308/549 306/553 336/550 -f 308/549 309/548 307/554 306/553 -f 310/263 1059/1154 1056/1151 311/265 -f 311/265 226/266 313/264 310/263 -f 226/266 228/275 312/276 313/264 -f 307/554 1376/1491 1378/1493 695/557 -f 310/263 313/264 319/262 696/261 -f 313/264 312/276 321/277 319/262 -f 312/276 324/289 314/288 321/277 -f 315/279 320/278 321/277 314/288 -f 314/288 317/290 316/287 315/279 -f 322/280 1323/1434 1324/1435 395/286 -f 324/289 327/291 317/290 314/288 -f 318/259 801/260 696/261 319/262 -f 319/262 321/277 320/278 318/259 -f 320/278 315/279 323/258 -f 697/257 1325/1436 1323/1434 322/280 -f 323/258 799/247 318/259 320/278 -f 228/275 325/281 324/289 312/276 -f 325/281 326/292 327/291 324/289 -f 1181/1278 1178/1275 1177/1274 328/282 -f 329/293 1201/1298 1178/1275 1181/1278 -f 1198/1295 1180/1277 917/294 351/295 -f 340/21 1/45 344/44 330/20 -f 331/43 332/23 330/20 344/44 -f 347/42 333/24 332/23 331/43 -f 350/25 334/10 333/24 347/42 -f 302/12 335/11 334/10 350/25 -f 304/13 342/561 335/11 302/12 -f 303/560 337/555 342/561 304/13 -f 336/550 306/553 338/556 337/555 -f 340/21 386/246 1044/1139 1045/1140 -f 340/21 330/20 339/19 386/246 -f 330/20 332/23 388/22 339/19 -f 332/23 333/24 341/8 388/22 -f 334/10 1064/1159 341/8 333/24 -f 335/11 342/561 390/562 389/9 -f 342/561 337/555 338/556 390/562 -f 707/253 1395/1523 2/116 1033/1127 -f 344/44 2659/3031 2660/3032 331/43 -f 331/43 2660/3032 2661/3033 347/42 -f 347/42 2661/3033 2662/3034 350/25 -f 350/25 2662/3034 2656/3028 302/12 -f 888/183 30/182 919/189 887/188 -f 689/336 354/335 355/334 688/337 -f 353/343 89/344 354/335 689/336 -f 355/334 354/335 89/344 -f 359/305 361/300 358/303 87/306 -f 361/300 359/305 355/304 -f 360/302 88/301 361/300 355/304 -f 88/301 692/310 358/303 361/300 -f 377/522 365/452 364/523 380/524 -f 367/766 374/765 378/764 366/453 -f 366/453 287/426 286/656 367/766 -f 375/706 381/707 376/655 288/428 -f 149/443 153/447 379/703 368/701 -f 1243/1341 149/443 368/701 369/702 -f 369/702 368/701 370/704 -f 372/705 145/438 369/702 370/704 -f 372/705 381/707 375/706 145/438 -f 145/438 1234/1332 1242/1340 369/702 -f 369/702 1242/1340 1243/1341 -f 364/523 365/452 378/764 374/765 -f 382/450 152/449 377/522 380/524 -f 1065/1160 1380/1495 1377/1492 384/7 -f 797/1 796/5 383/6 1060/1155 -f 929/243 1369/1484 1373/1488 1047/1142 -f 1370/1485 1371/1486 701/238 704/242 -f 387/245 706/254 1044/1139 1046/1141 -f 341/8 1065/1160 384/7 388/22 -f 341/8 1064/1159 1065/1160 -f 391/563 1065/1160 389/9 390/562 -f 390/562 338/556 695/557 391/563 -f 306/553 307/554 695/557 338/556 -f 392/770 1112/1209 510/768 417/769 -f 1100/1197 1094/1191 1095/1192 1099/1196 -f 1088/1185 1089/1186 396/774 393/773 -f 1182/1279 1187/1284 398/776 491/775 -f 1171/1268 1172/1269 317/290 327/291 -f 1172/1269 1173/1270 316/287 317/290 -f 395/286 1324/1435 1338/1449 1174/1271 -f 411/767 2026/1498 1175/1272 1174/1271 -f 412/779 396/774 1089/1186 1092/1189 -f 412/779 973/1064 972/1063 396/774 -f 1096/1193 1094/1191 1100/1197 1101/1198 -f 490/780 394/771 1360/1473 1357/1470 -f 404/784 406/792 400/788 401/791 -f 402/789 401/791 400/788 408/790 -f 403/778 1090/1187 1190/1287 1340/1451 -f 404/784 1361/1474 1356/1469 406/792 -f 1097/1194 1336/1447 1337/1448 1098/1195 -f 409/799 402/789 408/790 415/797 -f 1327/1438 1365/1478 1362/1475 405/794 -f 924/805 921/787 1350/1462 1351/1463 -f 413/793 974/1065 1333/1444 1329/1440 -f 407/795 1097/1194 1095/1192 417/769 -f 1119/1216 419/796 407/795 1206/1303 -f 415/797 1328/1439 1330/1441 416/798 -f 416/798 893/800 409/799 415/797 -f 1206/1303 1207/1304 1118/1215 1119/1216 -f 416/798 1330/1441 1331/1442 922/802 -f 893/800 416/798 922/802 892/804 -f 892/804 922/802 425/812 473/803 -f 476/889 420/808 421/807 1113/1210 -f 427/816 1117/1214 1208/1305 475/809 -f 475/809 1208/1305 1104/1201 -f 1208/1305 1117/1214 1118/1215 1207/1304 -f 418/801 426/810 428/811 -f 1331/1442 1332/1443 425/812 922/802 -f 422/813 424/814 473/803 425/812 -f 422/813 923/820 423/815 424/814 -f 428/811 1087/1184 1334/1445 1332/1443 -f 2084/1499 428/811 478/817 -f 426/810 478/817 428/811 -f 899/821 923/820 1087/1184 429/819 -f 1334/1445 1087/1184 923/820 422/813 -f 899/821 2081/2265 894/822 923/820 -f 894/822 2081/2265 423/815 923/820 -f 436/825 442/832 437/823 430/824 -f 470/826 2085/2272 430/824 437/823 -f 431/833 433/834 436/825 430/824 -f 1169/1266 443/836 436/825 433/834 -f 308/549 432/551 1169/1266 1165/1262 -f 86/298 223/547 433/834 431/833 -f 2654/3026 2663/3035 443/836 299/552 -f 442/832 436/825 443/836 -f 2664/3036 2665/3038 438/828 447/831 -f 440/830 445/1028 949/1041 947/1038 -f 438/828 2705/3079 947/1038 -f 434/835 1075/1170 1076/1172 -f 289/564 1005/1099 1076/1172 439/829 -f 2704/3078 2705/3079 438/828 435/827 -f 2663/3035 2665/3038 442/832 443/836 -f 461/837 460/872 470/838 437/839 -f 437/839 2664/3037 956/1048 461/837 -f 444/841 957/1049 956/1048 447/840 -f 449/843 959/1051 957/1049 444/841 -f 455/850 950/1042 948/1039 446/844 -f 444/841 447/840 949/1040 948/1039 -f 440/846 1075/1171 1077/1173 445/845 -f 445/845 1077/1173 1078/1174 446/844 -f 454/861 1080/1176 1078/1174 448/849 -f 449/843 950/1042 951/1043 450/852 -f 945/1036 955/1047 953/1045 939/1031 -f 458/854 952/1044 954/1046 451/853 -f 457/856 546/857 545/855 952/1044 -f 546/857 457/856 452/858 547/859 -f 451/853 1079/1175 1081/1177 458/854 -f 471/860 1079/1175 1085/1182 946/1037 -f 943/1034 963/1055 961/1053 938/1030 -f 544/864 456/863 962/1054 958/1050 -f 898/867 2138/2341 542/865 1074/1169 -f 541/866 547/859 452/858 1073/1168 -f 2142/1503 1081/1177 533/869 2650/1179 -f 895/871 2650/1179 533/869 -f 538/870 1082/1178 1086/1183 966/1058 -f 549/873 2099/2289 460/872 461/837 -f 462/842 469/874 549/873 461/837 -f 462/842 467/875 468/882 469/874 -f 449/843 450/852 960/1052 959/1051 -f 944/1035 534/878 535/877 463/862 -f 464/879 456/863 544/864 465/880 -f 466/876 463/862 535/877 536/881 -f 466/876 536/881 468/882 467/875 -f 488/922 506/923 900/921 513/885 -f 489/924 505/934 506/923 488/922 -f 1140/1237 1151/1248 489/924 488/922 -f 497/925 1141/1238 1363/1476 1358/1471 -f 1184/1281 1182/1279 491/775 492/927 -f 492/927 491/775 1171/1268 1176/1273 -f 1176/1273 1179/1276 1142/1239 492/927 -f 494/928 1177/1274 1178/1275 499/929 -f 1185/1282 1186/1283 501/931 495/930 -f 496/932 1143/1240 1149/1246 495/930 -f 501/931 503/937 496/932 495/930 -f 505/934 489/924 1102/1199 1103/1200 -f 504/935 497/925 1358/1471 1359/1472 -f 496/932 503/937 550/936 498/933 -f 500/296 2177/2401 1199/1296 1200/1297 -f 502/938 501/931 1204/1301 1205/1302 -f 502/938 2171/2389 503/937 501/931 -f 508/918 523/908 1108/1205 1107/1204 -f 522/907 514/884 509/920 486/919 -f 514/884 513/885 900/921 509/920 -f 488/922 513/885 1144/1241 1140/1237 -f 1105/1202 1112/1209 392/770 -f 421/807 1114/1211 511/887 1113/1210 -f 1112/1209 1105/1202 1106/1203 1111/1208 -f 512/886 1144/1241 1145/1242 515/883 -f 515/883 1145/1242 1146/1243 519/893 -f 1116/1213 1111/1208 1106/1203 518/888 -f 527/902 482/903 481/901 1126/1223 -f 516/898 1123/1220 526/899 480/900 -f 551/895 521/894 525/896 517/897 -f 520/892 519/893 1109/1206 1110/1207 -f 520/892 479/891 518/888 519/893 -f 479/891 477/890 1116/1213 518/888 -f 521/894 1109/1206 1153/1250 1147/1244 -f 524/909 1148/1245 1155/1252 1124/1221 -f 527/902 1136/1233 483/904 482/903 -f 530/906 1132/1229 528/905 1130/1227 -f 532/912 2213/2456 529/911 1209/1306 -f 532/913 1210/1307 1211/1308 -f 531/910 1131/1228 487/915 484/914 -f 537/939 2134/2336 465/880 544/864 -f 540/940 2134/2336 537/939 544/864 -f 547/859 541/866 548/942 -f 542/865 968/1060 967/1059 1074/1169 -f 539/943 543/941 967/1059 968/1060 -f 543/941 539/943 540/940 544/864 -f 958/1050 545/855 546/857 964/1056 -f 546/857 547/859 548/942 964/1056 -f 800/3 694/248 693/239 671/4 -f 564/517 173/475 867/754 868/753 -f 552/632 562/628 564/517 868/753 -f 553/408 118/407 554/760 121/409 -f 117/406 555/625 554/760 118/407 -f 125/411 556/624 555/625 117/406 -f 557/412 558/630 556/624 125/411 -f 559/414 561/629 558/630 557/412 -f 560/422 562/628 561/629 559/414 -f 563/424 564/517 562/628 560/422 -f 170/468 173/475 564/517 563/424 -f 176/476 792/518 867/754 173/475 -f 567/601 566/358 121/409 854/757 -f 121/409 554/760 854/757 -f 933/600 568/353 567/601 911/351 -f 566/358 573/354 565/357 120/385 -f 567/601 573/354 566/358 -f 568/353 574/352 573/354 567/601 -f 933/600 837/602 569/356 568/353 -f 575/355 574/352 568/353 569/356 -f 569/356 836/363 583/362 575/355 -f 570/361 571/360 575/355 583/362 -f 571/360 570/361 1302/1411 1301/1410 -f 574/352 575/355 571/360 97/359 -f 576/685 90/684 579/670 1322/1433 -f 579/670 1856/671 1322/1433 -f 579/670 90/684 577/683 -f 1302/1412 1303/1413 579/670 577/683 -f 578/662 579/670 1303/1413 1304/1414 -f 845/659 578/662 1304/1414 580/661 -f 581/660 843/658 845/659 580/661 -f 580/661 584/669 582/668 581/660 -f 584/669 570/682 583/681 582/668 -f 658/946 813/971 606/944 659/945 -f 606/944 612/975 661/947 659/945 -f 585/950 593/951 647/948 646/949 -f 593/951 618/953 650/952 647/948 -f 618/953 619/981 651/954 650/952 -f 586/730 786/732 587/731 596/729 -f 586/730 597/734 588/733 786/732 -f 597/734 641/715 787/722 588/733 -f 589/735 642/714 641/715 597/734 -f 589/735 598/736 643/710 642/714 -f 598/736 591/956 590/955 643/710 -f 591/956 585/950 646/949 590/955 -f 591/956 598/736 602/959 592/957 -f 594/958 600/963 619/981 618/953 -f 594/958 618/953 593/951 592/957 -f 592/957 593/951 585/950 591/956 -f 610/726 596/729 587/731 595/725 -f 610/726 803/727 609/728 596/729 -f 609/728 603/737 586/730 596/729 -f 603/737 589/735 597/734 586/730 -f 603/737 602/959 598/736 589/735 -f 599/960 607/961 592/957 602/959 -f 607/961 617/962 594/958 592/957 -f 617/962 601/964 600/963 594/958 -f 601/964 616/980 623/965 600/963 -f 602/959 603/737 609/728 599/960 -f 615/968 604/969 812/966 811/967 -f 605/970 812/966 604/969 617/962 -f 604/969 601/964 617/962 -f 605/970 617/962 813/971 -f 606/944 813/971 617/962 607/961 -f 606/944 607/961 611/972 -f 607/961 806/973 611/972 -f 599/960 608/738 805/974 607/961 -f 607/961 805/974 806/973 -f 609/728 803/727 608/738 599/960 -f 595/725 789/724 802/723 610/726 -f 611/972 612/975 606/944 -f 622/977 627/988 621/978 925/976 -f 613/979 930/989 622/977 925/976 -f 925/976 616/980 615/968 613/979 -f 616/980 601/964 604/969 615/968 -f 651/954 619/981 625/982 634/1001 -f 808/985 631/986 632/998 620/983 -f 632/998 640/999 633/1000 625/982 -f 633/1000 634/1001 625/982 -f 632/998 625/982 620/983 -f 621/984 808/985 620/983 -f 630/987 631/986 808/985 -f 621/978 627/988 630/987 808/985 -f 930/989 628/996 627/988 622/977 -f 613/979 615/968 811/967 930/989 -f 616/980 925/976 624/990 623/965 -f 621/984 620/983 624/990 925/976 -f 625/982 623/965 624/990 620/983 -f 619/981 600/963 623/965 625/982 -f 639/993 638/1004 636/991 626/992 -f 626/992 636/991 810/994 -f 930/989 810/995 628/996 -f 629/997 630/987 627/988 628/996 -f 632/998 631/986 630/987 629/997 -f 635/1002 637/1003 634/1001 633/1000 -f 635/1002 809/1006 636/991 637/1003 -f 638/1004 648/1012 637/1003 636/991 -f 639/993 657/1014 660/1005 638/1004 -f 635/1002 632/998 629/1007 809/1006 -f 635/1002 633/1000 640/999 632/998 -f 642/714 653/708 652/713 641/715 -f 643/710 654/709 653/708 642/714 -f 590/955 644/1008 654/709 643/710 -f 646/949 645/1009 644/1008 590/955 -f 647/948 656/1010 645/1009 646/949 -f 650/952 649/1011 656/1010 647/948 -f 649/1011 660/1005 656/1010 -f 648/1012 638/1004 660/1005 649/1011 -f 648/1012 651/954 634/1001 637/1003 -f 649/1011 650/952 651/954 648/1012 -f 667/712 652/713 653/708 665/711 -f 653/708 654/709 665/711 -f 644/1008 655/1013 665/711 654/709 -f 645/1009 656/1010 655/1013 644/1008 -f 660/1005 661/1017 655/1013 656/1010 -f 658/1015 659/1016 660/1005 657/1014 -f 661/1017 660/1005 659/1016 -f 807/1018 662/1019 655/1013 661/1017 -f 655/1013 662/1019 804/1020 -f 663/717 665/711 655/1013 804/1020 -f 665/711 663/717 664/716 -f 666/718 667/712 665/711 664/716 -f 788/719 791/720 667/712 666/718 -f 791/720 668/721 652/713 667/712 -f 668/721 787/722 641/715 652/713 -f 675/311 928/314 681/313 669/312 -f 681/313 670/322 669/312 -f 1371/327 383/326 669/312 670/322 -f 383/326 796/325 675/311 669/312 -f 671/324 676/316 675/311 796/325 -f 672/323 673/317 676/316 671/324 -f 672/339 687/338 688/337 673/3015 -f 688/307 87/306 673/317 -f 675/311 676/316 674/315 928/314 -f 673/317 677/318 674/315 676/316 -f 87/306 358/303 677/318 673/317 -f 358/303 692/310 690/319 677/318 -f 678/320 674/315 677/318 690/319 -f 674/315 678/320 680/321 928/314 -f 928/314 680/321 681/313 -f 687/338 686/333 682/341 691/342 -f 686/333 684/331 683/332 682/341 -f 976/1067 685/329 670/322 681/313 -f 685/329 701/328 1371/327 670/322 -f 685/329 684/331 700/330 701/328 -f 684/331 686/333 671/340 700/330 -f 686/333 687/338 672/339 671/340 -f 687/338 689/336 688/337 -f 691/342 353/343 689/336 687/338 -f 976/1068 681/313 680/321 683/348 -f 683/348 680/321 678/320 682/347 -f 690/319 691/346 682/347 678/320 -f 692/310 353/309 691/346 690/319 -f 799/247 323/258 694/248 800/3 -f 694/248 1048/1143 1049/1144 693/239 -f 695/557 1378/1493 1379/1494 391/563 -f 799/247 798/2 801/260 318/259 -f 1325/1436 697/257 698/249 1048/1143 -f 889/256 352/255 698/249 697/257 -f 703/250 699/240 698/249 352/255 -f 702/236 693/239 1049/1144 1050/1145 -f 702/236 700/237 671/4 693/239 -f 702/236 704/242 701/238 700/237 -f 703/250 901/251 705/241 699/240 -f 704/242 702/236 1050/1145 1047/1142 -f 901/251 942/252 929/243 705/241 -f 942/1128 1372/1487 1369/1484 929/243 -f 4/120 1018/1112 1020/1114 5/123 -f 708/105 711/106 1034/1129 1037/1132 -f 709/99 710/100 1051/1146 1052/1147 -f 2706/3080 7/125 2717/3091 -f 2706/3080 2715/3089 1023/1117 7/125 -f 725/118 1035/1130 1036/1131 723/104 -f 1036/1131 1037/1132 713/98 723/104 -f 709/99 1052/1147 1053/1148 713/98 -f 814/95 714/91 715/92 721/94 -f 714/91 815/81 716/82 715/92 -f 717/83 720/93 715/92 716/82 -f 716/82 718/66 773/75 717/83 -f 773/75 732/72 731/74 717/83 -f 732/72 745/52 728/49 731/74 -f 815/81 774/65 718/66 716/82 -f 719/84 720/93 717/83 731/74 -f 720/93 722/86 721/94 715/92 -f 1053/1148 1054/1149 723/104 713/98 -f 1054/1149 1055/1150 725/118 723/104 -f 11/117 2707/3081 2716/3090 1041/1136 -f 2708/3082 2709/3083 345/46 726/102 -f 2709/3083 2710/3084 729/48 345/46 -f 729/48 2710/3084 2711/3085 346/50 -f 346/50 2711/3085 2712/3086 348/41 -f 730/85 719/84 727/73 724/103 -f 719/84 730/85 722/86 720/93 -f 731/74 728/49 727/73 719/84 -f 745/52 733/51 728/49 -f 745/52 754/47 742/40 733/51 -f 348/41 2712/3086 2713/3087 349/26 -f 349/26 2713/3087 2714/3088 734/14 -f 738/18 737/28 746/29 749/30 -f 298/581 293/571 738/18 749/30 -f 736/16 737/28 738/18 735/17 -f 739/27 741/34 737/28 736/16 -f 740/33 743/39 741/34 739/27 -f 742/40 754/47 743/39 740/33 -f 744/53 753/54 754/47 745/52 -f 764/62 763/55 744/53 745/52 -f 745/52 732/72 790/63 764/62 -f 732/72 773/75 771/70 790/63 -f 737/28 741/34 751/35 746/29 -f 741/34 743/39 747/38 751/35 -f 743/39 754/47 755/597 747/38 -f 749/30 762/31 748/32 298/581 -f 755/597 769/595 756/596 747/38 -f 750/37 751/35 747/38 756/596 -f 752/36 746/29 751/35 750/37 -f 756/596 757/590 758/592 750/37 -f 760/593 752/36 750/37 758/592 -f 763/55 785/56 753/54 744/53 -f 784/598 755/597 754/47 753/54 -f 784/598 782/599 769/595 755/597 -f 769/595 767/594 757/590 756/596 -f 757/590 766/589 759/591 758/592 -f 266/507 760/593 758/592 759/591 -f 761/506 232/573 760/593 266/507 -f 232/573 762/31 752/36 760/593 -f 762/31 749/30 746/29 752/36 -f 595/57 587/58 785/56 763/55 -f 763/55 764/62 789/61 595/57 -f 770/588 768/88 776/89 765/587 -f 765/587 278/689 766/589 770/588 -f 267/687 759/591 766/589 278/689 -f 757/590 767/594 770/588 766/589 -f 767/594 781/87 768/88 770/588 -f 767/594 769/595 782/599 781/87 -f 773/75 718/66 772/67 771/70 -f 718/66 774/65 775/64 772/67 -f 778/80 777/79 775/64 774/65 -f 778/80 774/65 815/81 -f 815/81 283/90 776/89 778/80 -f 776/89 768/88 777/79 778/80 -f 768/88 781/87 779/78 777/79 -f 781/87 782/599 780/76 779/78 -f 782/599 784/598 783/59 780/76 -f 784/598 753/54 785/56 783/59 -f 587/58 786/60 783/59 785/56 -f 786/60 588/77 780/76 783/59 -f 588/77 787/68 779/78 780/76 -f 787/68 775/64 777/79 779/78 -f 764/62 790/63 788/761 789/61 -f 790/63 771/70 791/71 788/761 -f 771/70 772/67 668/69 791/71 -f 772/67 775/64 787/68 668/69 -f 793/482 277/519 792/518 176/476 -f 795/516 794/520 277/519 793/482 -f 795/516 793/482 174/478 191/477 -f 797/1 800/3 671/4 796/5 -f 798/2 799/247 800/3 797/1 -f 798/2 1063/1158 1062/1157 801/260 -f 666/739 802/723 789/724 788/740 -f 664/741 803/727 802/723 666/739 -f 663/742 608/738 803/727 664/741 -f 804/1021 805/974 608/738 663/742 -f 662/1022 806/973 805/974 804/1021 -f 807/1023 611/972 806/973 662/1022 -f 807/1023 661/947 612/975 611/972 -f 614/976 902/985 903/984 -f 905/1006 926/1007 904/1024 -f 811/967 626/1025 810/995 930/989 -f 812/966 639/1026 626/1025 811/967 -f 812/966 605/970 657/1027 639/1026 -f 813/971 658/946 657/1027 605/970 -f 907/994 927/991 906/1006 -f 284/96 714/91 814/95 273/97 -f 283/90 815/81 714/91 284/96 -f 816/146 825/185 824/607 822/606 -f 818/137 819/144 817/145 873/617 -f 817/145 819/144 1266/1365 1267/1366 -f 820/613 848/3016 831/612 821/605 -f 821/605 822/606 820/613 -f 822/606 824/607 823/609 820/613 -f 824/607 826/187 847/608 823/609 -f 825/185 827/184 826/187 824/607 -f 826/211 827/1393 931/186 1288/1395 -f 826/211 1288/1395 1289/1396 -f 908/184 888/183 887/188 828/186 -f 931/186 1287/1394 1288/1395 -f 1293/1400 838/224 830/210 1294/1402 -f 1293/1401 842/666 835/678 838/3017 -f 820/613 823/609 848/611 -f 832/222 20/214 21/215 22/221 -f 847/212 826/211 1289/1396 1290/1397 -f 932/604 847/212 1290/1397 1291/1398 -f 1291/1398 1292/1399 909/349 932/604 -f 837/602 933/600 909/349 1292/1399 -f 834/604 909/349 910/350 -f 843/658 844/667 842/666 839/657 -f 842/666 1295/1404 1296/1405 839/657 -f 264/673 1277/1379 1275/1377 841/674 -f 22/675 840/665 832/676 -f 840/665 1297/1406 833/677 1284/1390 -f 840/665 1284/1390 1285/1391 -f 1295/1404 842/666 1293/1401 1294/1403 -f 844/667 936/679 835/678 842/666 -f 581/660 582/668 844/667 843/658 -f 582/668 836/680 936/679 844/667 -f 836/680 582/668 583/681 -f 845/659 2250/2507 846/663 578/662 -f 846/663 1856/671 579/670 578/662 -f 934/762 911/351 849/758 850/759 -f 831/763 848/611 934/762 850/759 -f 932/610 848/611 823/609 847/608 -f 848/611 932/610 910/350 -f 910/350 911/351 934/762 848/611 -f 567/601 854/757 849/758 911/351 -f 854/757 855/623 850/756 849/758 -f 855/623 851/622 857/621 850/756 -f 852/626 853/627 856/620 1270/1370 -f 852/626 558/630 561/629 853/627 -f 562/628 552/632 853/627 561/629 -f 555/625 855/623 854/757 554/760 -f 556/624 851/622 855/623 555/625 -f 558/630 852/626 851/622 556/624 -f 853/627 552/632 861/631 856/620 -f 863/619 858/616 856/620 861/631 -f 1270/1370 856/620 858/616 1269/1369 -f 935/755 831/759 850/756 857/621 -f 858/616 859/615 1268/1367 1269/1369 -f 863/619 864/618 859/615 858/616 -f 552/632 868/753 860/751 861/631 -f 862/749 863/619 861/631 860/751 -f 871/747 864/618 863/619 862/749 -f 874/746 873/617 864/618 871/747 -f 817/145 859/615 864/618 873/617 -f 1267/1366 1268/1368 859/615 817/145 -f 866/750 869/752 875/700 865/699 -f 869/752 867/754 792/518 875/700 -f 869/752 860/751 868/753 867/754 -f 866/750 862/749 860/751 869/752 -f 870/748 871/747 862/749 866/750 -f 872/745 874/746 871/747 870/748 -f 881/744 880/136 874/746 872/745 -f 880/136 818/137 873/617 874/746 -f 822/606 821/605 52/149 816/146 -f 876/151 1265/1364 1266/1365 819/144 -f 819/144 818/137 877/143 876/151 -f 818/137 880/136 879/135 877/143 -f 880/136 881/744 878/134 879/135 -f 881/744 882/231 62/228 878/134 -f 872/745 271/694 882/231 881/744 -f 872/745 870/748 883/696 271/694 -f 870/748 866/750 865/699 883/696 -f 884/122 1019/1113 1020/1114 712/119 -f 455/850 1080/1176 1083/1180 453/851 -f 463/862 466/876 960/1052 961/1053 -f 450/852 951/1043 953/1045 938/1030 -f 453/851 1083/1180 1084/1181 939/1031 -f 451/853 954/1046 955/1047 945/1036 -f 939/1031 1084/1181 1085/1182 945/1036 -f 941/1033 962/1054 963/1055 943/1034 -f 944/1035 456/863 464/879 534/878 -f 447/831 438/828 947/1038 949/1041 -f 950/1042 449/843 444/841 948/1039 -f 949/1040 445/845 446/844 948/1039 -f 950/1042 455/850 453/851 951/1043 -f 955/1047 943/1034 938/1030 953/1045 -f 952/1044 545/855 941/1033 954/1046 -f 951/1043 453/851 939/1031 953/1045 -f 954/1046 941/1033 943/1034 955/1047 -f 957/1049 462/842 461/837 956/1048 -f 467/875 462/842 957/1049 959/1051 -f 944/1035 463/862 961/1053 963/1055 -f 962/1054 941/1033 545/855 958/1050 -f 466/876 467/875 959/1051 960/1052 -f 450/852 938/1030 961/1053 960/1052 -f 456/863 944/1035 963/1055 962/1054 -f 458/854 2552/1502 2553/1501 457/856 -f 952/1044 458/854 457/856 -f 543/941 964/1056 548/942 967/1059 -f 964/1056 543/941 544/864 958/1050 -f 2553/1501 2554/1500 965/1057 457/856 -f 452/858 457/856 965/1057 -f 2554/1500 2556/1504 1086/1183 965/1057 -f 541/866 1074/1169 967/1059 548/942 -f 339/19 969/1061 385/244 386/246 -f 969/1061 339/19 388/22 384/7 -f 393/773 396/774 972/1063 971/1062 -f 973/1064 1188/1285 1187/1284 972/1063 -f 974/1065 1183/1280 1339/1450 1333/1444 -f 493/926 393/773 971/1062 975/1066 -f 1184/1281 1189/1286 1149/1246 975/1066 -f 683/332 684/331 685/329 976/1067 -f 205/495 193/496 979/1072 978/1071 -f 193/496 184/498 980/1073 979/1072 -f 184/498 185/499 981/1074 980/1073 -f 981/1074 185/499 187/500 982/1075 -f 187/500 194/501 983/1076 982/1075 -f 194/501 195/509 984/1077 983/1076 -f 195/509 237/584 994/1087 984/1077 -f 985/1078 200/538 199/540 1002/1095 -f 985/1078 1777/541 2567/542 986/1079 -f 986/1079 2567/542 2568/543 987/1080 -f 987/1080 2568/543 2569/544 988/1081 -f 2569/544 2570/545 989/1082 988/1081 -f 2570/545 2571/1351 1255/1354 989/1082 -f 2572/508 1216/1313 1218/1315 990/1083 -f 297/578 234/577 992/1085 991/1084 -f 234/577 238/580 993/1086 992/1085 -f 238/580 239/510 994/1087 993/1086 -f 243/436 143/434 977/1070 995/1088 -f 246/637 243/436 995/1088 996/1089 -f 254/640 246/637 996/1089 997/1090 -f 997/1090 1830/643 1070/1165 -f 257/464 258/645 1000/1093 999/1092 -f 2573/644 1834/650 1000/1093 998/1091 -f 1835/649 2574/648 1001/1094 999/1092 -f 2574/648 2575/1323 1226/1324 1001/1094 -f 1002/1095 199/540 260/654 1003/1096 -f 1004/1097 2576/651 1848/652 1003/1096 -f 289/564 295/570 1006/1100 1005/1099 -f 295/570 297/578 991/1084 1006/1100 -f 1005/1099 896/569 434/835 1076/1172 -f 261/539 260/654 199/540 1007/1101 -f 1007/1101 199/540 200/538 -f 711/106 708/105 1018/1112 1008/1102 -f 3/121 1410/127 1009/1103 1008/1102 -f 15/108 13/107 1009/1103 1010/1104 -f 1408/128 1418/138 1011/1105 1010/1104 -f 17/139 16/129 1011/1105 1012/1106 -f 1519/160 2577/161 1014/1108 1013/1107 -f 54/159 70/162 1015/1109 1013/1107 -f 77/156 17/139 1012/1106 1016/1110 -f 70/162 76/233 1017/1111 1015/1109 -f 76/233 77/156 1016/1110 1017/1111 -f 1018/1112 708/105 712/119 1020/1114 -f 1019/1113 6/124 5/123 1020/1114 -f 2577/161 1451/195 25/194 1014/1108 -f 8/115 10/126 1022/1116 1021/1115 -f 343/114 706/254 1033/1127 1021/1115 -f 1022/1116 10/126 2652/3023 2666/3039 -f 13/107 15/108 1025/1119 1024/1118 -f 710/100 709/99 1034/1129 1024/1118 -f 15/108 16/129 1026/1120 1025/1119 -f 56/176 69/227 1028/1122 1027/1121 -f 66/130 14/109 1026/1120 1029/1123 -f 69/227 74/163 1030/1124 1028/1122 -f 72/140 66/130 1029/1123 1031/1125 -f 74/163 75/155 1032/1126 1030/1124 -f 75/155 72/140 1031/1125 1032/1126 -f 706/254 387/245 707/253 1033/1127 -f 709/99 713/98 1037/1132 1034/1129 -f 1035/1130 725/118 2707/3081 2715/3089 -f 1035/1130 884/122 712/119 1036/1131 -f 712/119 708/105 1037/1132 1036/1131 -f 1027/1121 55/177 26/178 41/175 -f 1027/1121 41/175 1038/1133 -f 1038/1133 41/175 1039/1134 -f 9/113 2653/3025 2667/3040 1040/1135 -f 1/45 340/21 1045/1140 1040/1135 -f 272/110 273/97 1043/1138 1042/1137 -f 273/97 814/95 1051/1146 1043/1138 -f 706/254 343/114 1045/1140 1044/1139 -f 385/244 1370/1485 1373/1488 1046/1141 -f 386/246 385/244 1046/1141 1044/1139 -f 1048/1143 698/249 699/240 1049/1144 -f 699/240 705/241 1050/1145 1049/1144 -f 705/241 929/243 1047/1142 1050/1145 -f 814/95 721/94 1052/1147 1051/1146 -f 721/94 722/86 1053/1148 1052/1147 -f 722/86 730/85 1054/1149 1053/1148 -f 730/85 724/103 1055/1150 1054/1149 -f 724/103 2708/3082 2716/3090 1055/1150 -f 14/109 66/130 63/112 1042/1137 -f 1056/1151 1374/1489 1381/1496 1170/1267 -f 1057/1152 1375/1490 1368/1483 1058/1153 -f 1059/1154 1376/1491 1374/1489 1056/1151 -f 1059/1154 310/263 696/261 1061/1156 -f 1063/1158 798/2 797/1 1060/1155 -f 1061/1156 696/261 801/260 1062/1157 -f 1380/1495 1379/1494 1062/1157 1063/1158 -f 1371/1486 1377/1492 1060/1155 383/6 -f 334/10 335/11 389/9 1064/1159 -f 802/723 803/727 610/726 -f 1066/1161 159/457 158/456 1068/1163 -f 1067/1162 162/460 159/457 1066/1161 -f 1068/1163 158/456 253/445 1069/1164 -f 1069/1164 253/445 151/444 1256/1355 -f 161/461 162/460 1067/1162 1072/1167 -f 1830/643 2573/644 998/1091 1070/1165 -f 1070/1165 998/1091 256/642 -f 256/642 258/645 1071/1166 -f 258/645 257/464 1072/1167 1071/1166 -f 257/464 259/646 161/461 1072/1167 -f 452/858 965/1057 459/868 1073/1168 -f 459/868 1082/1178 898/867 1073/1168 -f 541/866 1073/1168 898/867 1074/1169 -f 440/830 439/829 1076/1172 1075/1170 -f 1075/1171 434/847 472/848 1077/1173 -f 1077/1173 472/848 448/849 1078/1174 -f 1080/1176 455/850 446/844 1078/1174 -f 1079/1175 471/860 533/869 1081/1177 -f 1079/1175 451/853 945/1036 1085/1182 -f 1082/1178 459/868 965/1057 1086/1183 -f 1080/1176 454/861 937/1029 1083/1180 -f 1083/1180 937/1029 940/1032 1084/1181 -f 1084/1181 940/1032 946/1037 1085/1182 -f 895/871 966/1058 1086/1183 2556/1504 -f 2650/1179 895/871 2556/1504 -f 538/870 2144/2350 898/867 1082/1178 -f 1087/1184 428/811 474/818 429/819 -f 1360/1473 1355/1468 1089/1186 1088/1185 -f 1089/1186 1355/1468 1362/1475 1092/1189 -f 393/773 493/926 1093/1190 1088/1185 -f 1090/1187 403/778 413/793 1091/1188 -f 1091/1188 413/793 1329/1440 1335/1446 -f 493/926 1143/1240 1150/1247 1093/1190 -f 1094/1191 392/770 417/769 1095/1192 -f 399/781 392/770 1094/1191 1096/1193 -f 1098/1195 1099/1196 1095/1192 1097/1194 -f 1096/1193 1101/1198 1152/1249 1151/1248 -f 407/795 1328/1439 1336/1447 1097/1194 -f 400/788 406/792 1327/1438 1337/1448 -f 405/794 414/772 1099/1196 1098/1195 -f 1099/1196 414/772 394/771 1100/1197 -f 1100/1197 394/771 490/780 1101/1198 -f 1101/1198 490/780 1141/1238 1152/1249 -f 497/925 504/935 1103/1200 1102/1199 -f 417/769 510/768 1115/1212 -f 1115/1212 510/768 511/887 1114/1211 -f 399/781 512/886 1105/1202 392/770 -f 512/886 515/883 1106/1203 1105/1202 -f 515/883 519/893 518/888 1106/1203 -f 522/907 486/919 1107/1204 1108/1205 -f 1109/1206 519/893 1146/1243 1153/1250 -f 1109/1206 521/894 551/895 1110/1207 -f 477/890 476/889 1113/1210 1116/1213 -f 1116/1213 1113/1210 511/887 1111/1208 -f 1111/1208 511/887 510/768 1112/1209 -f 427/816 478/817 426/810 1117/1214 -f 426/810 418/801 1118/1215 1117/1214 -f 1118/1215 418/801 419/796 1119/1216 -f 525/896 521/894 1147/1244 1154/1251 -f 523/908 508/918 1121/1218 1120/1217 -f 1124/1221 1125/1222 1122/1219 524/909 -f 516/898 517/897 525/896 1123/1220 -f 525/896 1154/1251 1155/1252 1123/1220 -f 1121/1218 485/917 1125/1222 1120/1217 -f 1124/1221 1120/1217 1125/1222 -f 526/899 1126/1223 481/901 480/900 -f 526/899 1148/1245 1156/1253 1126/1223 -f 524/909 1122/1219 1128/1225 1127/1224 -f 1126/1223 1156/1253 1157/1254 527/902 -f 1127/1224 1128/1225 507/916 1129/1226 -f 1136/1233 527/902 1135/1232 -f 1130/1227 1135/1232 1160/1257 1158/1255 -f 1134/1231 1133/1230 1131/1228 531/910 -f 1130/1227 1158/1255 1159/1256 530/906 -f 1135/1232 527/902 1157/1254 1160/1257 -f 1129/1226 507/916 1133/1230 1134/1231 -f 528/905 1136/1233 1135/1232 1130/1227 -f 528/905 2210/2451 483/904 1136/1233 -f 1132/1229 530/906 1138/1235 1137/1234 -f 530/906 1159/1256 1161/1258 1138/1235 -f 399/781 1096/1193 1151/1248 1140/1237 -f 1141/1238 490/780 1357/1470 1363/1476 -f 1168/1265 328/282 1177/1274 1179/1276 -f 1143/1240 493/926 975/1066 1149/1246 -f 512/886 399/781 1140/1237 1144/1241 -f 513/885 514/884 1145/1242 1144/1241 -f 514/884 522/907 1146/1243 1145/1242 -f 1108/1205 523/908 1147/1244 1153/1250 -f 1148/1245 526/899 1123/1220 1155/1252 -f 532/912 1209/1306 1210/1307 -f 1142/1239 494/928 1185/1282 1189/1286 -f 1143/1240 496/932 498/933 1150/1247 -f 1102/1199 489/924 1151/1248 1152/1249 -f 497/925 1102/1199 1152/1249 1141/1238 -f 522/907 1108/1205 1153/1250 1146/1243 -f 523/908 1120/1217 1154/1251 1147/1244 -f 1154/1251 1120/1217 1124/1221 1155/1252 -f 1148/1245 524/909 1127/1224 1156/1253 -f 1156/1253 1127/1224 1129/1226 1157/1254 -f 1160/1257 1134/1231 531/910 1158/1255 -f 1158/1255 531/910 484/914 1159/1256 -f 1157/1254 1129/1226 1134/1231 1160/1257 -f 1159/1256 484/914 1139/1236 1161/1258 -f 228/275 226/266 1167/1264 1162/1259 -f 80/273 79/272 1163/1260 1162/1259 -f 1163/1260 79/272 328/282 1168/1265 -f 1057/1152 224/267 1166/1263 1170/1267 -f 309/548 308/549 1165/1262 1164/1261 -f 224/267 82/268 1167/1264 1166/1263 -f 433/834 223/547 1165/1262 1169/1266 -f 225/546 1375/1490 1381/1496 1164/1261 -f 1169/1266 432/551 299/552 443/836 -f 491/775 398/776 1172/1269 1171/1268 -f 398/776 397/777 1173/1270 1172/1269 -f 397/777 1326/1437 1338/1449 1173/1270 -f 897/285 395/286 1174/1271 1175/1272 -f 327/291 326/292 1176/1273 1171/1268 -f 326/292 1168/1265 1179/1276 1176/1273 -f 494/928 1142/1239 1179/1276 1177/1274 -f 328/282 85/283 1181/1278 -f 85/283 1942/2100 329/293 1181/1278 -f 971/1062 972/1063 1187/1284 1182/1279 -f 975/1066 971/1062 1182/1279 1184/1281 -f 494/928 499/929 1186/1283 1185/1282 -f 1188/1285 397/777 398/776 1187/1284 -f 1183/1280 411/767 1326/1437 1339/1450 -f 492/927 1142/1239 1189/1286 1184/1281 -f 495/930 1149/1246 1189/1286 1185/1282 -f 499/929 1202/1299 1203/1300 1186/1283 -f 1090/1187 1361/1474 1364/1477 1190/1287 -f 1180/1277 1195/1292 1191/1288 917/294 -f 1202/1299 499/929 1178/1275 1201/1298 -f 1204/1301 501/931 1186/1283 1203/1300 -f 920/297 2615/2952 1194/1291 1193/1290 -f 351/295 2177/2401 500/296 1200/1297 -f 920/297 1193/1290 1196/1293 1197/1294 -f 1196/1293 1192/1289 1198/1295 1197/1294 -f 1192/1289 1195/1292 1180/1277 1198/1295 -f 1197/1294 1200/1297 1199/1296 920/297 -f 351/295 1200/1297 1197/1294 1198/1295 -f 329/293 1191/1288 1195/1292 1201/1298 -f 1201/1298 1195/1292 1192/1289 1202/1299 -f 1192/1289 1196/1293 1203/1300 1202/1299 -f 1203/1300 1196/1293 1193/1290 1204/1301 -f 1204/1301 1193/1290 1194/1291 1205/1302 -f 417/769 1115/1212 1206/1303 407/795 -f 1206/1303 1115/1212 1114/1211 1207/1304 -f 1207/1304 1114/1211 421/807 1208/1305 -f 420/808 475/809 1104/1201 421/807 -f 1208/1305 421/807 1104/1201 -f 1138/1235 1209/1306 529/911 1137/1234 -f 1138/1235 1161/1258 1210/1307 1209/1306 -f 1161/1258 1139/1236 1211/1308 1210/1307 -f 154/451 135/425 366/453 378/764 -f 365/452 377/522 155/448 1212/1309 -f 167/465 181/470 1214/1311 1213/1310 -f 1215/1312 180/486 168/471 1214/1311 -f 1217/1314 204/513 990/1083 1218/1315 -f 1215/1312 211/487 204/513 1217/1314 -f 1216/1313 205/495 978/1071 1218/1315 -f 155/448 167/465 1213/1310 1212/1309 -f 1219/1316 151/444 253/445 1220/1317 -f 1220/1317 253/445 158/456 1221/1318 -f 1221/1318 158/456 159/457 1224/1321 -f 1222/1319 162/460 161/461 1223/1320 -f 1224/1321 159/457 162/460 1222/1319 -f 1225/1322 891/647 918/463 1223/1320 -f 1225/1322 259/646 1001/1094 1226/1324 -f 2575/1323 2576/1069 1004/1098 1226/1324 -f 156/446 152/449 153/447 1219/1316 -f 116/403 110/404 1228/1326 1227/1325 -f 110/404 119/384 1229/1327 1228/1326 -f 124/405 116/403 1227/1325 1230/1328 -f 1236/1334 1237/1335 1231/1329 1230/1328 -f 1237/1335 1238/1336 1232/1330 1231/1329 -f 1238/1336 1241/1339 1233/1331 1232/1330 -f 1241/1339 1242/1340 1234/1332 1233/1331 -f 1227/1325 1228/1326 1239/1337 1235/1333 -f 1228/1326 1229/1327 1240/1338 1239/1337 -f 1240/1338 1305/1415 101/375 106/383 -f 1230/1328 1227/1325 1235/1333 1236/1334 -f 123/392 133/393 1237/1335 1236/1334 -f 133/393 138/419 1238/1336 1237/1335 -f 138/419 148/429 1241/1339 1238/1336 -f 148/429 373/437 1242/1340 1241/1339 -f 373/437 149/443 1243/1341 1242/1340 -f 108/382 107/401 1245/1343 1244/1342 -f 107/401 114/394 1246/1344 1245/1343 -f 114/394 132/391 1247/1345 1246/1344 -f 132/391 140/418 1248/1346 1247/1345 -f 140/418 147/430 1249/1347 1248/1346 -f 147/430 146/441 1250/1348 1249/1347 -f 166/469 182/488 1252/1350 1251/1349 -f 1252/1350 182/488 220/531 1254/1353 -f 203/514 989/1082 1255/1354 1253/1352 -f 1254/1353 220/531 203/514 1253/1352 -f 2571/1351 2572/508 990/1083 1255/1354 -f 167/465 155/448 156/446 1251/1349 -f 373/437 148/429 1250/1348 150/442 -f 1256/1355 150/442 1250/1348 -f 117/406 118/407 1258/1357 1257/1356 -f 118/407 553/408 1259/1358 1258/1357 -f 553/408 120/385 1260/1359 1259/1358 -f 124/405 126/410 1261/1360 1257/1356 -f 126/410 127/413 1262/1361 1261/1360 -f 127/413 137/420 1263/1362 1262/1361 -f 1263/1362 137/420 371/427 1264/1363 -f 52/149 1265/1364 44/150 47/148 -f 1265/1364 52/149 821/605 1266/1365 -f 1266/1365 821/605 831/612 1267/1366 -f 1267/1366 831/612 1268/1368 -f 1268/1367 831/614 935/755 1269/1369 -f 1269/1369 935/755 857/621 1270/1370 -f 1270/1370 857/621 851/622 852/626 -f 1272/1373 886/218 363/204 1271/1372 -f 363/204 886/218 362/207 914/205 -f 1446/1371 1382/1505 1271/1374 915/202 -f 2719/1372 1382/1506 2718/1497 -f 2720/1372 2721/1497 1273/219 -f 1271/1372 1273/219 1272/1373 -f 1274/1375 18/220 841/226 1275/1376 -f 1276/1378 262/664 840/665 1277/1379 -f 1277/1379 840/665 22/675 1275/1377 -f 263/672 1854/2006 845/659 1276/1378 -f 23/216 886/206 1278/1380 1274/1375 -f 31/181 1279/1381 29/191 24/190 -f 24/190 29/191 1280/1383 -f 29/191 1279/1381 33/196 914/205 -f 1280/1382 29/191 914/205 -f 19/209 24/190 1280/1384 1281/1385 -f 1280/1384 914/208 362/207 1281/1385 -f 19/209 1281/1385 20/214 1282/1386 -f 1282/1386 20/214 832/222 1283/1387 -f 1285/1391 1283/1388 832/676 840/665 -f 1283/1387 1284/1389 829/213 1282/1386 -f 1284/1390 1283/1388 1285/1391 -f 829/213 1284/1389 833/223 1286/1392 -f 1286/1392 830/210 1288/1395 887/188 -f 1287/1394 887/188 1288/1395 -f 1288/1395 830/210 1289/1396 -f 830/210 838/224 1290/1397 1289/1396 -f 838/224 835/603 1291/1398 1290/1397 -f 1291/1398 835/603 1292/1399 -f 835/603 936/225 837/602 1292/1399 -f 837/602 936/225 836/363 569/356 -f 910/350 909/349 933/600 911/351 -f 830/210 1286/1392 833/223 1294/1402 -f 1294/1403 833/677 1297/1406 1295/1404 -f 1295/1404 1297/1406 1298/1407 1296/1405 -f 1296/1405 1298/1407 845/659 -f 1297/1406 840/665 262/664 1298/1407 -f 262/664 1276/1378 845/659 1298/1407 -f 106/383 101/375 1299/1408 1244/1342 -f 101/375 100/371 1300/1409 1299/1408 -f 1300/1409 100/371 572/370 96/369 -f 577/374 572/370 1301/1410 1302/1411 -f 570/682 584/669 1303/1413 1302/1412 -f 584/669 580/661 1304/1414 1303/1413 -f 1312/1422 1313/1423 98/372 1310/1420 -f 1229/1327 1307/1417 1305/1415 1240/1338 -f 1307/1417 1308/1418 1306/1416 1305/1415 -f 1306/1416 1308/1418 1301/1410 -f 119/384 99/373 1307/1417 1229/1327 -f 99/373 98/372 1308/1418 1307/1417 -f 1308/1418 98/372 1313/1423 1301/1410 -f 120/385 565/357 1309/1419 1260/1359 -f 565/357 97/359 1310/1420 1309/1419 -f 97/359 571/360 1311/1421 1310/1420 -f 1312/1422 1310/1420 1311/1421 -f 1311/1421 571/360 1312/1422 -f 571/360 1301/1410 1313/1423 1312/1422 -f 104/365 102/366 94/367 1314/1424 -f 1314/1424 94/367 92/379 1315/1425 -f 1315/1425 92/379 91/389 1316/1426 -f 1319/1429 1596/398 1318/1428 -f 143/434 105/397 1317/1427 977/1070 -f 1317/1427 105/397 1316/1426 1318/1428 -f 1318/1428 1316/1426 91/389 1319/1429 -f 91/389 93/378 1320/1430 1319/1429 -f 93/378 576/377 1321/1431 1320/1430 -f 1321/1432 576/685 1322/1433 -f 1323/1434 315/279 316/287 1324/1435 -f 1325/1436 323/258 315/279 1323/1434 -f 1324/1435 316/287 1173/1270 1338/1449 -f 1336/1447 408/790 400/788 1337/1448 -f 406/792 1356/1469 1365/1478 1327/1438 -f 973/1064 412/779 1329/1440 1333/1444 -f 1328/1439 407/795 419/796 1330/1441 -f 1330/1441 419/796 418/801 1331/1442 -f 418/801 428/811 1332/1443 1331/1442 -f 422/813 425/812 1332/1443 1334/1445 -f 1188/1285 973/1064 1333/1444 1339/1450 -f 412/779 1092/1189 1335/1446 1329/1440 -f 1328/1439 415/797 408/790 1336/1447 -f 405/794 1098/1195 1337/1448 1327/1438 -f 1326/1437 411/767 1174/1271 1338/1449 -f 1326/1437 397/777 1188/1285 1339/1450 -f 1048/1143 694/248 323/258 1325/1436 -f 974/1065 1347/1458 1354/1467 1183/1280 -f 1343/1454 1345/1452 970/782 1342/1453 -f 921/786 410/785 1349/1460 1350/1461 -f 410/785 2643/1508 1348/1459 1349/1460 -f 1340/1451 1190/1287 1343/1454 1342/1453 -f 1190/1287 1364/1477 1366/1479 1343/1454 -f 1366/1479 1367/1480 1345/1457 1343/1454 -f 970/782 1352/1465 1351/1463 1350/1462 -f 974/1065 413/793 403/778 1347/1458 -f 403/778 1340/1451 1348/1459 1347/1458 -f 1340/1451 1342/1453 1349/1460 1348/1459 -f 1342/1453 970/782 1350/1461 1349/1460 -f 1345/1464 1351/1482 1352/1465 970/782 -f 1383/1507 2026/1498 411/767 1183/1280 -f 1354/1467 1383/1507 1183/1280 -f 1088/1185 1093/1190 1357/1470 1360/1473 -f 1361/1474 1090/1187 1091/1188 1356/1469 -f 1365/1478 1335/1446 1092/1189 1362/1475 -f 1150/1247 498/933 1358/1471 1363/1476 -f 498/933 550/936 1359/1472 1358/1471 -f 394/771 414/772 1355/1468 1360/1473 -f 1355/1468 414/772 405/794 1362/1475 -f 1093/1190 1150/1247 1363/1476 1357/1470 -f 1361/1474 404/784 1341/783 1364/1477 -f 1356/1469 1091/1188 1335/1446 1365/1478 -f 1364/1477 1341/783 1344/1455 1366/1479 -f 1344/1455 1346/1456 1367/1480 1366/1479 -f 1346/1456 2646/3002 1353/1466 1367/1480 -f 1345/1464 1367/1481 1353/806 1351/1482 -f 1376/1491 1059/1154 1061/1156 1378/1493 -f 1380/1495 1063/1158 1060/1155 1377/1492 -f 1369/1484 387/245 1046/1141 1373/1488 -f 1370/1485 385/244 969/1061 1371/1486 -f 1378/1493 1061/1156 1062/1157 1379/1494 -f 1372/1487 707/253 387/245 1369/1484 -f 1370/1485 704/242 1047/1142 1373/1488 -f 1374/1489 309/548 1164/1261 1381/1496 -f 1375/1490 225/546 227/299 1368/1483 -f 1376/1491 307/554 309/548 1374/1489 -f 1065/1160 391/563 1379/1494 1380/1495 -f 1371/1486 969/1061 384/7 1377/1492 -f 1375/1490 1057/1152 1170/1267 1381/1496 -f 1354/1467 1347/1458 1348/1459 2643/1508 -f 2026/1509 1354/1467 2643/1508 -f 2552/1502 458/854 1081/1177 2142/1503 -f 1383/1507 1354/1467 2026/1509 -f 1387/1513 2669/3042 2668/3041 1384/1510 -f 1385/1511 1389/1515 2670/3043 2668/3041 -f 1390/1516 1392/1518 1388/1514 1391/1517 -f 1391/1517 1394/1520 1393/1519 1390/1516 -f 2/1521 1395/1523 1393/1519 8/1522 -f 3/1525 4/1524 1397/1527 1396/1526 -f 1399/1529 2672/3045 2671/3044 1398/1528 -f 1400/1530 1403/1533 1402/1532 1401/1531 -f 1404/1534 1406/1536 1402/1532 1405/1535 -f 1405/1535 1407/1537 1396/1526 1404/1534 -f 1409/1539 1408/1538 1410/1540 1407/1537 -f 1400/1530 1413/1543 1412/1542 1411/1541 -f 1411/1541 1414/1544 1403/1533 1400/1530 -f 1415/1545 1417/1547 1409/1539 1416/1546 -f 1418/1548 1417/1547 1420/1550 1419/1549 -f 1422/1552 1421/1551 1424/1554 1423/1553 -f 1423/1553 1424/1554 1426/1556 1425/1555 -f 1427/1557 1428/1560 18/1559 2649/1558 -f 1431/1563 1430/1562 1429/1561 1432/1564 -f 1433/1565 1436/1568 1435/1567 1434/1566 -f 1437/1569 1434/1566 1435/1567 1438/1570 -f 1432/1564 1429/1561 1440/1572 1439/1571 -f 1441/1573 1431/1563 1432/1564 -f 1431/1563 1441/1573 1442/1574 1428/1560 -f 1444/1576 1443/1575 1434/1566 1437/1569 -f 1445/1577 1448/1580 1447/1579 1446/1578 -f 1448/1580 1445/1577 1449/1581 1450/1582 -f 1450/1582 1449/1581 1451/1583 1425/1555 -f 1425/1555 1426/1556 1452/1584 1450/1582 -f 1426/1556 1455/1587 1454/1586 1453/1585 -f 1426/1556 1453/1585 1452/1584 -f 1452/1584 1453/1585 1456/1588 1457/1589 -f 1458/1590 1456/1588 1453/1585 1459/1591 -f 1460/1592 1461/1593 1456/1588 1458/1590 -f 1462/1594 1460/1592 1458/1590 1463/1595 -f 1443/1575 1444/1576 1462/1594 1464/1596 -f 1465/1597 1443/1575 1464/1596 1466/1598 -f 1467/1599 1465/1597 1466/1598 1468/1600 -f 1457/1589 1456/1588 1461/1593 1469/1601 -f 1469/1601 1461/1593 1470/1602 1471/1603 -f 1450/1582 1452/1584 1457/1589 1448/1580 -f 1448/1580 1457/1589 1469/1601 1447/1579 -f 1471/1603 1472/1604 1447/1579 1469/1601 -f 1474/1606 1473/1605 1466/1598 1464/1596 -f 1463/1595 1474/1606 1464/1596 1462/1594 -f 1463/1595 1458/1590 1459/1591 1475/1607 -f 1477/1609 1476/1608 1459/1591 1453/1585 -f 1454/1586 1477/1609 1453/1585 -f 1476/1608 1477/1609 1479/1611 1478/1610 -f 1480/1612 1476/1608 1478/1610 1481/1613 -f 1480/1612 1481/1613 1483/1615 1482/1614 -f 1484/1616 1482/1614 1483/1615 -f 1482/1614 1484/1616 1485/1617 1486/1618 -f 1476/1608 1480/1612 1475/1607 1459/1591 -f 1486/1618 1475/1607 1480/1612 1482/1614 -f 1486/1618 1485/1617 1473/1605 1474/1606 -f 1475/1607 1486/1618 1474/1606 1463/1595 -f 1468/1600 1466/1598 1473/1605 1487/1619 -f 1487/1619 1473/1605 1485/1617 1488/1620 -f 1490/1622 1489/1621 1484/1616 1483/1615 -f 1491/1623 1490/1622 1483/1615 1492/1624 -f 1421/1551 1493/1625 1479/1611 1424/1554 -f 1481/1613 1478/1610 1494/1626 1495/1627 -f 1483/1615 1481/1613 1495/1627 1492/1624 -f 1491/1623 1492/1624 1496/1628 1497/1629 -f 1497/1629 1496/1628 1498/1630 1499/1631 -f 1499/1631 1498/1630 1500/1632 1501/1633 -f 1501/1633 1500/1632 1502/1634 1503/1635 -f 1504/1636 1502/1634 1500/1632 1505/1637 -f 1506/1638 1502/1634 1504/1636 1412/1542 -f 1507/1639 1501/1633 1503/1635 1508/1640 -f 1503/1635 1502/1634 1506/1638 1509/1641 -f 1415/1545 1414/1544 1511/1643 1510/1642 -f 1512/1644 1504/1636 1505/1637 1513/1645 -f 1505/1637 1500/1632 1498/1630 1514/1646 -f 1514/1646 1498/1630 1496/1628 1515/1647 -f 1515/1647 1496/1628 1492/1624 1495/1627 -f 1516/1648 1515/1647 1495/1627 1494/1626 -f 1493/1625 1421/1551 1518/1650 1517/1649 -f 1422/1552 1519/1651 1521/1653 1520/1652 -f 1419/1549 1420/1550 1523/1655 1522/1654 -f 1510/1642 1511/1643 1525/1657 1524/1656 -f 1513/1645 1505/1637 1514/1646 1526/1658 -f 1526/1658 1514/1646 1515/1647 1516/1648 -f 1517/1649 1518/1650 1528/1660 1527/1659 -f 1520/1652 1521/1653 1530/1662 1529/1661 -f 1522/1654 1523/1655 1529/1661 1530/1662 -f 1524/1656 1525/1657 1527/1659 1528/1660 -f 1532/1665 1531/1664 890/1663 81/1666 -f 1532/1665 81/1666 83/1667 1533/1668 -f 1533/1668 83/1667 78/1669 1534/1670 -f 1533/1668 1536/1672 1535/1671 1532/1665 -f 1535/1671 1537/1673 1539/1675 1538/1674 -f 1539/1675 1541/1677 1540/1676 1538/1674 -f 890/1663 1531/1664 1542/1678 85/1679 -f 889/1682 84/1681 1543/1680 1544/1683 -f 1543/1680 84/1681 897/1685 1545/1684 -f 1547/1687 1973/2140 1546/1686 1548/1688 -f 1546/2132 1970/2134 1549/2133 1548/3018 -f 1550/2137 1546/2132 1552/2138 1551/3019 -f 1553/1693 1550/1690 1551/1691 1554/1694 -f 1555/1695 1558/1698 1557/1697 1556/1696 -f 1561/1701 1560/1700 1559/1699 1562/1702 -f 1563/1703 1561/1701 1562/1702 1564/1704 -f 1556/1696 1557/1697 1565/1706 1596/1705 -f 1560/1700 1567/1708 1566/1707 -f 1568/1709 1567/1708 1560/1700 1561/1701 -f 1561/1701 1569/1710 1568/1709 -f 1561/1701 1563/1703 1570/1711 1569/1710 -f 1571/1712 1563/1703 1573/1714 1572/1713 -f 1576/1717 1575/1716 1574/1715 1577/1718 -f 1579/1720 1578/1719 1581/1722 1580/1721 -f 1571/1712 1572/1713 1583/1724 1582/1723 -f 1570/1711 1584/1725 1586/1727 1585/1726 -f 1569/1710 1570/1711 1585/1726 1587/1728 -f 1587/1728 1590/1731 1589/1730 1588/1729 -f 1589/1730 1592/1733 1591/1732 1588/1729 -f 1592/1733 1594/1735 1593/1734 1591/1732 -f 1595/1736 1597/1738 1596/1737 -f 1585/1726 1586/1727 1599/1740 1598/1739 -f 1587/1728 1585/1726 1598/1739 1590/1731 -f 1600/1741 1602/1743 1599/1740 1601/1742 -f 1590/1731 1598/1739 1603/1744 1604/1745 -f 1605/1746 1606/1747 1602/1743 1600/1741 -f 1600/1741 1608/1749 1607/1748 1605/1746 -f 1601/1742 1609/1750 1608/1749 1600/1741 -f 1592/1733 1589/1730 1611/1752 1610/1751 -f 1611/1752 1589/1730 1590/1731 1604/1745 -f 1604/1745 1603/1744 1612/1753 1613/1754 -f 1614/1755 1615/1756 1606/1747 1605/1746 -f 1605/1746 1607/1748 1616/1757 1614/1755 -f 1617/1758 1620/1761 1619/1760 1618/1759 -f 1621/1762 1622/1763 1620/1761 1617/1758 -f 1623/1764 1624/1765 1622/1763 1621/1762 -f 1580/1721 1581/1722 1624/1765 1623/1764 -f 1627/1768 1626/1767 1625/1766 1628/1769 -f 1594/1735 1592/1733 1610/1751 1629/1770 -f 1611/1752 1604/1745 1613/1754 1630/1771 -f 1613/1754 1612/1753 1631/1772 1632/1773 -f 1633/1774 1634/1775 1615/1756 1614/1755 -f 1635/1776 1618/1759 1637/1778 1636/1777 -f 1619/1760 1638/1779 1640/1781 1639/1780 -f 1640/1781 1641/1782 1642/1783 1639/1780 -f 1641/1782 1643/1784 1644/1785 1642/1783 -f 1645/1786 1646/1787 1636/1777 1637/1778 -f 1610/1751 1611/1752 1630/1771 1647/1788 -f 1630/1771 1613/1754 1632/1773 1648/1789 -f 1632/1773 1631/1772 1649/1790 1650/1791 -f 1651/1792 1652/1793 1634/1775 1633/1774 -f 1653/1794 1654/1795 1646/1787 1645/1786 -f 1655/1796 1658/1799 1644/1785 1657/1798 -f 1644/1785 1643/1784 1657/1798 -f 1655/1796 1657/1798 1656/1797 -f 1657/1798 1659/1800 1656/1797 -f 1659/1800 1699/1841 1660/1801 1656/1797 -f 1661/1802 1656/1797 1660/1801 1662/1803 -f 1655/1796 1656/1797 1661/1802 1663/1804 -f 1663/1804 1665/1806 1664/1805 1658/1799 -f 1655/1796 1663/1804 1658/1799 -f 1664/1805 1666/1807 1654/1795 1653/1794 -f 1667/1808 1668/1809 1652/1793 1651/1792 -f 1650/1791 1649/1790 1669/1810 1670/1811 -f 1648/1789 1632/1773 1650/1791 1671/1812 -f 1647/1788 1630/1771 1648/1789 1672/1813 -f 1629/1770 1610/1751 1647/1788 1673/1814 -f 1596/1737 1597/1738 1674/1816 144/1815 -f 1675/1817 1666/1807 1664/1805 1665/1806 -f 1671/1812 1650/1791 1670/1811 1676/1818 -f 1670/1811 1669/1810 1677/1819 1678/1820 -f 1677/1819 1668/1809 1680/1822 1679/1821 -f 1684/1826 1680/1822 1683/1825 1681/1823 -f 1681/1823 1683/1825 1682/1824 -f 1685/1827 1688/1830 1687/1829 1686/1828 -f 1684/1826 1681/1823 1689/1831 1686/1828 -f 1690/1832 1685/1827 1692/1834 1691/1833 -f 1693/1835 1692/1834 1689/1831 1694/1836 -f 1695/1837 1698/1840 1697/1839 1696/1838 -f 1695/1837 1660/1801 1699/1841 1700/1842 -f 1698/1840 1695/1837 1700/1842 1701/1843 -f 1688/1830 1685/1827 1703/1845 1702/1844 -f 1688/1830 1704/1846 1705/1847 1687/1829 -f 1704/1846 1707/1849 1706/1848 1705/1847 -f 1708/1850 1678/1820 1710/1852 1709/1851 -f 1711/1853 1708/1850 1709/1851 1712/1854 -f 1713/1855 1711/1853 1712/1854 1714/1856 -f 1715/1857 1718/1860 1717/1859 1716/1858 -f 1719/1861 1699/1841 1659/1800 -f 1720/1862 1722/1864 1703/1845 1721/1863 -f 1701/1843 1700/1842 1724/1866 1723/1865 -f 1724/1866 1700/1842 1699/1841 1725/1867 -f 1726/1868 1725/1867 1699/1841 1719/1861 -f 1727/1869 1726/1868 1719/1861 1728/1870 -f 1727/1869 1728/1870 1729/1871 1730/1872 -f 1733/1875 1732/1874 1731/1873 1734/1876 -f 1732/1874 1733/1875 1735/1877 1730/1872 -f 1736/1878 1732/1874 1730/1872 1729/1871 -f 1737/1879 1727/1869 1730/1872 1735/1877 -f 1726/1868 1727/1869 1737/1879 1738/1880 -f 1725/1867 1726/1868 1738/1880 1739/1881 -f 1725/1867 1739/1881 1740/1882 1724/1866 -f 1741/1883 1720/1862 1723/1865 1742/1884 -f 1720/1862 1741/1883 1743/1885 1722/1864 -f 1745/1887 1702/1844 1744/1886 1746/1888 -f 1747/1889 1737/1879 1735/1877 1748/1890 -f 1748/1890 1735/1877 1733/1875 1749/1891 -f 1750/1892 1753/1895 1752/1894 1751/1893 -f 1754/1896 1755/1897 1753/1895 1750/1892 -f 1754/1896 1747/1889 1756/1898 1755/1897 -f 1747/1889 1748/1890 1757/1899 1756/1898 -f 1748/1890 1749/1891 1758/1900 1757/1899 -f 1749/1891 1760/1902 1759/1901 1758/1900 -f 1760/1902 1749/1891 1733/1875 1734/1876 -f 1734/1876 1731/1873 1761/1903 1762/1904 -f 1763/1905 1761/1903 1731/1873 1764/1906 -f 1761/1903 1763/1905 1765/1907 1766/1908 -f 1767/1909 1765/1907 1763/1905 1768/1910 -f 1760/1902 1769/1911 1770/1912 1759/1901 -f 1769/1911 1760/1902 1734/1876 1762/1904 -f 1718/1860 1715/1857 1771/1913 1772/1914 -f 1772/1914 1771/1913 1774/1916 1773/1915 -f 1775/1917 1773/1915 1774/1916 1776/1918 -f 1777/1919 1780/1922 1779/1921 1778/1920 -f 1775/1917 1781/1923 1782/1924 1778/1920 -f 1781/1923 1783/1925 1784/1926 1782/1924 -f 1783/1925 1785/1927 1786/1928 1784/1926 -f 1785/1927 1787/1929 1788/1930 1786/1928 -f 1789/1931 1792/1934 1791/1933 1790/1932 -f 1751/1893 1752/1894 1794/1936 1793/1935 -f 1775/1917 1776/1918 1781/1923 -f 1781/1923 1776/1918 1795/1937 1783/1925 -f 1783/1925 1795/1937 1796/1938 1785/1927 -f 1785/1927 1796/1938 1797/1939 1787/1929 -f 1741/1883 1789/1931 1790/1932 1743/1885 -f 1740/1882 1751/1893 1793/1935 1742/1884 -f 1751/1893 1740/1882 1739/1881 1750/1892 -f 1750/1892 1739/1881 1738/1880 1754/1896 -f 1754/1896 1738/1880 1737/1879 1747/1889 -f 1795/1937 1776/1918 1774/1916 1798/1940 -f 1688/1830 1702/1844 1745/1887 1704/1846 -f 1707/1849 1704/1846 1745/1887 1799/1941 -f 1707/1849 1715/1857 1716/1858 1706/1848 -f 1799/1941 1771/1913 1715/1857 1707/1849 -f 1774/1916 1771/1913 1799/1941 1798/1940 -f 1796/1938 1795/1937 1798/1940 1746/1888 -f 1797/1939 1796/1938 1746/1888 1744/1886 -f 1799/1941 1745/1887 1746/1888 1798/1940 -f 86/1942 1801/1945 1800/1944 227/1943 -f 1802/1946 1805/1949 1804/1948 1803/1947 -f 1800/1944 1801/1945 1807/1951 1806/1950 -f 1534/1670 78/1669 1058/1953 1808/1952 -f 1809/1954 1536/1672 1805/1949 1802/1946 -f 1762/1904 1761/1903 1766/1908 1810/1955 -f 1766/1908 1765/1907 1811/1956 1812/1957 -f 1812/1957 1811/1956 1813/1958 1814/1959 -f 1815/1960 1812/1957 1814/1959 1816/1961 -f 1817/1962 1815/1960 1816/1961 1818/1963 -f 1819/1965 356/1964 236/1967 1820/1966 -f 1815/1960 1817/1962 1821/1968 1810/1955 -f 235/1969 1822/1970 1820/1966 236/1967 -f 237/1971 1770/1912 1822/1970 235/1969 -f 1810/1955 1821/1968 1769/1911 1762/1904 -f 1812/1957 1815/1960 1810/1955 1766/1908 -f 144/1815 1674/1816 1823/1973 247/1972 -f 1673/1814 1647/1788 1672/1813 1824/1974 -f 1672/1813 1648/1789 1671/1812 1825/1975 -f 247/1972 1823/1973 1827/1977 1826/1976 -f 1824/1974 1672/1813 1825/1975 1828/1978 -f 1825/1975 1671/1812 1676/1818 1829/1979 -f 1676/1818 1670/1811 1678/1820 1708/1850 -f 1678/1820 1677/1819 1679/1821 1710/1852 -f 1826/1976 1827/1977 1831/1981 1830/1980 -f 1828/1978 1825/1975 1829/1979 1832/1982 -f 1829/1979 1676/1818 1708/1850 1711/1853 -f 1832/1982 1829/1979 1711/1853 1713/1855 -f 1832/1982 1833/1983 1831/1981 1828/1978 -f 1834/1984 1837/1987 1836/1986 1835/1985 -f 1838/1988 1837/1987 1839/1989 1832/1982 -f 1840/1990 1842/1992 1836/1986 1841/1991 -f 1840/1990 1844/1994 1717/1859 1843/1993 -f 1845/1995 1847/1997 1846/1996 1843/1993 -f 1780/1922 1848/1998 1849/1999 1779/1921 -f 1850/2000 1849/1999 1847/2001 1845/1995 -f 1850/2000 1845/1995 1718/1860 1772/1914 -f 1851/2003 2256/2513 845/2002 1852/2004 -f 263/2008 264/2007 1855/2009 1854/2006 -f 1558/2012 1555/2011 1856/2010 1857/2013 -f 1858/2014 1767/1909 1768/1910 1859/2015 -f 1860/2016 1768/1910 1763/1905 1764/1906 -f 1859/2015 1768/1910 1860/2016 1861/2017 -f 1862/2018 1859/2015 1861/2017 1863/2019 -f 1862/2018 1863/2019 1864/2020 1865/2021 -f 1866/2022 1864/2020 1863/2019 1867/2023 -f 1864/2020 1866/2022 1868/2024 1869/2025 -f 1870/2026 1868/2024 1866/2022 1871/2027 -f 1508/1640 1868/2024 1870/2026 1507/1639 -f 1508/1640 1503/1635 1509/1641 1872/2028 -f 1509/1641 1506/1638 1873/2029 1874/2030 -f 1401/1531 1875/2031 1413/1543 1400/1530 -f 1871/2027 1866/2022 1867/2023 1876/2032 -f 1877/2033 1867/2023 1863/2019 1861/2017 -f 1878/2034 1877/2033 1861/2017 1860/2016 -f 1876/2032 1867/2023 1877/2033 1879/2035 -f 1879/2035 1877/2033 1878/2034 1880/2036 -f 1865/2021 1864/2020 1869/2025 1881/2037 -f 1872/2028 1869/2025 1868/2024 1508/1640 -f 1872/2028 1509/1641 1874/2030 1882/2038 -f 1869/2025 1872/2028 1882/2038 1881/2037 -f 1661/1802 1884/2040 1883/2039 1663/1804 -f 1885/2041 1888/2044 1887/2043 1886/2042 -f 1889/2045 1886/2042 1887/2043 1890/2046 -f 1892/2048 2686/3060 2685/3059 1891/2047 -f 1894/2050 2687/3061 2685/3059 1889/2045 -f 1894/2050 1889/2045 1890/2046 1895/2051 -f 1890/2046 1887/2043 1896/2052 1897/2053 -f 1896/2052 1887/2043 1888/2044 1898/2054 -f 1899/2056 896/2055 357/2058 1900/2057 -f 356/1964 1819/1965 1900/2057 357/2058 -f 1896/2052 1898/2054 1818/1963 1816/1961 -f 1897/2053 1896/2052 1816/1961 1814/1959 -f 1893/2049 2674/3047 2673/3046 1891/2047 -f 1903/2061 2675/3048 2674/3047 1893/2049 -f 1894/2050 1905/2063 2688/3062 2687/3061 -f 1905/2063 1907/2065 2689/3063 2688/3062 -f 1910/2068 2677/3050 2676/3049 1908/2066 -f 1904/2062 2675/3048 2677/3050 1910/2068 -f 1911/2069 1902/2060 1904/2062 1912/2070 -f 1901/2059 1902/2060 1911/2069 1913/2071 -f 1913/2071 1911/2069 1914/2072 1915/2073 -f 1915/2073 1914/2072 1916/2074 1917/2075 -f 1918/2076 1802/1946 1803/1947 1919/2077 -f 1802/1946 1918/2076 1920/2078 1809/1954 -f 1809/1954 1920/2078 1921/2079 1537/1673 -f 1916/2074 1924/2082 1923/2081 1922/2080 -f 1918/2076 1926/2084 1925/2083 1920/2078 -f 1920/2078 1925/2083 1927/2085 1921/2079 -f 1921/2079 1927/2085 1928/2086 1929/2087 -f 1930/2088 1928/2086 1927/2085 1931/2089 -f 1928/2086 1930/2088 1932/2090 1933/2091 -f 1543/1680 1545/1684 1935/2093 1934/2092 -f 1929/2087 1928/2086 1933/2091 1936/2094 -f 1937/2095 1925/2083 1926/2084 1938/2096 -f 1925/2083 1937/2095 1931/2089 1927/2085 -f 1931/2089 1939/2097 1930/2088 -f 1544/1683 1543/1680 1934/2092 1940/2098 -f 1939/2097 1931/2089 1937/2095 1941/2099 -f 1537/1673 1921/2079 1929/2087 1539/1675 -f 1539/1675 1929/2087 1936/2094 1541/1677 -f 1942/2100 1542/1678 1944/2102 1943/2101 -f 329/2103 1942/2100 1943/2101 1945/2104 -f 1946/2107 351/2106 917/2105 1947/2108 -f 1949/2110 1948/2109 1387/1513 1384/1510 -f 1950/2111 1387/1513 1948/2109 1951/2112 -f 1952/2113 1950/2111 1951/2112 1953/2114 -f 1954/2115 1952/2113 1953/2114 1955/2116 -f 1908/2066 1954/2115 1955/2116 1956/2117 -f 1910/2068 1908/2066 1956/2117 1957/2118 -f 1904/2062 1910/2068 1957/2118 1912/2070 -f 1911/2069 1912/2070 1958/2119 1914/2072 -f 1949/2110 1392/1518 1960/2121 1959/2120 -f 1949/2110 1959/2120 1961/2122 1948/2109 -f 1948/2109 1961/2122 1962/2123 1951/2112 -f 1951/2112 1962/2123 1963/2124 1953/2114 -f 1955/2116 1953/2114 1963/2124 1964/2125 -f 1956/2117 1966/2127 1965/2126 1957/2118 -f 1957/2118 1965/2126 1958/2119 1912/2070 -f 1387/1513 1950/2111 2678/3051 2669/3042 -f 1950/2111 1952/2113 2679/3052 2678/3051 -f 1952/2113 1954/2115 2680/3053 2679/3052 -f 1954/2115 1908/2066 2676/3049 2680/3053 -f 1465/1597 1433/1565 1434/1566 1443/1575 -f 1546/2132 1550/2137 1971/2135 1970/2134 -f 1553/2136 1970/2134 1971/2135 1550/2137 -f 1547/1687 1548/1688 1972/2139 1973/2140 -f 1973/2140 1551/1691 1552/1692 1546/1686 -f 1551/1691 1973/2140 1972/2139 1554/1694 -f 1691/1833 1975/2142 1974/2141 1697/1839 -f 1976/2143 1662/1803 1696/1838 1977/2144 -f 1662/1803 1976/2143 1884/2040 1661/1802 -f 1665/1806 1663/1804 1883/2039 1978/2145 -f 1681/1823 1979/2146 1694/1836 1689/1831 -f 1980/2147 1982/2149 1979/2146 1981/2148 -f 1979/2146 1681/1823 1981/2148 -f 1983/2150 1982/2149 1980/2147 1675/1817 -f 1983/2150 1675/1817 1665/1806 1978/2145 -f 1980/2147 1981/2148 1984/2151 1675/1817 -f 1984/2151 1666/1807 1675/1817 -f 1974/2141 1977/2144 1696/1838 1697/1839 -f 1693/1835 1975/2142 1691/1833 1692/1834 -f 1986/2153 1985/2152 1988/2155 1987/2154 -f 1990/2157 1989/2156 1992/2159 1991/2158 -f 1993/2160 1996/2163 1995/2162 1994/2161 -f 1998/2165 1997/2164 2000/2167 1999/2166 -f 2001/2168 2003/2170 1960/2121 2002/2169 -f 1963/2124 1962/2123 1985/2152 1986/2153 -f 1986/2153 1966/2127 1964/2125 -f 2004/2171 1965/2126 1966/2127 1986/2153 -f 1965/2126 2004/2171 1924/2082 1958/2119 -f 1914/2072 1958/2119 1924/2082 1916/2074 -f 2005/2172 2185/2415 2007/2174 2006/2173 -f 2008/2175 2011/2178 2010/2177 2009/2176 -f 2013/2180 2012/2179 2015/2182 2014/2181 -f 2017/2184 2016/2183 2019/2186 2018/2185 -f 2020/2187 1936/2094 1933/2091 2021/2188 -f 2021/2188 1933/2091 1932/2090 2022/2189 -f 1545/1684 2024/2191 2023/2190 1935/2093 -f 2025/2192 2024/2191 1175/2194 2026/2193 -f 2027/2195 2028/2196 2014/2181 2015/2182 -f 2027/2195 2015/2182 2030/2198 2029/2197 -f 2032/2200 2031/2199 2008/2175 2009/2176 -f 2033/2201 2036/2204 2035/2203 2034/2202 -f 404/2207 401/2206 2037/2205 2038/2208 -f 402/2210 2039/2209 2037/2205 401/2206 -f 2040/2211 2043/2214 2042/2213 2041/2212 -f 404/2207 2038/2208 2045/2216 2044/2215 -f 2047/2218 2046/2217 2049/2220 2048/2219 -f 409/2222 2050/2221 2039/2209 402/2210 -f 2052/2224 2051/2223 2054/2226 2053/2225 -f 924/2228 1351/2227 2055/2230 921/2229 -f 2056/2231 2059/2234 2058/2233 2057/2232 -f 2060/2235 2006/2173 2010/2177 2047/2218 -f 2060/2235 2595/2922 2062/2237 2061/2236 -f 2050/2221 2065/2240 2064/2239 2063/2238 -f 2065/2240 2050/2221 409/2222 893/2241 -f 2061/2236 2062/2237 2067/2243 2066/2242 -f 2065/2240 2069/2245 2068/2244 2064/2239 -f 893/2241 892/2246 2069/2245 2065/2240 -f 892/2246 473/2248 2070/2247 2069/2245 -f 476/2251 2072/2250 2071/2249 420/2252 -f 475/2253 2075/2257 2074/2256 427/2254 -f 2074/2256 2073/2255 427/2254 -f 2074/2256 2066/2242 2067/2243 2073/2255 -f 2076/2258 2078/2260 2077/2259 -f 2068/2244 2069/2245 2070/2247 2079/2261 -f 2080/2262 2070/2247 473/2248 424/2263 -f 2080/2262 424/2263 423/2264 2081/2265 -f 2078/2260 2079/2261 2083/2267 2082/2266 -f 2078/2260 2084/2269 478/2268 -f 2077/2259 2078/2260 478/2268 -f 899/2271 429/2270 2082/2266 2081/2265 -f 2081/2265 2082/2266 2083/2267 2080/2262 -f 2086/2274 430/2273 2085/2272 2087/2275 -f 431/2276 430/2273 2086/2274 2088/2277 -f 2089/2278 2088/2277 2086/2274 2090/2279 -f 1915/2073 1807/1951 2089/2278 1913/2071 -f 86/1942 431/2276 2088/2277 1801/1945 -f 2090/2279 2681/3054 2673/3046 1901/2059 -f 2087/2275 2090/2279 2086/2274 -f 2092/2281 2683/3057 2682/3055 2091/2280 -f 2093/2282 2096/2285 2095/2284 2094/2283 -f 2096/2285 2093/2282 1885/2041 2690/3064 -f 2092/2281 2096/2285 2690/3064 -f 434/2286 2098/2288 2097/2287 -f 1888/2044 1885/2041 2098/2288 1899/2056 -f 2092/2281 2690/3064 2686/3060 1892/2048 -f 2087/2275 2683/3057 2681/3054 2090/2279 -f 2099/2289 2085/2292 470/2291 460/2290 -f 2682/3056 2684/3058 2100/2294 2091/2293 -f 2101/2295 2091/2293 2100/2294 2102/2296 -f 2103/2297 2101/2295 2102/2296 2104/2298 -f 2106/2300 2105/2299 2108/2302 2107/2301 -f 2101/2295 2108/2302 2095/2303 2091/2293 -f 2093/2304 2094/2307 2109/2306 2097/2305 -f 2094/2307 2105/2299 2110/2308 2109/2306 -f 454/2309 448/2311 2110/2308 2111/2310 -f 2103/2297 2113/2313 2112/2312 2107/2301 -f 2115/2315 2114/2314 2117/2317 2116/2316 -f 2119/2319 2118/2318 2121/2321 2120/2320 -f 2122/2322 2120/2320 2124/2324 2123/2323 -f 2123/2323 2126/2326 2125/2325 2122/2322 -f 2118/2318 2119/2319 2128/2328 2127/2327 -f 471/2329 946/2331 2129/2330 2127/2327 -f 2131/2333 2130/2332 2133/2335 2132/2334 -f 2134/2336 2137/2339 2136/2338 2135/2337 -f 2139/2343 2140/2344 2125/2325 2126/2326 -f 2723/2348 2128/2328 2722/2347 -f 2724/2348 2725/2347 2650/2346 -f 2141/2345 2726/2348 2727/2346 -f 538/2352 966/2351 2145/2353 2144/2350 -f 2146/2355 2099/2289 549/2354 469/2356 -f 2146/2355 469/2356 468/2357 2147/2358 -f 2103/2297 2104/2298 2148/2359 2113/2313 -f 535/2362 534/2863 2150/2361 2149/2360 -f 464/2363 465/2364 2134/2336 2135/2337 -f 2151/2365 536/2366 535/2362 2149/2360 -f 2151/2365 2147/2358 468/2357 536/2366 -f 2152/2367 2153/2370 900/2369 506/2368 -f 2154/2371 2152/2367 506/2368 505/2372 -f 2155/2373 2152/2367 2154/2371 2156/2374 -f 2157/2375 2160/2378 2159/2377 2158/2376 -f 2162/2380 2161/2379 2016/2183 2017/2184 -f 2161/2379 2163/2381 2020/2187 2016/2183 -f 2163/2381 2161/2379 2165/2383 2164/2382 -f 2166/2384 2167/2385 1943/2101 1944/2102 -f 2169/2387 2168/2386 2171/2389 2170/2388 -f 2172/2390 2168/2386 2174/2392 2173/2391 -f 2171/2389 2168/2386 2172/2390 503/2393 -f 505/2372 1103/2395 2175/2394 2154/2371 -f 504/2396 1359/2397 2160/2378 2157/2375 -f 2172/2390 2176/2399 550/2398 503/2393 -f 502/2402 1205/2404 2178/2403 2171/2389 -f 508/2405 1107/2408 2180/2407 2179/2406 -f 2181/2411 486/2410 509/2409 2182/2412 -f 2182/2412 509/2409 900/2369 2153/2370 -f 2152/2367 2155/2373 2183/2413 2153/2370 -f 2184/2414 2007/2174 2185/2415 -f 2071/2249 2072/2250 2187/2417 2186/2416 -f 2185/2415 2189/2419 2188/2418 2184/2414 -f 2191/2421 2190/2420 2192/2422 2183/2413 -f 2190/2420 2193/2423 2194/2424 2192/2422 -f 2195/2425 2196/2426 2188/2418 2189/2419 -f 2198/2428 2197/2427 481/2430 482/2429 -f 516/2432 480/2431 2200/2434 2199/2433 -f 551/2435 517/2438 2202/2437 2201/2436 -f 520/2439 1110/2441 2203/2440 2193/2423 -f 520/2439 2193/2423 2196/2426 479/2442 -f 479/2442 2196/2426 2195/2425 477/2443 -f 2201/2436 2205/2445 2204/2444 2203/2440 -f 2207/2447 2206/2446 2209/2449 2208/2448 -f 483/2450 2210/2451 2198/2428 482/2429 -f 2212/2454 2211/2453 528/2452 1132/2455 -f 532/2459 1211/2461 2214/2460 -f 2215/2464 484/2463 487/2462 1131/2465 -f 2126/2326 2216/2467 2139/2343 -f 542/2340 2138/2341 2217/2469 968/2468 -f 539/2470 968/2468 2217/2469 2218/2471 -f 2218/2471 2134/2336 540/2466 539/2470 -f 2137/2339 2219/2472 2123/2323 2124/2324 -f 2123/2323 2219/2472 2216/2467 2126/2326 -f 2222/2475 2221/2474 2220/2473 2223/2476 -f 2225/2478 2224/2477 2226/2479 1728/1870 -f 2227/2480 2224/2477 2225/2478 2228/2481 -f 1626/1767 1627/1768 2229/2482 2230/2483 -f 1638/1779 2230/2483 2229/2482 2231/2484 -f 1640/1781 1638/1779 2231/2484 2232/2485 -f 1641/1782 1640/1781 2232/2485 2233/2486 -f 1643/1784 1641/1782 2233/2486 2234/2487 -f 1657/1798 1643/1784 2234/2487 2228/2481 -f 1659/1800 1657/1798 2228/2481 2225/2478 -f 1719/1861 1659/1800 2225/2478 1728/1870 -f 1729/1871 1728/1870 2226/2479 1880/2036 -f 2236/2489 2229/2482 1627/1768 2235/2488 -f 2235/2488 1627/1768 1628/1769 -f 2235/2488 2239/2492 2238/2491 2237/2490 -f 1628/1769 1625/1766 1575/1716 1576/1717 -f 2235/2488 1628/1769 1576/1717 -f 2239/2492 2235/2488 1576/1717 1577/1718 -f 2238/2491 2239/2492 2241/2494 2240/2493 -f 2242/2495 2241/2494 2239/2492 1577/1718 -f 2241/2494 2242/2495 2243/2496 2244/2497 -f 2245/2498 2243/2496 2242/2495 2246/2499 -f 2246/2499 1573/1714 2247/2500 2245/2498 -f 1577/1718 1574/1715 2246/2499 2242/2495 -f 1857/2013 1856/2010 2248/2503 1559/2501 -f 1559/2501 2248/2503 1562/2502 -f 2248/2503 1564/2504 1562/2502 -f 2247/2505 1564/2504 2248/2503 2249/2506 -f 2250/2507 2251/2508 2249/2506 2248/2503 -f 845/2002 2252/2509 2251/2508 2250/2507 -f 845/2002 2256/2513 2253/2510 2252/2509 -f 2252/2509 2253/2510 2254/2511 2255/2512 -f 2255/2512 2254/2511 2243/2514 2245/2515 -f 2259/2518 2258/2517 2257/2516 2260/2519 -f 2257/2516 2258/2517 2261/2520 2262/2521 -f 2265/2524 2264/2523 2263/2522 2266/2525 -f 2266/2525 2263/2522 2267/2526 2268/2527 -f 2268/2527 2267/2526 2269/2528 2270/2529 -f 2273/2532 2272/2531 2271/2530 2274/2533 -f 2273/2532 2274/2533 2275/2534 2276/2535 -f 2276/2535 2275/2534 2277/2536 2278/2537 -f 2279/2538 2276/2535 2278/2537 2280/2539 -f 2279/2538 2280/2539 2281/2540 2282/2541 -f 2282/2541 2281/2540 2283/2542 2284/2543 -f 2284/2543 2283/2542 2264/2523 2265/2524 -f 2270/2529 2288/2547 2287/2546 2268/2527 -f 2266/2525 2268/2527 2287/2546 2286/2545 -f 2265/2524 2266/2525 2286/2545 2284/2543 -f 2284/2543 2286/2545 2285/2544 2282/2541 -f 2290/2549 2289/2548 2271/2530 2272/2531 -f 2290/2549 2272/2531 2292/2551 2291/2550 -f 2292/2551 2272/2531 2273/2532 2293/2552 -f 2293/2552 2273/2532 2276/2535 2279/2538 -f 2293/2552 2279/2538 2282/2541 2285/2544 -f 2294/2553 2285/2544 2286/2545 2295/2554 -f 2295/2554 2286/2545 2287/2546 2296/2555 -f 2296/2555 2287/2546 2288/2547 2297/2556 -f 2297/2556 2288/2547 2298/2557 2299/2558 -f 2285/2544 2294/2553 2292/2551 2293/2552 -f 2302/2561 2301/2560 2300/2559 2303/2562 -f 2304/2563 2260/2519 2296/2555 2303/2562 -f 2296/2555 2297/2556 2303/2562 -f 2304/2563 2303/2562 2300/2559 -f 2257/2516 2305/2564 2295/2554 2296/2555 -f 2257/2516 2296/2555 2260/2519 -f 2295/2554 2305/2564 2306/2565 -f 2295/2554 2306/2565 2308/2567 2294/2553 -f 2308/2567 2307/2566 2294/2553 -f 2292/2551 2294/2553 2307/2566 2291/2550 -f 2289/2548 2290/2549 2310/2569 2309/2568 -f 2305/2564 2257/2516 2262/2521 -f 2313/2572 2324/2584 2312/2571 2311/2570 -f 2312/2571 2325/2585 2314/2573 2311/2570 -f 2311/2570 2314/2573 2302/2561 2299/2558 -f 2299/2558 2302/2561 2303/2562 2297/2556 -f 2269/2528 2316/2575 2315/2574 2270/2529 -f 2315/2574 2316/2575 2321/2581 2319/2579 -f 2321/2581 2320/2580 2319/2579 -f 2322/2582 2315/2574 2319/2579 2317/2577 -f 2319/2579 2318/2578 2317/2577 -f 2313/2576 2322/2582 2317/2577 -f 2323/2583 2313/2572 2317/2577 2318/2578 -f 2323/2583 2333/2594 2324/2584 2313/2572 -f 2324/2584 2332/2593 2325/2585 2312/2571 -f 2314/2573 2325/2585 2301/2560 2302/2561 -f 2299/2558 2298/2557 2326/2586 2311/2570 -f 2326/2586 2322/2582 2313/2576 2311/2570 -f 2315/2574 2322/2582 2326/2586 2298/2557 -f 2270/2529 2315/2574 2298/2557 2288/2547 -f 2329/2589 2328/2588 2327/2587 2330/2590 -f 2328/2588 2331/2591 2327/2587 -f 2325/2585 2332/2593 2331/2592 -f 2324/2584 2333/2594 2332/2593 -f 2323/2583 2318/2578 2319/2579 2333/2594 -f 2334/2595 2321/2581 2316/2575 2335/2596 -f 2327/2587 2338/2599 2334/2595 2335/2596 -f 2335/2596 2346/2608 2330/2590 2327/2587 -f 2329/2589 2330/2590 2336/2597 2337/2598 -f 2333/2600 2319/2579 2334/2595 2338/2599 -f 2320/2580 2321/2581 2334/2595 2319/2579 -f 2280/2539 2278/2537 2339/2601 2340/2602 -f 2281/2540 2280/2539 2340/2602 2341/2603 -f 2283/2542 2281/2540 2341/2603 2342/2604 -f 2264/2523 2283/2542 2342/2604 2343/2605 -f 2263/2522 2264/2523 2343/2605 2344/2606 -f 2267/2526 2263/2522 2344/2606 2345/2607 -f 2345/2607 2344/2606 2336/2597 -f 2346/2608 2345/2607 2336/2597 2330/2590 -f 2346/2608 2335/2596 2316/2575 2269/2528 -f 2345/2607 2346/2608 2269/2528 2267/2526 -f 2348/2610 2341/2603 2340/2602 2347/2609 -f 2347/2609 2340/2602 2339/2601 -f 2342/2604 2341/2603 2348/2610 2349/2611 -f 2349/2611 2343/2605 2342/2604 -f 2349/2611 2336/2597 2344/2606 2343/2605 -f 2336/2597 2258/2613 2259/2612 2337/2598 -f 2336/2597 2349/2611 2261/2614 2258/2613 -f 2349/2611 2351/2616 2350/2615 2261/2614 -f 2349/2611 2352/2617 2351/2616 -f 2353/2618 2352/2617 2349/2611 2348/2610 -f 2348/2610 2354/2619 2353/2618 -f 2355/2620 2354/2619 2348/2610 2347/2609 -f 2356/2621 2355/2620 2347/2609 2357/2622 -f 2357/2622 2347/2609 2339/2601 2358/2623 -f 2358/2623 2339/2601 2278/2537 2277/2536 -f 2361/2626 2360/2625 2359/2624 2362/2627 -f 2359/2624 2360/2625 2363/2628 -f 1999/2629 2363/2628 2360/2625 1992/2630 -f 1992/2630 2360/2625 2361/2626 1991/2631 -f 2221/2632 1991/2631 2361/2626 2364/2633 -f 2364/2633 2366/2635 2365/2634 2221/2632 -f 1549/2133 2374/2643 2365/2652 2366/3020 -f 1549/1689 2366/2635 1548/1688 -f 2361/2626 2362/2627 2367/2636 2364/2633 -f 2366/2635 2364/2633 2367/2636 2368/2637 -f 1548/1688 2366/2635 2368/2637 1972/2139 -f 1972/2139 2368/2637 2369/2638 1554/1694 -f 2370/2639 2369/2638 2368/2637 2367/2636 -f 2367/2636 2362/2627 2371/2640 2370/2639 -f 2362/2627 2359/2624 2371/2640 -f 2374/2643 2373/2642 2372/2641 2375/2644 -f 2375/2644 2372/2641 2376/2645 2377/2646 -f 2378/2647 2359/2624 2363/2628 2379/2648 -f 2379/2648 2363/2628 1999/2629 2000/2649 -f 2379/2648 2000/2649 2380/2650 2377/2646 -f 2377/2646 2380/2650 2221/2651 2375/2644 -f 2375/2644 2221/2651 2365/2652 2374/2643 -f 2374/2643 1549/2133 1970/2134 -f 2373/2642 2374/2643 1970/2134 1553/2136 -f 2378/2654 2376/2653 2371/2640 2359/2624 -f 2376/2653 2372/2655 2370/2639 2371/2640 -f 2369/2638 2370/2639 2372/2655 2373/2656 -f 1554/1694 2369/2638 2373/2656 1553/1693 -f 1941/2099 2222/2475 2223/2476 1939/2097 -f 2223/2476 2220/2473 2382/2658 2381/2657 -f 1924/2082 2004/2171 2383/2659 1923/2081 -f 1941/2099 1937/2095 1938/2096 2384/2660 -f 1940/2098 2381/2657 2385/2661 1544/1683 -f 889/1682 1544/1683 2385/2661 352/2662 -f 703/2663 352/2662 2385/2661 2386/2664 -f 2387/2665 2388/2666 2382/2658 2220/2473 -f 2387/2665 2220/2473 2221/2474 2380/2667 -f 2387/2665 2380/2667 2000/2167 1997/2164 -f 703/2663 2386/2664 2389/2668 901/2669 -f 1997/2164 1996/2163 2388/2666 2387/2665 -f 901/2669 2389/2668 1993/2160 942/2670 -f 942/2671 1993/2160 1994/2161 1372/2672 -f 4/1524 5/2674 2390/2673 1397/1527 -f 2391/2675 2392/2676 1406/1536 1404/1534 -f 2393/2677 2394/2678 1875/2031 1401/1531 -f 2717/3092 7/2681 2691/3065 -f 1399/1529 2692/3066 2691/3065 7/2681 -f 2398/2684 2400/2686 2399/2685 2397/2683 -f 2399/2685 2400/2686 2401/2687 2392/2676 -f 2393/2677 2401/2687 2402/2688 2394/2678 -f 2405/2691 2404/2690 2403/2689 2406/2692 -f 2406/2692 2403/2689 2407/2693 2408/2694 -f 2409/2695 2407/2693 2403/2689 2410/2696 -f 2407/2693 2409/2695 2411/2697 2412/2698 -f 2411/2697 2409/2695 2413/2699 2414/2700 -f 2415/2701 2426/2712 2414/2700 2413/2699 -f 2408/2694 2407/2693 2412/2698 2416/2702 -f 2417/2703 2413/2699 2409/2695 2410/2696 -f 2410/2696 2403/2689 2404/2690 2418/2704 -f 2402/2688 2401/2687 2400/2686 2419/2705 -f 2419/2705 2400/2686 2398/2684 2420/2706 -f 1398/1528 1389/1515 2694/3068 2693/3067 -f 1386/1512 2696/3070 2695/3069 1385/1511 -f 1967/2129 2697/3071 2696/3070 1386/1512 -f 1967/2129 1968/2130 2698/3072 2697/3071 -f 2699/3073 2698/3072 1968/2130 1969/2131 -f 2425/2711 2421/2707 2422/2708 2417/2703 -f 2417/2703 2410/2696 2418/2704 2425/2711 -f 2413/2699 2417/2703 2422/2708 2415/2701 -f 2426/2712 2415/2701 2423/2709 -f 2426/2712 2423/2709 2424/2710 2427/2713 -f 2700/3074 2699/3073 1969/2131 1909/2067 -f 1909/2067 1906/2064 2689/3063 2700/3074 -f 1895/2051 2430/2716 2429/2715 2431/2717 -f 1897/2053 2430/2716 1895/2051 1890/2046 -f 1905/2063 1894/2050 1895/2051 2431/2717 -f 1907/2065 1905/2063 2431/2717 2432/2718 -f 2428/2714 1907/2065 2432/2718 2433/2719 -f 2424/2710 2428/2714 2433/2719 2427/2713 -f 2427/2713 2449/2735 2434/2720 2426/2712 -f 2435/2721 2426/2712 2434/2720 2436/2722 -f 2437/2723 2414/2700 2426/2712 2435/2721 -f 2414/2700 2437/2723 2438/2724 2411/2697 -f 2431/2717 2429/2715 2439/2725 2432/2718 -f 2432/2718 2439/2725 2440/2726 2433/2719 -f 2433/2719 2440/2726 2441/2727 2427/2713 -f 2430/2716 1897/2053 1814/1959 1813/1958 -f 2441/2727 2440/2726 2442/2728 2443/2729 -f 2444/2730 2442/2728 2440/2726 2439/2725 -f 2445/2731 2444/2730 2439/2725 2429/2715 -f 2442/2728 2444/2730 2446/2732 2447/2733 -f 2448/2734 2446/2732 2444/2730 2445/2731 -f 2436/2722 2434/2720 2449/2735 2450/2736 -f 2451/2737 2449/2735 2427/2713 2441/2727 -f 2451/2737 2441/2727 2443/2729 2452/2738 -f 2443/2729 2442/2728 2447/2733 2453/2739 -f 2447/2733 2446/2732 1858/2014 2454/2740 -f 1767/1909 1858/2014 2446/2732 2448/2734 -f 1765/1907 1767/1909 2448/2734 1811/1956 -f 1811/1956 2448/2734 2445/2731 1813/1958 -f 1813/1958 2445/2731 2429/2715 2430/2716 -f 2289/2741 2436/2722 2450/2736 2271/2742 -f 2436/2722 2289/2741 2309/2743 2435/2721 -f 2455/2744 1865/2021 1881/2037 2456/2745 -f 1865/2021 2455/2744 2454/2740 1862/2018 -f 1859/2015 1862/2018 2454/2740 1858/2014 -f 2447/2733 2454/2740 2455/2744 2453/2739 -f 2453/2739 2455/2744 2456/2745 2457/2746 -f 2453/2739 2457/2746 2452/2738 2443/2729 -f 2411/2697 2438/2724 2458/2747 2412/2698 -f 2412/2698 2458/2747 2459/2748 2416/2702 -f 2460/2749 2416/2702 2459/2748 2461/2750 -f 2460/2749 2408/2694 2416/2702 -f 2408/2694 2460/2749 1881/2037 1882/2038 -f 1881/2037 2460/2749 2461/2750 2456/2745 -f 2456/2745 2461/2750 2462/2751 2457/2746 -f 2457/2746 2462/2751 2463/2752 2452/2738 -f 2452/2738 2463/2752 2464/2753 2451/2737 -f 2451/2737 2464/2753 2450/2736 2449/2735 -f 2271/2742 2450/2736 2464/2753 2274/2754 -f 2274/2754 2464/2753 2463/2752 2275/2755 -f 2275/2755 2463/2752 2462/2751 2277/2756 -f 2277/2756 2462/2751 2461/2750 2459/2748 -f 2435/2721 2309/2743 2356/2757 2437/2723 -f 2437/2723 2356/2757 2357/2758 2438/2724 -f 2438/2724 2357/2758 2358/2759 2458/2747 -f 2458/2747 2358/2759 2277/2756 2459/2748 -f 1736/1878 1729/1871 1880/2036 1878/2034 -f 1764/1906 1736/1878 1878/2034 1860/2016 -f 1764/1906 1731/1873 1732/1874 1736/1878 -f 1990/2157 1991/2158 2221/2474 2222/2475 -f 2384/2660 1990/2157 2222/2475 1941/2099 -f 2384/2660 1938/2096 2466/2761 2465/2760 -f 2355/2763 2356/2762 2309/2568 2310/2569 -f 2354/2764 2355/2763 2310/2569 2291/2550 -f 2353/2765 2354/2764 2291/2550 2307/2566 -f 2352/2766 2353/2765 2307/2566 2308/2567 -f 2351/2767 2352/2766 2308/2567 2306/2565 -f 2350/2768 2351/2767 2306/2565 2305/2564 -f 2350/2768 2305/2564 2262/2521 2261/2520 -f 2467/2570 2469/2576 2468/2577 -f 2470/2599 2472/2769 2471/2600 -f 2301/2560 2325/2585 2331/2592 2328/2770 -f 2300/2559 2301/2560 2328/2770 2329/2771 -f 2300/2559 2329/2771 2337/2772 2304/2563 -f 2260/2519 2304/2563 2337/2772 2259/2518 -f 2473/2591 2475/2599 2474/2587 -f 1874/2030 1873/2029 2405/2691 2406/2692 -f 1882/2038 1874/2030 2406/2692 2408/2694 -f 1487/1619 2477/2774 2476/2773 1468/1600 -f 2480/2777 2479/2776 2478/2775 2481/2778 -f 2478/2775 2482/2779 2483/2780 2481/2778 -f 2484/2781 2477/2774 2486/2783 2485/2782 -f 2477/2774 2484/2781 2487/2784 2476/2773 -f 2476/2773 2487/2784 2488/2785 2489/2786 -f 1468/1600 2476/2773 2489/2786 1467/1599 -f 2489/2787 2492/2791 2491/2790 2490/2789 -f 2489/2787 2490/2789 1467/2788 -f 2494/1599 2493/2789 1433/1565 1465/1597 -f 2490/2789 2491/2790 2495/2792 -f 2497/2794 2496/2793 2499/2796 2498/2795 -f 2500/2823 2511/2809 2497/2821 2498/3021 -f 2484/2781 2485/2798 2501/2797 2487/2784 -f 2502/2799 1441/1573 1432/1564 1439/1571 -f 2488/2800 2503/2801 2492/2791 2489/2787 -f 2504/2802 2505/2803 2503/2801 2488/2800 -f 2505/2803 2504/2802 2506/2804 2507/2805 -f 2506/2804 2238/2491 2240/2493 2507/2805 -f 2508/2802 2509/2806 2506/2804 -f 2256/2513 1851/2003 2511/2809 2512/2810 -f 2511/2809 1851/2003 1852/2004 2513/2811 -f 264/2007 841/2812 1442/2813 1855/2009 -f 1441/2814 2502/2816 2514/2815 -f 2514/2815 2518/2820 2517/2819 2516/2818 -f 2514/2815 2516/2818 2515/2817 -f 2513/2811 2496/2822 2497/2821 2511/2809 -f 2512/2810 2511/2809 2500/2823 2510/2824 -f 2253/2510 2256/2513 2512/2810 2254/2511 -f 2510/2824 2244/2825 2254/2511 2512/2810 -f 2244/2825 2243/2514 2254/2511 -f 846/2826 2250/2507 2248/2503 1856/2010 -f 2521/2829 2237/2490 2520/2828 2519/2827 -f 2485/2798 2519/2827 2520/2828 2501/2797 -f 2504/2830 2488/2785 2487/2784 2501/2797 -f 2501/2797 2509/2806 2504/2830 -f 2509/2806 2501/2797 2520/2828 2237/2490 -f 2235/2488 2237/2490 2521/2829 2236/2489 -f 2236/2489 2521/2829 2519/2831 2522/2832 -f 2522/2832 2519/2831 2523/2833 2524/2834 -f 2527/2837 2526/2836 2525/2835 2528/2838 -f 2527/2837 2528/2838 2234/2487 2233/2486 -f 2228/2481 2234/2487 2528/2838 2227/2480 -f 2231/2484 2229/2482 2236/2489 2522/2832 -f 2232/2485 2231/2484 2522/2832 2524/2834 -f 2233/2486 2232/2485 2524/2834 2527/2837 -f 2528/2838 2525/2835 2529/2839 2227/2480 -f 2530/2840 2529/2839 2525/2835 2531/2841 -f 2526/2836 2532/2842 2531/2841 2525/2835 -f 2519/2831 2485/2827 2533/2843 2523/2833 -f 2531/2841 2532/2842 2535/2845 2534/2844 -f 2530/2840 2531/2841 2534/2844 2536/2846 -f 2227/2480 2529/2839 2537/2847 2224/2477 -f 2538/2848 2537/2847 2529/2839 2530/2840 -f 2539/2849 2538/2848 2530/2840 2536/2846 -f 2540/2850 2539/2849 2536/2846 2479/2776 -f 2478/2775 2479/2776 2536/2846 2534/2844 -f 2482/2779 2478/2775 2534/2844 2535/2851 -f 2541/2852 1876/2032 1879/2035 2542/2853 -f 2542/2853 1879/2035 1880/2036 2226/2479 -f 2542/2853 2226/2479 2224/2477 2537/2847 -f 2541/2852 2542/2853 2537/2847 2538/2848 -f 2543/2854 2541/2852 2538/2848 2539/2849 -f 2544/2855 2543/2854 2539/2849 2540/2850 -f 2545/2856 2544/2855 2540/2850 2546/2857 -f 2546/2857 2540/2850 2479/2776 2480/2777 -f 2477/2774 1487/1619 1488/1620 2486/2783 -f 1490/1622 2481/2778 2483/2780 1489/1621 -f 2481/2778 1490/1622 1491/1623 2480/2777 -f 2480/2777 1491/1623 1497/1629 2546/2857 -f 2546/2857 1497/1629 1499/1631 2545/2856 -f 2545/2856 1499/1631 1501/1633 1507/1639 -f 2544/2855 2545/2856 1507/1639 1870/2026 -f 2544/2855 1870/2026 1871/2027 2543/2854 -f 2543/2854 1871/2027 1876/2032 2541/2852 -f 2396/2682 2547/2858 2390/2673 2395/2680 -f 2106/2300 2548/2859 2549/2860 2111/2310 -f 2149/2360 2133/2335 2148/2359 2151/2365 -f 2113/2313 2130/2332 2117/2317 2112/2312 -f 2548/2859 2114/2314 2550/2861 2549/2860 -f 2118/2318 2115/2315 2116/2316 2121/2321 -f 2114/2314 2115/2315 2129/2330 2550/2861 -f 2551/2862 2131/2333 2132/2334 2136/2338 -f 464/2363 2135/2337 2150/2361 534/2863 -f 2091/2280 2095/2284 2096/2285 2092/2281 -f 2107/2301 2108/2302 2101/2295 2103/2297 -f 2095/2303 2108/2302 2105/2299 2094/2307 -f 2107/2301 2112/2312 2548/2859 2106/2300 -f 2116/2316 2117/2317 2130/2332 2131/2333 -f 2120/2320 2121/2321 2551/2862 2124/2324 -f 2112/2312 2117/2317 2114/2314 2548/2859 -f 2121/2321 2116/2316 2131/2333 2551/2862 -f 2102/2296 2100/2294 2684/3058 2099/2289 -f 2102/2296 2099/2289 2146/2355 -f 2147/2358 2104/2298 2102/2296 2146/2355 -f 2150/2361 2132/2334 2133/2335 2149/2360 -f 2136/2338 2137/2339 2124/2324 2551/2862 -f 2151/2365 2148/2359 2104/2298 2147/2358 -f 2113/2313 2148/2359 2133/2335 2130/2332 -f 2135/2337 2136/2338 2132/2334 2150/2361 -f 2553/2865 2552/2864 2119/2319 2122/2322 -f 2120/2320 2122/2322 2119/2319 -f 2218/2471 2217/2469 2216/2467 2219/2472 -f 2219/2472 2137/2339 2134/2336 2218/2471 -f 2555/2867 2554/2866 2553/2865 2122/2322 -f 2125/2325 2555/2867 2122/2322 -f 2554/2866 2555/2867 2145/2353 2556/2868 -f 2139/2343 2216/2467 2217/2469 2138/2341 -f 1961/2122 1959/2120 2557/2869 2558/2870 -f 2558/2870 1985/2152 1962/2123 1961/2122 -f 2012/2179 2559/2871 2030/2198 2015/2182 -f 2029/2197 2030/2198 2018/2185 2560/2872 -f 2057/2232 2058/2233 2562/2874 2561/2873 -f 2564/2876 2563/2875 2559/2871 2012/2179 -f 2162/2380 2563/2875 2174/2392 2565/2877 -f 2376/2645 2378/2647 2379/2648 2377/2646 -f 205/2878 1752/1894 1753/1895 193/2879 -f 193/2879 1753/1895 1755/1897 184/2880 -f 184/2880 1755/1897 1756/1898 185/2881 -f 1756/1898 1757/1899 187/2882 185/2881 -f 187/2882 1757/1899 1758/1900 194/2883 -f 194/2883 1758/1900 1759/1901 195/2884 -f 195/2884 1759/1901 1770/1912 237/1971 -f 1778/1920 1779/1921 2566/2885 1775/1917 -f 1778/1920 1782/1924 2567/2886 1777/1919 -f 1782/1924 1784/1926 2568/2887 2567/2886 -f 1784/1926 1786/1928 2569/2888 2568/2887 -f 2569/2888 1786/1928 1788/1930 2570/2889 -f 2570/2889 1788/1930 1791/1933 2571/2890 -f 2572/2891 1792/1934 1794/1936 1216/2892 -f 1818/1963 1819/1965 1820/1966 1817/1962 -f 1817/1962 1820/1966 1822/1970 1821/1968 -f 1821/1968 1822/1970 1770/1912 1769/1911 -f 1673/1814 1823/1973 1674/1816 1629/1770 -f 1824/1974 1827/1977 1823/1973 1673/1814 -f 1828/1978 1831/1981 1827/1977 1824/1974 -f 1831/1981 1833/1983 1830/1980 -f 1841/1991 1836/1986 1837/1987 1838/1988 -f 2573/2893 1839/1989 1837/1987 1834/1984 -f 1835/1985 1836/1986 1842/1992 2574/2894 -f 2574/2894 1842/1992 1846/1996 2575/2895 -f 1779/1921 1849/1999 1850/2000 2566/2885 -f 1847/2001 1849/1999 1848/1998 2576/2896 -f 1888/2044 1899/2056 1900/2057 1898/2054 -f 1898/2054 1900/2057 1819/1965 1818/1963 -f 1899/2056 2098/2288 434/2286 896/2055 -f 1772/1914 1773/1915 2566/2885 1850/2000 -f 1773/1915 1775/1917 2566/2885 -f 1404/1534 1396/1526 1397/1527 2391/2675 -f 3/1525 1396/1526 1407/1537 1410/1540 -f 1416/1546 1409/1539 1407/1537 1405/1535 -f 1408/1538 1409/1539 1417/1547 1418/1548 -f 1510/1642 1420/1550 1417/1547 1415/1545 -f 1519/1651 1422/1552 1423/1553 2577/2897 -f 1421/1551 1422/1552 1520/1652 1518/1650 -f 1524/1656 1523/1655 1420/1550 1510/1642 -f 1518/1650 1520/1652 1529/1661 1528/1660 -f 1528/1660 1529/1661 1523/1655 1524/1656 -f 1397/1527 2390/2673 2547/2858 2391/2675 -f 2395/2680 2390/2673 5/2674 6/2679 -f 2577/2897 1423/1553 1425/1555 1451/1583 -f 8/1522 1393/1519 1394/1520 10/2898 -f 1390/1516 1393/1519 1395/1523 2002/2169 -f 1394/1520 2672/3045 2652/3024 10/2898 -f 1405/1535 1402/1532 1403/1533 1416/1546 -f 1401/1531 1402/1532 1406/1536 2393/2677 -f 1416/1546 1403/1533 1414/1544 1415/1545 -f 1478/1610 1479/1611 1493/1625 1494/1626 -f 1512/1644 1511/1643 1414/1544 1411/1541 -f 1494/1626 1493/1625 1517/1649 1516/1648 -f 1513/1645 1525/1657 1511/1643 1512/1644 -f 1516/1648 1517/1649 1527/1659 1526/1658 -f 1526/1658 1527/1659 1525/1657 1513/1645 -f 2002/2169 1395/1523 707/2128 2001/2168 -f 2393/2677 1406/1536 2392/2676 2401/2687 -f 2397/2683 2692/3066 2693/3067 2398/2684 -f 2397/2683 2399/2685 2547/2858 2396/2682 -f 2547/2858 2399/2685 2392/2676 2391/2675 -f 1479/1611 1477/1609 1455/1587 1426/1556 -f 1479/1611 1426/1556 1424/1554 -f 1477/1609 1454/1586 1455/1587 -f 2670/3043 2671/3044 1391/1517 1388/1514 -f 1384/1510 1388/1514 1392/1518 1949/2110 -f 1506/1638 1412/1542 1413/1543 1873/2029 -f 1873/2029 1413/1543 1875/2031 2405/2691 -f 2002/2169 1960/2121 1392/1518 1390/1516 -f 2557/2869 2003/2170 1995/2162 1998/2165 -f 1959/2120 1960/2121 2003/2170 2557/2869 -f 2381/2657 2382/2658 2386/2664 2385/2661 -f 2386/2664 2382/2658 2388/2666 2389/2668 -f 2389/2668 2388/2666 1996/2163 1993/2160 -f 2405/2691 1875/2031 2394/2678 2404/2690 -f 2404/2690 2394/2678 2402/2688 2418/2704 -f 2418/2704 2402/2688 2419/2705 2425/2711 -f 2425/2711 2419/2705 2420/2706 2421/2707 -f 2694/3068 2695/3069 2421/2707 2420/2706 -f 1411/1541 1412/1542 1504/1636 1512/1644 -f 1803/1947 1804/1948 2579/2900 2578/2899 -f 1808/1952 1058/1953 1368/2902 2580/2901 -f 1919/2077 1803/1947 2578/2899 1922/2080 -f 1919/2077 2581/2903 1926/2084 1918/2076 -f 2465/2760 1989/2156 1990/2157 2384/2660 -f 2581/2903 2466/2761 1938/2096 1926/2084 -f 1987/2154 2465/2760 2466/2761 2383/2659 -f 1999/2166 1992/2159 1989/2156 1988/2155 -f 1955/2116 1964/2125 1966/2127 1956/2117 -f 2310/2569 2290/2549 2291/2550 -f 1709/1851 1710/1852 2583/2905 2582/2904 -f 1712/1854 1709/1851 2582/2904 2584/2906 -f 1710/1852 1679/1821 2585/2907 2583/2905 -f 1679/1821 1680/1822 1684/1826 2585/2907 -f 1844/1994 1714/1856 1712/1854 2584/2906 -f 1830/1980 1833/1983 1839/1989 2573/2893 -f 1833/1983 1832/1982 1839/1989 -f 1832/1982 1713/1855 1838/1988 -f 1838/1988 1713/1855 1714/1856 1841/1991 -f 1841/1991 1714/1856 1844/1994 1840/1990 -f 2125/2325 2140/2344 2143/2349 2555/2867 -f 898/2342 2144/2350 2143/2349 2140/2344 -f 898/2342 2140/2344 2139/2343 2138/2341 -f 2093/2282 2097/2287 2098/2288 1885/2041 -f 2097/2305 2109/2306 472/2909 434/2908 -f 2109/2306 2110/2308 448/2311 472/2909 -f 2111/2310 2110/2308 2105/2299 2106/2300 -f 2127/2327 2128/2328 533/2348 471/2329 -f 2127/2327 2129/2330 2115/2315 2118/2318 -f 2144/2350 2145/2353 2555/2867 2143/2349 -f 2111/2310 2549/2860 937/2910 454/2309 -f 2549/2860 2550/2861 940/2911 937/2910 -f 2550/2861 2129/2330 946/2331 940/2911 -f 2145/2353 966/2351 2141/2345 2556/2868 -f 2650/2346 2556/2868 2141/2345 -f 2082/2266 429/2270 474/2912 2078/2260 -f 2035/2203 2013/2180 2014/2181 2586/2913 -f 2014/2181 2028/2196 2054/2226 2586/2913 -f 2012/2179 2013/2180 2587/2914 2564/2876 -f 2041/2212 2588/2915 2056/2231 2040/2211 -f 2588/2915 2589/2916 2059/2234 2056/2231 -f 2564/2876 2587/2914 2590/2917 2173/2391 -f 2009/2176 2010/2177 2006/2173 2007/2174 -f 2591/2918 2032/2200 2009/2176 2007/2174 -f 2046/2217 2047/2218 2010/2177 2011/2178 -f 2032/2200 2156/2374 2592/2919 2031/2199 -f 2060/2235 2047/2218 2048/2219 2063/2238 -f 2037/2205 2049/2220 2052/2224 2038/2208 -f 2051/2223 2046/2217 2011/2178 2593/2920 -f 2011/2178 2008/2175 2034/2202 2593/2920 -f 2008/2175 2031/2199 2033/2201 2034/2202 -f 2031/2199 2592/2919 2158/2376 2033/2201 -f 2157/2375 2175/2394 1103/2395 504/2396 -f 2006/2173 2594/2921 2005/2172 -f 2594/2921 2186/2416 2187/2417 2005/2172 -f 2591/2918 2007/2174 2184/2414 2191/2421 -f 2191/2421 2184/2414 2188/2418 2190/2420 -f 2190/2420 2188/2418 2196/2426 2193/2423 -f 2181/2411 2180/2407 1107/2408 486/2410 -f 2203/2440 2204/2444 2194/2424 2193/2423 -f 2203/2440 1110/2441 551/2435 2201/2436 -f 477/2443 2195/2425 2072/2250 476/2251 -f 2195/2425 2189/2419 2187/2417 2072/2250 -f 2189/2419 2185/2415 2005/2172 2187/2417 -f 427/2254 2073/2255 2077/2259 478/2268 -f 2077/2259 2073/2255 2067/2243 2076/2258 -f 2067/2243 2062/2237 2595/2922 2076/2258 -f 2202/2437 2596/2923 2205/2445 2201/2436 -f 2179/2406 2597/2924 1121/2925 508/2405 -f 2206/2446 2207/2447 1122/2927 1125/2926 -f 516/2432 2199/2433 2202/2437 517/2438 -f 2202/2437 2199/2433 2209/2449 2596/2923 -f 2729/2926 485/2928 2728/2925 -f 2730/2926 2731/2925 2597/2924 -f 2206/2446 1125/2926 2597/2924 -f 2200/2434 480/2431 481/2430 2197/2427 -f 2200/2434 2197/2427 2598/2929 2208/2448 -f 2207/2447 2599/2930 1128/2931 1122/2927 -f 2197/2427 2198/2428 2600/2932 2598/2929 -f 2599/2930 2601/2933 507/2934 1128/2931 -f 2210/2451 2602/2935 2198/2428 -f 2211/2453 2604/2937 2603/2936 2602/2935 -f 2605/2938 2215/2464 1131/2465 1133/2939 -f 2211/2453 2212/2454 2606/2940 2604/2937 -f 2602/2935 2603/2936 2600/2932 2198/2428 -f 2601/2933 2605/2938 1133/2939 507/2934 -f 528/2452 2211/2453 2602/2935 2210/2451 -f 1132/2455 1137/2941 2607/2942 2212/2454 -f 2212/2454 2607/2942 2608/2943 2606/2940 -f 2591/2918 2155/2373 2156/2374 2032/2200 -f 2158/2376 2159/2377 2036/2204 2033/2201 -f 1540/1676 2164/2382 1944/2102 1542/1678 -f 2173/2391 2174/2392 2563/2875 2564/2876 -f 2191/2421 2183/2413 2155/2373 2591/2918 -f 2153/2370 2183/2413 2192/2422 2182/2412 -f 2182/2412 2192/2422 2194/2424 2181/2411 -f 2180/2407 2204/2444 2205/2445 2179/2406 -f 2208/2448 2209/2449 2199/2433 2200/2434 -f 2214/2460 2213/2456 532/2457 -f 2165/2383 2565/2877 2169/2387 2166/2384 -f 2173/2391 2590/2917 2176/2399 2172/2390 -f 2175/2394 2592/2919 2156/2374 2154/2371 -f 2157/2375 2158/2376 2592/2919 2175/2394 -f 2181/2411 2194/2424 2204/2444 2180/2407 -f 2179/2406 2205/2445 2596/2923 2597/2924 -f 2596/2923 2209/2449 2206/2446 2597/2924 -f 2208/2448 2598/2929 2599/2930 2207/2447 -f 2598/2929 2600/2932 2601/2933 2599/2930 -f 2603/2936 2604/2937 2215/2464 2605/2938 -f 2604/2937 2606/2940 484/2463 2215/2464 -f 2600/2932 2603/2936 2605/2938 2601/2933 -f 2606/2940 2608/2943 1139/2944 484/2463 -f 1537/1673 1535/1671 1536/1672 1809/1954 -f 1532/1665 1535/1671 1538/1674 1531/1664 -f 1538/1674 1540/1676 1542/1678 1531/1664 -f 1808/1952 1804/1948 1805/1949 1534/1670 -f 1917/2075 1806/1950 1807/1951 1915/2073 -f 1534/1670 1805/1949 1536/1672 1533/1668 -f 2088/2277 2089/2278 1807/1951 1801/1945 -f 1800/1944 1806/1950 2579/2900 2580/2901 -f 2089/2278 2090/2279 1901/2059 1913/2071 -f 2016/2183 2020/2187 2021/2188 2019/2186 -f 2019/2186 2021/2188 2022/2189 2609/2945 -f 2609/2945 2022/2189 2023/2190 2610/2946 -f 897/1685 1175/2194 2024/2191 1545/1684 -f 1936/2094 2020/2187 2163/2381 1541/1677 -f 1541/1677 2163/2381 2164/2382 1540/1676 -f 2166/2384 1944/2102 2164/2382 2165/2383 -f 1542/1678 1942/2100 85/1679 -f 2559/2871 2017/2184 2018/2185 2030/2198 -f 2563/2875 2162/2380 2017/2184 2559/2871 -f 2166/2384 2169/2387 2170/2388 2167/2385 -f 2560/2872 2018/2185 2019/2186 2609/2945 -f 2561/2873 2562/2874 2610/2946 2025/2192 -f 2161/2379 2162/2380 2565/2877 2165/2383 -f 2168/2386 2169/2387 2565/2877 2174/2392 -f 2167/2385 2170/2388 2612/2948 2611/2947 -f 2041/2212 2042/2213 2613/2949 2044/2215 -f 1947/2108 917/2105 1191/2950 2614/2951 -f 2611/2947 1945/2104 1943/2101 2167/2385 -f 2178/2403 2612/2948 2170/2388 2171/2389 -f 920/2953 2617/2956 2616/2955 2615/2952 -f 2616/2955 2617/2956 1946/2107 2618/2957 -f 2618/2957 1946/2107 1947/2108 2614/2951 -f 2617/2956 920/2953 1199/2400 2177/2401 -f 351/2106 1946/2107 2617/2956 2177/2401 -f 329/2103 1945/2104 2614/2951 1191/2950 -f 1945/2104 2611/2947 2618/2957 2614/2951 -f 2618/2957 2611/2947 2612/2948 2616/2955 -f 2612/2948 2178/2403 2615/2952 2616/2955 -f 2178/2403 1205/2404 1194/2954 2615/2952 -f 2006/2173 2060/2235 2061/2236 2594/2921 -f 2061/2236 2066/2242 2186/2416 2594/2921 -f 2066/2242 2074/2256 2071/2249 2186/2416 -f 2075/2257 475/2253 420/2252 2071/2249 -f 2074/2256 2075/2257 2071/2249 -f 2607/2942 1137/2941 529/2458 2213/2456 -f 2607/2942 2213/2456 2214/2460 2608/2943 -f 2608/2943 2214/2460 1211/2461 1139/2944 -f 1695/1837 1696/1838 1662/1803 1660/1801 -f 1697/1839 1698/1840 1690/1832 1691/1833 -f 1721/1863 1701/1843 1723/1865 1720/1862 -f 1742/1884 1723/1865 1724/1866 1740/1882 -f 1793/1935 1794/1936 1792/1934 1789/1931 -f 1742/1884 1793/1935 1789/1931 1741/1883 -f 1216/2892 1794/1936 1752/1894 205/2878 -f 1690/1832 1698/1840 1701/1843 1721/1863 -f 1686/1828 1687/1829 2585/2907 1684/1826 -f 1687/1829 1705/1847 2583/2905 2585/2907 -f 1705/1847 1706/1848 2582/2904 2583/2905 -f 1716/1858 1717/1859 1844/1994 2584/2906 -f 1706/1848 1716/1858 2584/2906 2582/2904 -f 1843/1993 1717/1859 1718/1860 1845/1995 -f 1843/1993 1846/1996 1842/1992 1840/1990 -f 2575/2895 1846/1996 1847/1997 2576/2958 -f 1685/1827 1686/1828 1689/1831 1692/1834 -f 1617/1758 2619/2959 2620/2960 1621/1762 -f 1621/1762 2620/2960 2621/2961 1623/1764 -f 1618/1759 1635/1776 2619/2959 1617/1758 -f 1616/1757 1635/1776 1636/1777 2622/2962 -f 2622/2962 1636/1777 1646/1787 2623/2963 -f 2623/2963 1646/1787 1654/1795 2624/2964 -f 2624/2964 1654/1795 1666/1807 1984/2151 -f 2619/2959 1607/1748 1608/1749 2620/2960 -f 2620/2960 1608/1749 1609/1750 2621/2961 -f 1609/1750 1601/1742 1582/1723 1583/1724 -f 1635/1776 1616/1757 1607/1748 2619/2959 -f 1614/1755 1616/1757 2622/2962 1633/1774 -f 1633/1774 2622/2962 2623/2963 1651/1792 -f 1651/1792 2623/2963 2624/2964 1667/1808 -f 1667/1808 2624/2964 1984/2151 1682/1824 -f 1682/1824 1984/2151 1981/2148 1681/1823 -f 1598/1739 1599/1740 1602/1743 1603/1744 -f 1603/1744 1602/1743 1606/1747 1612/1753 -f 1612/1753 1606/1747 1615/1756 1631/1772 -f 1631/1772 1615/1756 1634/1775 1649/1790 -f 1649/1790 1634/1775 1652/1793 1669/1810 -f 1669/1810 1652/1793 1668/1809 1677/1819 -f 1702/1844 1703/1845 1722/1864 1744/1886 -f 1722/1864 1743/1885 1797/1939 1744/1886 -f 1787/1929 1790/1932 1791/1933 1788/1930 -f 1743/1885 1790/1932 1787/1929 1797/1939 -f 2571/2890 1791/1933 1792/1934 2572/2891 -f 1721/1863 1703/1845 1685/1827 1690/1832 -f 1668/1809 1667/1808 1682/1824 1683/1825 -f 1680/1822 1668/1809 1683/1825 -f 1638/1779 1619/1760 1620/1761 2230/2483 -f 2230/2483 1620/1761 1622/1763 1626/1767 -f 1626/1767 1622/1763 1624/1765 1625/1766 -f 1618/1759 1619/1760 1639/1780 1637/1778 -f 1637/1778 1639/1780 1642/1783 1645/1786 -f 1645/1786 1642/1783 1644/1785 1653/1794 -f 1644/1785 1658/1799 1664/1805 1653/1794 -f 1488/1620 1485/1617 1484/1616 1489/1621 -f 1489/1621 2483/2780 2486/2783 1488/1620 -f 2483/2780 2482/2779 2485/2782 2486/2783 -f 2482/2779 2535/2851 2485/2782 -f 2535/2845 2532/2842 2533/2843 2485/2965 -f 2532/2842 2526/2836 2523/2833 2533/2843 -f 2526/2836 2527/2837 2524/2834 2523/2833 -f 2625/2966 1472/1604 1471/1603 1430/2967 -f 1471/1603 1470/1602 1429/1561 1430/2967 -f 1446/1578 1447/1579 1472/2969 2626/2968 -f 1472/1604 2625/2966 1273/2972 -f 2733/1604 1273/2972 2732/2971 -f 2734/1604 2735/2971 2626/2970 -f 1428/1560 1442/1574 841/2973 18/1559 -f 1854/2006 1855/2009 2514/2815 1853/2005 -f 1855/2009 1442/2813 1441/2814 2514/2815 -f 1431/1563 1428/1560 1427/1557 1430/1562 -f 1444/1576 2628/2975 2627/2974 1462/1594 -f 2627/2974 1460/1592 1462/1594 -f 1461/1593 1460/1592 2627/2974 1470/1602 -f 2628/2976 1470/1602 2627/2974 -f 1437/1569 1440/1572 2628/2977 1444/1576 -f 2628/2977 1440/1572 1429/1561 1470/2978 -f 1437/1569 1438/1570 1439/1571 1440/1572 -f 1438/1570 2629/2979 2502/2799 1439/1571 -f 2518/2820 2514/2815 2502/2816 2629/2980 -f 2629/2979 1438/1570 1435/1567 2517/2981 -f 2517/2819 2518/2820 2629/2980 -f 1435/1567 1436/1568 2516/2982 2517/2981 -f 2491/2790 2499/2796 1436/1568 1433/1565 -f 2495/2792 2491/2790 1433/1565 -f 2491/2790 2492/2791 2499/2796 -f 2499/2796 2492/2791 2503/2801 2498/2795 -f 2498/2795 2503/2801 2505/2803 2500/2808 -f 2505/2803 2507/2805 2500/2808 -f 2240/2493 2510/2807 2500/2808 2507/2805 -f 2240/2493 2241/2494 2244/2497 2510/2807 -f 2509/2806 2237/2490 2238/2491 2506/2804 -f 2499/2796 2496/2793 2516/2982 1436/1568 -f 2496/2822 2513/2811 2515/2817 2516/2818 -f 2513/2811 1852/2004 2630/2983 2515/2817 -f 1852/2004 845/2002 2630/2983 -f 2515/2817 2630/2983 1853/2005 2514/2815 -f 845/2002 1854/2006 1853/2005 2630/2983 -f 1601/1742 1599/1740 1586/1727 1582/1723 -f 1582/1723 1586/1727 1584/1725 1571/1712 -f 1563/1703 1571/1712 1584/1725 1570/1711 -f 1564/1704 2247/2500 1573/1714 1563/1703 -f 2245/2515 2247/2505 2249/2506 2255/2512 -f 2255/2512 2249/2506 2251/2508 2252/2509 -f 2631/2984 1578/1719 1579/1720 2632/2985 -f 2621/2961 1609/1750 1583/1724 2633/2986 -f 2633/2986 1583/1724 1572/1713 2634/2987 -f 1572/1713 1573/1714 2634/2987 -f 1623/1764 2621/2961 2633/2986 1580/1721 -f 1580/1721 2633/2986 2634/2987 1579/1720 -f 2634/2987 1573/1714 2632/2985 1579/1720 -f 1625/1766 1624/1765 1581/1722 1575/1716 -f 1575/1716 1581/1722 1578/1719 1574/1715 -f 2635/2988 2246/2499 1574/1715 1578/1719 -f 2631/2984 2635/2988 1578/1719 -f 2635/2988 2631/2984 2246/2499 -f 2246/2499 2631/2984 2632/2985 1573/1714 -f 1587/1728 1588/1729 1568/1709 1569/1710 -f 1588/1729 1591/1732 1567/1708 1568/1709 -f 1591/1732 1593/1734 1566/1707 1567/1708 -f 1565/1706 1595/1736 1596/1705 -f 1629/1770 1674/1816 1597/1738 1594/1735 -f 1597/1738 1595/1736 1593/1734 1594/1735 -f 1595/1736 1565/1706 1566/1707 1593/1734 -f 1566/1707 1565/1706 1557/1697 1560/1700 -f 1560/1700 1557/1697 1558/1698 1559/1699 -f 1558/2012 1857/2013 1559/2501 -f 1934/2092 1935/2093 1932/2090 1930/2088 -f 1940/2098 1934/2092 1930/2088 1939/2097 -f 1935/2093 2023/2190 2022/2189 1932/2090 -f 2048/2219 2049/2220 2037/2205 2039/2209 -f 2038/2208 2052/2224 2053/2225 2045/2216 -f 2029/2197 2058/2233 2059/2234 2027/2195 -f 2063/2238 2064/2239 2595/2922 2060/2235 -f 2064/2239 2068/2244 2076/2258 2595/2922 -f 2076/2258 2068/2244 2079/2261 2078/2260 -f 2080/2262 2083/2267 2079/2261 2070/2247 -f 2560/2872 2562/2874 2058/2233 2029/2197 -f 2027/2195 2059/2234 2589/2916 2028/2196 -f 2063/2238 2048/2219 2039/2209 2050/2221 -f 2051/2223 2052/2224 2049/2220 2046/2217 -f 2610/2946 2023/2190 2024/2191 2025/2192 -f 2610/2946 2562/2874 2560/2872 2609/2945 -f 2381/2657 1940/2098 1939/2097 2223/2476 -f 2057/2232 2561/2873 2637/2990 2636/2989 -f 2638/2991 2641/2994 2640/2993 2639/2992 -f 921/2996 2055/2995 2642/2998 410/2997 -f 410/2997 2642/2998 2644/3000 2643/2999 -f 2043/2214 2641/2994 2638/2991 2042/2213 -f 2042/2213 2638/2991 2645/3001 2613/2949 -f 2645/3001 2638/2991 2639/3003 2646/3002 -f 2640/2993 2055/2230 1351/2227 2647/3004 -f 2057/2232 2636/2989 2040/2211 2056/2231 -f 2040/2211 2636/2989 2644/3000 2043/2214 -f 2043/2214 2644/3000 2642/2998 2641/2994 -f 2641/2994 2642/2998 2055/2995 2640/2993 -f 2639/3005 2640/2993 2647/3004 1351/3006 -f 2025/2192 2026/2193 2648/3007 2561/2873 -f 2637/2990 2561/2873 2648/3007 -f 2013/2180 2035/2203 2036/2204 2587/2914 -f 2044/2215 2045/2216 2588/2915 2041/2212 -f 2053/2225 2054/2226 2028/2196 2589/2916 -f 2590/2917 2159/2377 2160/2378 2176/2399 -f 2176/2399 2160/2378 1359/2397 550/2398 -f 2034/2202 2035/2203 2586/2913 2593/2920 -f 2586/2913 2054/2226 2051/2223 2593/2920 -f 2587/2914 2036/2204 2159/2377 2590/2917 -f 2044/2215 2613/2949 1341/3008 404/2207 -f 2045/2216 2053/2225 2589/2916 2588/2915 -f 2613/2949 2645/3001 1344/3009 1341/3008 -f 1344/3009 2645/3001 2646/3002 1346/3010 -f 2639/3005 1351/3006 1353/3012 2646/3011 -f 1922/2080 1923/2081 2581/2903 1919/2077 -f 1987/2154 1988/2155 1989/2156 2465/2760 -f 1994/2161 1995/2162 2003/2170 2001/2168 -f 1998/2165 1999/2166 2558/2870 2557/2869 -f 1923/2081 2383/2659 2466/2761 2581/2903 -f 1372/2672 1994/2161 2001/2168 707/2128 -f 1998/2165 1995/2162 1996/2163 1997/2164 -f 2578/2899 2579/2900 1806/1950 1917/2075 -f 2580/2901 1368/2902 227/1943 1800/1944 -f 1922/2080 2578/2899 1917/2075 1916/2074 -f 1986/2153 1987/2154 2383/2659 2004/2171 -f 1999/2166 1988/2155 1985/2152 2558/2870 -f 2580/2901 2579/2900 1804/1948 1808/1952 -f 2644/3000 2636/2989 2637/2990 2643/2999 -f 2026/3013 2643/2999 2637/2990 -f 474/2912 428/811 2084/2269 2078/2260 -f 2552/2864 2142/2347 2128/2328 2119/2319 -f 2648/3007 2026/3013 2637/2990 -f 2651/3022 726/102 345/46 2659/3031 -f 1/45 1040/1135 2667/3040 2651/3022 -f 9/113 1022/1116 2666/3039 2653/3025 -f 299/552 300/558 2655/3027 2654/3026 -f 300/558 303/560 2658/3030 2655/3027 -f 2656/3028 349/26 734/14 2657/3029 -f 2657/3029 734/14 305/15 2658/3030 -f 2659/3031 345/46 729/48 2660/3032 -f 2660/3032 729/48 346/50 2661/3033 -f 2661/3033 346/50 348/41 2662/3034 -f 2662/3034 348/41 349/26 2656/3028 -f 291/559 435/827 2663/3035 2654/3026 -f 437/823 442/832 2665/3038 2664/3036 -f 435/827 438/828 2665/3038 2663/3035 -f 7/125 1023/1117 2666/3039 2652/3023 -f 2653/3025 11/117 1041/1136 2667/3040 -f 1386/1512 1385/1511 2668/3041 2669/3042 -f 2670/3043 1388/1514 1384/1510 2668/3041 -f 2672/3045 1394/1520 1391/1517 2671/3044 -f 2674/3047 1902/2060 1901/2059 2673/3046 -f 2675/3048 1904/2062 1902/2060 2674/3047 -f 1906/2064 1909/2067 2676/3049 2677/3050 -f 1903/2061 1906/2064 2677/3050 2675/3048 -f 1967/2129 1386/1512 2669/3042 2678/3051 -f 1968/2130 1967/2129 2678/3051 2679/3052 -f 1969/2131 1968/2130 2679/3052 2680/3053 -f 1909/2067 1969/2131 2680/3053 2676/3049 -f 2681/3054 1892/2048 1891/2047 2673/3046 -f 2683/3057 2087/2275 2085/2272 2682/3055 -f 2683/3057 2092/2281 1892/2048 2681/3054 -f 2672/3045 1399/1529 7/2681 2652/3024 -f 1389/1515 1398/1528 2671/3044 2670/3043 -f 2664/3037 447/840 956/1048 -f 2085/2292 2099/2289 2684/3058 2682/3056 -f 1964/2125 1963/2124 1986/2153 -f 1064/1159 389/9 1065/1160 -f 2686/3060 1886/2042 1889/2045 2685/3059 -f 2687/3061 1893/2049 1891/2047 2685/3059 -f 1903/2061 1893/2049 2687/3061 2688/3062 -f 1906/2064 1903/2061 2688/3062 2689/3063 -f 1885/2041 1886/2042 2686/3060 2690/3064 -f 2692/3066 2397/2683 2396/2682 2691/3065 -f 2420/2706 2398/2684 2693/3067 2694/3068 -f 2696/3070 2422/2708 2421/2707 2695/3069 -f 2697/3071 2415/2701 2422/2708 2696/3070 -f 2423/2709 2415/2701 2697/3071 2698/3072 -f 2699/3073 2424/2710 2423/2709 2698/3072 -f 2428/2714 2424/2710 2699/3073 2700/3074 -f 2689/3063 1907/2065 2428/2714 2700/3074 -f 2692/3066 1399/1529 1398/1528 2693/3067 -f 1389/1515 1385/1511 2695/3069 2694/3068 -f 292/567 441/566 2704/3078 2701/3075 -f 291/559 301/568 2702/3076 2701/3075 -f 2702/3076 301/568 305/15 2703/3077 -f 2703/3077 305/15 734/14 2714/3088 -f 441/566 439/829 2705/3079 2704/3078 -f 884/122 1035/1130 2715/3089 2706/3080 -f 2707/3081 725/118 1055/1150 2716/3090 -f 724/103 727/73 2709/3083 2708/3082 -f 727/73 728/49 2710/3084 2709/3083 -f 2710/3084 728/49 733/51 2711/3085 -f 733/51 742/40 2712/3086 2711/3085 -f 2712/3086 742/40 740/33 2713/3087 -f 740/33 739/27 2714/3088 2713/3087 -f 11/117 1023/1117 2715/3089 2707/3081 -f 2708/3082 726/102 1041/1136 2716/3090 -f 439/829 440/830 947/1038 2705/3079 -f 2691/3065 2396/2682 2395/2680 6/2679 -f 2691/3065 6/2679 2717/3092 -f 2717/3091 6/124 1019/1113 884/122 -f 2717/3091 884/122 2706/3080 -# 2563 polygons - 220 triangles - -# -# object Teath -# - -v 0.646992 1.098272 7.686674 -v -0.498168 1.207523 7.338418 -v -0.489018 1.262315 7.263352 -v -0.553878 1.109966 7.296640 -v -0.590838 1.162658 7.233572 -v -0.524208 1.172942 7.281527 -v 0.777672 1.162354 7.419515 -v 0.770112 1.149199 7.452587 -v 0.813642 1.158140 7.410550 -v 0.177732 1.058604 7.638671 -v 0.176562 1.153134 7.662511 -v 0.099462 1.030707 7.641737 -v 0.661992 1.161874 7.302512 -v 0.649722 1.181476 7.368491 -v 0.651252 1.257355 7.356377 -v 0.724002 1.196665 7.296505 -v 0.792612 1.233307 7.134400 -v 0.780852 1.299274 7.113332 -v 0.812562 1.145015 7.074571 -v 0.206592 0.950712 7.713820 -v 0.124272 0.928458 7.680900 -v 0.427602 0.986510 7.584771 -v 0.288102 0.949718 7.650836 -v 0.364392 0.980897 7.638793 -v 0.535002 1.002248 7.482755 -v 0.920712 1.179859 7.101523 -v 1.004352 1.275145 6.840358 -v 0.953142 1.235299 6.870449 -v 0.954432 1.167158 6.846569 -v -0.429738 0.981402 7.581848 -v -0.443508 1.023920 7.524744 -v -0.368538 0.997260 7.548769 -v -0.406578 1.005824 7.464804 -v -0.267468 1.006419 7.653768 -v -0.327528 1.116846 7.479644 -v -0.787758 1.128415 7.200575 -v -0.815508 1.213278 7.176456 -v -0.765528 1.141506 7.134546 -v -0.733788 1.085058 7.101675 -v -0.700008 1.294404 7.065364 -v -0.670218 1.283618 7.077376 -v -0.684768 1.196010 7.074491 -v -0.762498 1.259642 6.900349 -v -0.809088 1.177961 6.846553 -v -0.773658 1.232553 6.840425 -v -0.679728 1.145573 7.431536 -v -0.644958 1.135392 7.440613 -v -0.614118 1.066061 7.425707 -v -0.652368 1.147625 7.404524 -v -0.617808 1.071350 7.353646 -v -0.666558 1.061349 7.287652 -v -0.816288 1.157085 6.924590 -v -0.836118 1.208889 6.864449 -v 0.019692 1.144578 7.752522 -v -0.064638 1.080914 7.716641 -v -0.706728 1.062978 7.179709 -v -0.756438 1.106262 7.233658 -v -0.773478 1.104153 7.032615 -v 0.008022 0.991494 7.704788 -v 0.006642 0.973935 7.788859 -v 0.520482 1.221701 7.578448 -v 0.541722 1.312328 7.593322 -v 0.538122 1.306025 7.596353 -v 0.438342 1.084475 7.497642 -v 0.445002 1.123804 7.518634 -v 0.499182 1.106000 7.446610 -v 0.569472 1.162369 7.428578 -v 0.590772 1.164226 7.467577 -v 0.510852 1.163962 7.488542 -v 0.531912 1.237252 7.548395 -v 0.497202 1.152064 7.557592 -v 0.454062 1.129891 7.569620 -v 0.475362 1.128356 7.551588 -v 0.801132 1.020566 7.296781 -v 0.750882 1.001459 7.359799 -v 0.781962 1.028513 7.395736 -v 0.805122 1.158493 7.446529 -v 0.737112 1.081382 7.437676 -v 0.797562 1.231714 7.461427 -v 0.801492 1.237717 7.458397 -v 0.804732 1.233211 7.452454 -v -0.661998 1.125912 7.137589 -v -0.162978 1.011480 7.626751 -v -0.287148 1.117898 7.575590 -v -0.310968 1.049189 7.569748 -v -0.239778 1.077195 7.635713 -v -0.225708 1.204031 7.593492 -v -0.199248 1.211570 7.620489 -v -0.170028 1.279626 7.590353 -v -0.168288 1.113183 7.626594 -v -0.241488 1.029156 7.608779 -v -0.748038 1.213956 7.038482 -v -0.771018 1.151559 7.035561 -v -0.688038 1.131342 7.155616 -v -0.673248 1.195527 7.146451 -v -0.680208 1.221006 7.134418 -v -0.645738 1.355618 7.080193 -v -0.690378 1.306742 7.095284 -v -0.645768 1.360416 7.074232 -v -0.733998 1.234086 7.053466 -v -0.744378 1.191277 7.113501 -v -0.738258 1.142358 7.101583 -v 0.546162 1.308419 7.590308 -v 0.569112 1.236949 7.545373 -v 0.555072 1.234907 7.578427 -v 0.580182 1.178074 7.497493 -v 0.552972 1.106116 7.521593 -v 0.610542 1.178602 7.455470 -v 0.588012 1.105361 7.425648 -v 0.530832 1.078151 7.479706 -v -0.337368 1.133420 7.527594 -v 0.754812 1.104221 7.266623 -v 0.717582 1.140952 7.353539 -v 0.705852 1.091414 7.332650 -v 0.680742 1.276837 7.344353 -v 0.645252 1.345207 7.323281 -v 0.635772 1.153594 7.380527 -v 0.640182 1.080994 7.380641 -v 0.754362 1.186099 7.257521 -v -0.595878 1.202300 7.254473 -v -0.634158 1.142024 7.269585 -v -0.576768 1.189523 7.338449 -v -0.572448 1.222706 7.263415 -v -0.500448 1.294433 7.281338 -v -0.521058 1.279397 7.254353 -v -0.455028 1.333673 7.236232 -v -0.447858 1.332176 7.245298 -v -0.477528 1.270772 7.299414 -v -0.584058 1.134615 7.332583 -v 0.264582 0.986331 7.659842 -v 0.184692 0.980364 7.677796 -v 0.186042 1.026306 7.710775 -v 0.254562 1.058340 7.668702 -v 0.179292 1.236239 7.668426 -v 0.179622 1.166990 7.698561 -v 0.173892 1.241343 7.668417 -v 0.169122 1.235945 7.671446 -v 0.102342 0.980358 7.674866 -v 0.108312 1.052661 7.680704 -v -0.148788 1.012932 7.596811 -v -0.299268 1.051232 7.536695 -v -0.179838 0.948486 7.629872 -v -0.381948 0.971220 7.590837 -v 0.097362 0.986601 7.641807 -v 0.081792 1.059864 7.683712 -v -0.485658 0.987759 7.422810 -v -0.538428 1.019949 7.479796 -v 0.338772 1.040822 7.590724 -v 0.407652 1.063856 7.551689 -v 0.292482 1.221747 7.608479 -v 0.319062 1.215713 7.584410 -v -0.659658 1.022613 7.266748 -v 0.261672 1.290107 7.581365 -v 0.258972 1.283816 7.584301 -v 0.263262 1.199244 7.605494 -v 0.260712 1.021052 7.608794 -v 0.336072 1.087973 7.620683 -v 0.382332 1.131678 7.560555 -v 0.568482 1.125124 7.404561 -v 1.005222 1.164479 6.861495 -v 1.007862 1.257709 6.813375 -v 1.026792 1.210711 6.882482 -v 0.987762 1.338811 6.879259 -v 0.954342 1.408171 6.921175 -v 0.991722 1.343365 6.915233 -v 0.951612 1.405186 6.930151 -v 0.971172 1.320292 6.936326 -v 0.976062 1.243195 6.936445 -v 0.042492 0.920682 7.692904 -v 0.433212 0.931874 7.560865 -v 0.444012 0.967976 7.623799 -v 0.292422 0.934496 7.701855 -v 0.289722 0.893885 7.629955 -v 0.972102 1.141795 6.933583 -v 1.015752 1.190759 6.783452 -v 1.011492 1.272970 6.789367 -v 0.388512 0.906512 7.647974 -v 0.376002 0.996962 7.746799 -v 0.460002 1.065611 7.518724 -v 0.415152 1.067841 7.794662 -v 0.833802 1.057888 7.182740 -v 0.853482 1.125757 7.230607 -v 0.430482 1.011017 7.719769 -v 0.866052 1.052507 7.194742 -v 0.909552 1.070090 7.125682 -v 0.412512 1.000278 7.752747 -v 0.931692 1.093079 7.050663 -v 0.904602 1.251376 7.176394 -v -0.609138 1.211258 7.230474 -v 0.365742 0.902531 7.596985 -v 0.207432 0.926955 7.677877 -v 0.231942 0.937884 7.758886 -v 0.208662 0.895185 7.692944 -v 0.868722 1.322779 7.179305 -v 0.868422 1.316479 7.182334 -v 0.879852 1.230404 7.194463 -v 0.641832 1.017287 7.506808 -v 0.878172 1.153603 7.194583 -v 0.526422 0.981415 7.590817 -v 0.932172 1.115126 7.149598 -v 0.555162 0.994340 7.599770 -v 0.601572 1.037303 7.644749 -v -0.519528 1.118799 7.383603 -v -0.007668 1.011198 7.635818 -v 0.686532 0.997340 7.410800 -v 0.694782 1.064018 7.458672 -v 0.074052 1.006116 7.650749 -v 0.850632 1.154956 7.101562 -v 0.071022 1.046645 7.668718 -v 0.856782 1.203577 7.113481 -v 0.846372 1.246381 7.056376 -v 0.802752 1.319044 7.095264 -v 0.812382 1.307002 7.065346 -v -0.110508 1.071291 7.695689 -v -0.086658 1.055319 7.653691 -v -0.007758 1.073349 7.671699 -v -0.084888 1.061385 7.698724 -v 0.758112 1.368217 7.080173 -v -0.008838 1.153236 7.728520 -v 0.785622 1.208131 7.149454 -v 0.061302 1.053615 7.713663 -v -0.093288 0.996833 7.665775 -v -0.016158 1.017636 7.728734 -v 0.869652 1.235824 7.017392 -v 0.883392 1.163848 7.035538 -v -0.041898 1.148159 7.746562 -v 0.780432 1.041536 7.278712 -v 0.834882 1.092299 7.320655 -v 0.800442 1.143643 7.155595 -v -0.012558 1.153299 7.767520 -v -0.013398 1.228299 7.764476 -v -0.008088 1.233396 7.767395 -v -0.003228 1.227695 7.767407 -v 0.986262 1.210585 6.801456 -v 0.949842 1.245509 6.879405 -v 0.944142 1.261888 6.801376 -v 0.872892 1.324627 6.825264 -v 0.040422 1.075230 7.725712 -v 0.806172 1.367827 6.831241 -v 0.068862 0.988161 7.680807 -v 0.087672 1.060521 7.716671 -v 0.846672 1.310902 6.873261 -v 0.860472 1.335466 6.855278 -v -0.013518 0.985764 7.683831 -v 0.879882 1.254535 6.900358 -v -0.822048 1.114761 6.915589 -v -0.838488 1.141943 6.837544 -v 0.881922 1.229359 6.915411 -v 0.917202 1.174480 6.927491 -v -0.866898 1.173636 6.765536 -v 0.959742 1.196890 6.870508 -v -0.894528 1.251660 6.786380 -v 0.964242 1.196161 6.783444 -v 0.949272 1.272052 6.780395 -v -0.859188 1.213259 6.783420 -v -0.890958 1.234894 6.807460 -v 0.489102 0.946844 7.539877 -v 0.557532 0.955769 7.494821 -v 0.617142 0.986594 7.446797 -v 0.590232 0.955244 7.539865 -v 0.638382 1.039403 7.641722 -v 0.652422 1.103072 7.689596 -v -0.841278 1.298940 6.900288 -v -0.357648 0.948009 7.515890 -v -0.425118 0.956637 7.470832 -v -0.858408 1.213489 6.930451 -v -0.399678 0.972390 7.569866 -v -0.518058 1.013877 7.623727 -v -0.481308 1.014777 7.626746 -v -0.840618 1.180851 6.966482 -v -0.899958 1.169750 6.777535 -v -0.541518 1.067943 7.668685 -v -0.886998 1.250847 6.837374 -v -0.909978 1.184601 6.876479 -v -0.869238 1.312116 6.879302 -v -0.515088 1.008564 7.488784 -v -0.512688 1.007409 7.518817 -v -0.459048 0.947397 7.512868 -v -0.831048 1.381488 6.930189 -v -0.834588 1.378482 6.924242 -v -0.469038 1.182983 7.371510 -v -0.831828 1.374891 6.933220 -v -0.872868 1.314564 6.915277 -v -0.852468 1.290301 6.936374 -v -0.479388 1.140032 7.341548 -v -0.492558 1.181460 7.356496 -v -0.855828 1.112082 6.921638 -v -0.851208 1.182903 6.939469 -v -0.889188 1.139267 6.852562 -v -0.448158 1.336367 7.239252 -v -0.596478 1.011894 7.320782 -v -0.572178 1.048094 7.446701 -v -0.543108 0.999096 7.383790 -v -0.712278 1.076384 7.308690 -v -0.614658 1.127277 7.242599 -v -0.498108 1.103463 7.359642 -v -0.688518 1.144021 7.395556 -v 0.816102 1.080626 7.335689 -v -0.673698 1.224797 7.443404 -v 0.712782 1.059476 7.437714 -v -0.590448 1.043565 7.425744 -v -0.555078 1.038726 7.398743 -v -0.680838 1.003146 7.287745 -v -0.660798 1.013508 7.386788 -v -0.688398 1.080948 7.350705 -v 0.740562 1.088765 7.365613 -v 0.811392 1.096564 7.362670 -v 0.788592 1.079369 7.299710 -v -0.677088 1.220280 7.437461 -v 0.717252 1.031110 7.329724 -v -0.669918 1.218789 7.443412 -v 0.677142 1.056734 7.410707 -v 0.663882 1.017716 7.392735 -v -0.566238 0.979932 7.401856 -v -0.630768 0.984348 7.350853 -v -0.693768 1.064404 7.323721 -v 0.128622 1.077870 7.686707 -v -0.776658 1.164560 6.912490 -v -0.753078 1.196059 6.906491 -v 0.147792 1.152576 7.686590 -v -0.846858 1.200957 6.783436 -v -0.820218 1.231256 6.780460 -v -0.831888 1.277160 6.780388 -v 0.209412 1.154957 7.680545 -v 0.233742 1.081752 7.674706 -v 0.280062 1.067337 7.662643 -v 0.257202 1.036680 7.626712 -v 0.262302 0.992881 7.626782 -v 0.179232 0.987780 7.626788 -v 0.223302 1.093673 7.620671 -v -0.731208 1.310853 6.840301 -v -0.729288 1.315995 6.873253 -v 0.249882 1.093053 7.611610 -v 0.263772 1.122453 7.611563 -v -0.842358 1.201998 6.870502 -v -0.826788 1.266984 6.801373 -v -0.807258 1.282913 6.816359 -v -0.832458 1.250612 6.879397 -v -0.755508 1.329723 6.825260 -v 0.268182 1.286501 7.581371 -v -0.688788 1.372936 6.831233 -v -0.743088 1.340277 6.855271 -v 0.284412 1.204895 7.575455 -v -0.684468 1.370849 6.837187 -v -0.682818 1.374735 6.834160 -v 0.358992 1.150295 7.575539 -v -0.799818 1.179588 6.927483 -v -0.747498 1.233294 6.933442 -v -0.764538 1.234466 6.915403 -v 0.402912 1.146059 7.551560 -v 0.395802 1.066820 7.521657 -v 0.380622 1.108210 7.521589 -v -0.868878 1.215690 6.801448 -v 0.303162 1.111556 7.551613 -v -0.700188 1.132415 7.074589 -v 0.319392 1.042543 7.542748 -v -0.650928 1.356807 7.071218 -v 0.237732 1.066599 7.578691 -v 0.246402 1.023102 7.578762 -v 0.614262 1.157509 7.395535 -v 0.609222 1.125658 7.356585 -v -0.668478 1.286973 7.113349 -v -0.731118 1.183625 7.014544 -v 0.643602 1.339510 7.326221 -v 0.650772 1.341001 7.320265 -v -0.746358 1.146420 7.014602 -v -0.757248 1.223226 7.017409 -v 0.658932 1.258198 7.317373 -v 0.694782 1.265983 7.311412 -v 0.739092 1.174732 7.278502 -v -0.650448 1.164003 7.134509 -v -0.655848 1.198553 7.164485 -v 0.731232 1.105682 7.242631 -v -0.723078 1.101402 7.191644 -v 0.668772 1.091053 7.293650 -v 0.720672 1.148281 7.245587 -v 0.614682 1.081849 7.356653 -v -0.786918 1.141079 7.053611 -v -0.825438 1.141417 7.077599 -v -0.830298 1.154670 7.107515 -v 0.762822 1.176602 7.134489 -v -0.848418 1.287126 7.212320 -v 0.758142 1.372717 7.074214 -v 0.782592 1.296217 7.077354 -v 0.763332 1.369405 7.071199 -v 0.797142 1.208608 7.074471 -v -0.776388 1.055974 7.113713 -v -0.800328 1.083762 7.041616 -v 0.860412 1.226257 7.038464 -v -0.817308 1.082418 7.140680 -v -0.846078 1.212640 7.155491 -v -0.849888 1.283226 7.206374 -v 0.843492 1.196224 7.014523 -v 0.858732 1.158722 7.014583 -v -0.845778 1.280838 7.215350 -v -0.850848 1.209699 7.191476 -v 0.774372 1.138216 7.140590 -v 0.768222 1.211152 7.164463 -v -0.821148 1.197126 7.209440 -v 0.870462 1.191250 6.906499 -v 0.864882 1.228199 6.933447 -v -0.734688 1.043186 7.185691 -v -0.766248 1.104722 7.206654 -v -0.836658 1.156089 7.056519 -v 0.801852 1.365742 6.837196 -v -0.072198 0.996567 7.683813 -v 0.800202 1.369642 6.834167 -v 0.848592 1.305745 6.840310 -v -0.153798 0.989643 7.668808 -v 0.924642 1.277812 6.819388 -v 0.891042 1.227445 6.840434 -v -0.159768 1.000212 7.710814 -v 0.937602 1.226156 6.783397 -v -0.109308 1.007016 7.845753 -v -0.132408 1.021848 7.926754 -v 0.926472 1.172857 6.846559 -v 0.894042 1.159457 6.912498 -v -0.087888 1.004478 7.752739 -v -0.090798 1.015089 7.635808 -v -0.004998 1.001763 7.743773 -v -0.152808 0.955155 7.671884 -v 0.187092 0.938529 7.782872 -v 0.205602 0.930681 7.755877 -v 0.148002 1.035324 7.908698 -v -0.140688 0.986622 7.845785 -v -0.146118 0.968505 7.770833 -v 0.143142 1.038921 7.911713 -v 0.141252 0.972258 7.866867 -v 0.137832 1.034718 7.908698 -v -0.114018 0.975858 7.869788 -v -0.122448 1.021848 7.926754 -v -0.128508 1.024560 7.932795 -v 0.059352 0.925005 7.770898 -v -0.042978 0.969444 7.794817 -v -0.080238 0.987240 7.860800 -v -0.017268 0.969414 7.773850 -v -0.084498 0.926754 7.740869 -v 0.128352 0.881106 7.704958 -v 0.006372 0.956709 7.707862 -v -0.073128 0.944379 7.689845 -v 0.046422 0.889200 7.707967 -v 0.133812 0.882081 7.758974 -v -0.160728 0.967863 7.740802 -v -0.187908 0.971757 7.743817 -v 0.033642 0.930420 7.779862 -v -0.380868 1.086444 7.410662 -v -0.321648 1.074533 7.470646 -v 0.081942 0.934638 7.791852 -v -0.448848 1.098366 7.365599 -v -0.490248 1.162034 7.404500 -v -0.471138 1.150052 7.419537 -v -0.449178 1.139796 7.380548 -v -0.460668 1.168995 7.443491 -v -0.411648 1.236260 7.485410 -v 0.129492 0.959466 7.743838 -v -0.424578 1.314599 7.509274 -v 0.169932 0.978222 7.845798 -v -0.416748 1.313108 7.515316 -v -0.401238 1.227305 7.518474 -v 0.137262 0.993807 7.836802 -v -0.391638 1.151585 7.440589 -v 0.108312 0.976125 7.851844 -v 0.048852 0.944742 7.731868 -v -0.469308 1.083711 7.389701 -v 0.314682 0.934172 7.683911 -v -0.448758 1.236251 7.479457 -v 0.340692 0.948593 7.698903 -v -0.420138 1.319399 7.512287 -v 0.410112 1.062441 7.794672 -v 0.394212 1.019423 7.722778 -v -0.435438 1.240508 7.515431 -v -0.379578 1.153799 7.509523 -v 0.419082 1.064834 7.788716 -v 0.433662 0.973115 7.653821 -v -0.344208 1.060466 7.491728 -v -0.358368 1.128899 7.512584 -v -0.435978 1.102749 7.482595 -v -0.413898 1.066392 7.446674 -v 0.467772 0.980567 7.617829 -v 0.421092 0.961850 7.548827 -v -0.222288 1.029674 7.560713 -v 0.344922 0.946904 7.578877 -v -0.127188 1.085595 7.635701 -v 0.275202 0.923564 7.617918 -v 0.494262 1.000583 7.566803 -v -0.308058 1.131383 7.563575 -v -0.284988 1.092935 7.536629 -v -0.207588 1.099286 7.566647 -v -0.264198 1.137417 7.587554 -v 0.615522 1.061573 7.620721 -v 0.655002 1.100666 7.680628 -v -0.176448 1.275719 7.587337 -v 0.650202 1.052546 7.608743 -v 0.638112 1.020041 7.539763 -v -0.167178 1.273325 7.593383 -v 0.567642 1.030547 7.539746 -v -0.169518 1.189662 7.617500 -v -0.190878 1.193516 7.587467 -v 0.618732 1.039442 7.476746 -v 0.664452 1.029875 7.497725 -v -0.153738 1.084080 7.626637 -v 0.604002 1.018088 7.440796 -v -0.141108 1.056426 7.593721 -v 0.473862 0.977435 7.533789 -v -0.250638 0.973332 7.593851 -v 0.507972 0.981152 7.611784 -v 0.831282 1.101397 7.188622 -v 0.866892 1.124518 7.206623 -v -0.332538 1.013847 7.602761 -v -0.327648 0.989781 7.566817 -v -0.371568 1.007889 7.635820 -v 0.873492 1.237246 7.158379 -v -0.330108 1.036248 7.737768 -v 0.872532 1.318867 7.173268 -v 0.904782 1.245916 7.140421 -v -0.293628 1.044354 7.740684 -v 0.863082 1.145393 7.125565 -v 0.926082 1.161211 7.077565 -v 0.895122 1.140779 7.050590 -v -0.306438 1.086165 7.809649 -v 0.933702 1.175584 7.053555 -v 0.900522 1.099052 7.035640 -v -0.191148 0.974331 7.662790 -v -0.193848 0.958512 7.710882 -v 0.861312 1.076665 7.107637 -v -0.339708 0.959505 7.578859 -v 0.933162 1.187389 6.933511 -v 0.958152 1.212958 6.972476 -v 0.968532 1.213220 6.948486 -v -0.347718 0.995001 7.641794 -v -0.336198 0.999249 7.671814 -v -0.311358 1.091571 7.812662 -v -0.315528 1.088859 7.806623 -v -0.311148 1.024599 7.767722 -v -0.241968 0.973206 7.710856 -v -0.274878 1.020996 7.761778 -v 0.950892 1.411489 6.927117 -v -0.216648 0.958488 7.695866 -v -0.292128 0.932331 7.662857 -v 0.959802 1.327138 6.900244 -v -0.194298 0.919098 7.638890 -v -0.271278 0.928659 7.611866 -v 0.975612 1.235170 6.789423 -v -0.345108 0.980405 7.515839 -v 0.982662 1.194338 6.774476 -v -0.475248 1.020762 7.422758 -v -0.493038 1.036119 7.458714 -v 0.938292 1.144483 6.924606 -v -0.496578 1.040550 7.605740 -v -0.533478 1.065252 7.674734 -v -0.529938 1.029723 7.590744 -v -0.539388 1.069752 7.677656 -v -0.919117 1.431730 7.467472 -v -0.906543 1.405713 7.335268 -v -0.873513 1.336839 7.358689 -v -0.089526 1.194600 8.128790 -v -0.071677 1.274502 8.195261 -v -0.058806 1.167306 8.128510 -v -0.030696 1.193316 8.140776 -v 0.112943 1.408308 8.235277 -v 0.244254 1.195270 8.119732 -v -0.552606 1.283311 7.898312 -v 0.936238 1.231223 7.399996 -v 0.926098 1.304213 7.430527 -v 0.925828 1.302404 7.430515 -v 0.917035 1.230797 7.457033 -v 0.925975 1.303607 7.430523 -v 0.921264 1.276142 7.493323 -v 0.841794 1.223213 7.630932 -v 0.827996 1.294412 7.658430 -v 0.828237 1.296209 7.658442 -v 0.700645 1.283681 7.850350 -v 0.474145 1.178008 8.020643 -v 0.503214 1.285270 8.081350 -v 0.427344 1.249945 8.069115 -v -0.902195 1.289539 7.184410 -v -0.902135 1.288933 7.184404 -v -0.902105 1.287742 7.184399 -v -0.907802 1.216711 7.213847 -v -0.292716 1.249901 8.075151 -v 1.046997 1.329786 7.097627 -v 1.029356 1.268100 7.121190 -v 1.016127 1.221087 7.150896 -v 1.005686 1.291362 7.181411 -v 1.005776 1.293468 7.181427 -v 1.005716 1.292862 7.181419 -v -0.802293 1.204621 7.426809 -v -0.734166 1.438555 7.800502 -v -0.715356 1.395991 7.794260 -v -0.867486 1.311865 7.448514 -v -0.849184 1.446568 7.569565 -v -0.817084 1.335589 7.526687 -v -0.698948 1.268134 7.721233 -v -0.978095 1.441281 7.071467 -v -0.925774 1.264513 7.121155 -v -0.912542 1.217158 7.153880 -v -0.725167 1.223209 7.630924 -v -0.766808 1.303813 7.685497 -v -0.753127 1.268977 7.607252 -v -0.962105 1.303605 7.187438 -v -0.915905 1.263573 7.247221 -v -1.003982 1.428378 7.191408 -v -0.836555 1.440136 7.587555 -v -0.815945 1.423645 7.707379 -v -0.554976 1.426246 8.043406 -v -0.943866 1.395117 7.308187 -v -0.648936 1.411243 7.962367 -v -0.537306 1.383715 8.034142 -v -0.189577 1.411928 8.193369 -v -0.188017 1.369478 8.172020 -v -0.152736 1.300322 8.153503 -v -0.531215 1.255880 7.958183 -v -0.536466 1.210535 7.921888 -v 0.020063 1.297332 8.192486 -v -0.081337 1.393809 8.250191 -v 0.047303 1.365204 8.222984 -v 0.220673 1.426185 8.172413 -v 0.344333 1.412599 8.184315 -v -0.603606 1.291474 7.931421 -v 0.307494 1.300960 8.147470 -v 0.213564 1.267519 8.126272 -v -0.671046 1.385215 7.833187 -v 0.278604 1.241095 8.129110 -v -0.270007 1.419971 8.160374 -v -0.259777 1.377512 8.142132 -v -0.278586 1.309055 8.108519 -v 0.213564 1.267219 8.126268 -v -0.368616 1.285193 8.090408 -v -0.315666 1.204505 8.047831 -v 0.213534 1.265721 8.126261 -v 0.213534 1.167976 8.119453 -v -0.484596 1.420712 8.061405 -v -0.477996 1.378274 8.040147 -v -0.391657 1.404509 8.142319 -v -0.058836 1.266861 8.135237 -v 0.107423 1.365870 8.214018 -v -0.058806 1.266552 8.135237 -v -0.123846 1.240437 8.138077 -v 0.236063 1.394467 8.241226 -v 0.134663 1.298001 8.183430 -v -0.058806 1.265052 8.135225 -v 0.226403 1.275184 8.186293 -v 0.156174 1.239102 8.156013 -v 0.185424 1.194261 8.134739 -v -0.001446 1.238445 8.165073 -v 0.342773 1.370161 8.163054 -v -0.065947 1.425516 8.181471 -v 0.041813 1.407672 8.241314 -v 1.047475 1.399026 7.308224 -v 1.008386 1.193562 7.180737 -v 1.034666 1.456029 7.185658 -v -0.342696 1.277498 8.036338 -v -0.339515 1.177964 8.026588 -v -0.370235 1.204682 8.023842 -v -0.342576 1.275689 8.036325 -v -0.342666 1.277201 8.036338 -v -0.406236 1.250276 8.024157 -v -0.438816 1.309619 8.033538 -v -0.361896 1.436195 8.076528 -v -0.931085 1.452429 7.185625 -v -0.959433 1.439520 7.308492 -v -0.929465 1.324554 7.274650 -v -0.904805 1.189636 7.183721 -v -0.943411 1.325877 7.097592 -v -0.962854 1.396899 7.068234 -v 0.496524 1.436239 8.070492 -v 0.394404 1.377556 8.136095 -v 0.477264 1.277266 8.027279 -v 0.450295 1.204582 8.038862 -v 0.477204 1.275754 8.027267 -v 0.477324 1.277563 8.027279 -v 0.573444 1.309682 8.024574 -v 0.404633 1.420036 8.151403 -v 0.413214 1.309132 8.099552 -v 0.504865 1.204759 8.014785 -v 0.540865 1.250350 8.015099 -v 0.526283 1.404574 8.133261 -v 0.619194 1.420775 8.052437 -v 0.612624 1.378319 8.034111 -v 0.703014 1.426604 7.995440 -v 0.685344 1.384073 7.986175 -v 0.738475 1.443089 7.875525 -v 0.679255 1.256534 7.910130 -v 0.700525 1.282481 7.850340 -v 0.717923 1.211567 7.825864 -v 0.781286 1.316783 7.796559 -v 0.700735 1.284287 7.850353 -v 0.683095 1.315667 7.946610 -v 0.684506 1.211201 7.873837 -v 0.751645 1.292129 7.883458 -v 0.694466 1.184702 7.846644 -v 0.748826 1.257296 7.808143 -v 0.796975 1.411613 7.914311 -v 0.834505 1.428074 7.797418 -v 0.819086 1.385573 7.785132 -v 0.869156 1.455074 7.677667 -v 0.815576 1.268138 7.721241 -v 0.828147 1.295615 7.658441 -v 0.815756 1.222805 7.684947 -v 0.900597 1.328777 7.595681 -v 0.936147 1.397630 7.575188 -v 0.850795 1.438559 7.800511 -v 0.831985 1.395995 7.794268 -v 0.824096 1.327589 7.754701 -v 0.821424 1.196633 7.654735 -v 0.869757 1.268981 7.607261 -v 0.883436 1.303805 7.685506 -v 0.932576 1.423637 7.707388 -v 0.953183 1.440141 7.587565 -v 0.965814 1.446573 7.569574 -v 0.969087 1.463088 7.446640 -v 0.990148 1.336845 7.358699 -v 0.961228 1.277007 7.376324 -v 1.041355 1.448250 7.344544 -v 1.023175 1.405719 7.335278 -v 0.946344 1.404020 7.563240 -v 1.035747 1.431735 7.467482 -v 0.933714 1.335593 7.526696 -v 0.984118 1.311870 7.448524 -v 0.918925 1.204625 7.426818 -v 1.063015 1.443438 7.305508 -v 1.107596 1.432287 7.191446 -v 1.033076 1.328463 7.274687 -v 1.019486 1.267161 7.247254 -v 1.011386 1.220637 7.210952 -v 1.065686 1.307514 7.187473 -v 1.081676 1.445178 7.071506 -v 1.066437 1.400808 7.068272 -v -0.535056 1.315331 7.991556 -v -0.552696 1.283921 7.898318 -v -0.546396 1.184366 7.891679 -v -0.552456 1.282112 7.898306 -v -0.569886 1.210921 7.870805 -v -0.600786 1.256662 7.853174 -v -0.633245 1.316425 7.844615 -v -0.590435 1.442731 7.923582 -v -0.686436 1.427716 7.845471 -v -0.752525 1.455070 7.677659 -v -0.707465 1.327585 7.754693 -v -0.699125 1.222813 7.684939 -v -0.711518 1.295611 7.658432 -v -0.704794 1.196629 7.654726 -v -0.711365 1.294408 7.658422 -v -0.711608 1.296205 7.658434 -v -0.783934 1.328773 7.595672 -v -0.819517 1.397626 7.575179 -v -0.829714 1.404025 7.563230 -v -0.852454 1.463083 7.446630 -v -0.804637 1.276138 7.493314 -v -0.800406 1.230805 7.457024 -v -0.819603 1.231219 7.399987 -v -0.809193 1.302400 7.430506 -v -0.844593 1.277002 7.376315 -v -0.809346 1.303603 7.430514 -v -0.809466 1.304209 7.430518 -v -0.924726 1.448245 7.344533 -# 756 vertices - -vt 0.852877 -1.220611 0.000000 -vt 0.852878 -1.314086 0.000000 -vt 0.738006 -1.280950 0.000000 -vt 0.967750 -1.280949 0.000000 -vt 0.776321 -1.339274 0.000000 -vt 0.852879 -1.438286 0.000000 -vt 0.808006 -1.437567 0.000000 -vt 0.712129 -1.519191 0.000000 -vt 0.563034 -1.742663 0.000000 -vt 0.712129 -1.885656 0.000000 -vt 0.624738 -1.551237 0.000000 -vt 0.861225 -1.742663 0.000000 -vt 0.799520 -1.551237 0.000000 -vt 0.712129 -1.321987 0.000000 -vt 0.697711 -1.335944 0.000000 -vt 0.929435 -1.339273 0.000000 -vt 0.897752 -1.437567 0.000000 -vt 0.504728 -1.805069 0.000000 -vt 0.478209 -1.970150 0.000000 -vt 0.430925 -1.783690 0.000000 -vt 0.482055 -1.991309 0.000000 -vt 0.946050 -1.970150 0.000000 -vt 0.942204 -1.991309 0.000000 -vt 0.993334 -1.783690 0.000000 -vt 0.972990 -1.222464 0.000000 -vt 0.997270 -1.318206 0.000000 -vt 0.732764 -1.222465 0.000000 -vt 0.708486 -1.318208 0.000000 -vt 0.746382 -1.307231 0.000000 -vt 0.845477 -1.548115 0.000000 -vt 0.852880 -1.555281 0.000000 -vt 0.860283 -1.548115 0.000000 -vt 0.959374 -1.307229 0.000000 -vt 0.712129 -2.000510 0.000000 -vt 0.726547 -1.335944 0.000000 -vt 0.919531 -1.805069 0.000000 -vt 0.381943 -1.005024 0.000000 -vt 0.763386 -1.148766 0.000000 -vt 0.662045 -1.373517 0.000000 -vt 0.477302 -1.717692 0.000000 -vt 0.381943 -1.412606 0.000000 -vt 0.580355 -1.569322 0.000000 -vt 0.381943 -1.803237 0.000000 -vt 0.286584 -1.717692 0.000000 -vt 0.183531 -1.569322 0.000000 -vt 0.000499 -1.148766 0.000000 -vt 0.101841 -1.373517 0.000000 -vt 0.006911 -1.003335 0.000000 -vt 0.280035 -1.724298 0.000000 -vt 0.185014 -1.751085 0.000000 -vt 0.185014 -1.751864 0.000000 -vt 0.319158 -1.818071 0.000000 -vt 0.230681 -1.653243 0.000000 -vt 0.185014 -1.749257 0.000000 -vt 0.089991 -1.724300 0.000000 -vt 0.139345 -1.653244 0.000000 -vt 0.050870 -1.818073 0.000000 -vt 0.185015 -1.994714 0.000000 -vt 0.756974 -1.003335 0.000000 -vt 0.005409 -1.995356 0.000000 -vt 0.002338 -1.925709 0.000000 -vt 0.185013 -1.612275 0.000000 -vt 0.367692 -1.925706 0.000000 -vt 0.364621 -1.995354 0.000000 -vt 0.876568 -1.457038 0.000000 -vt 0.452774 -1.866606 0.000000 -vt 0.972274 -1.863591 0.000000 -vt 0.453325 -1.868898 0.000000 -vt 0.972151 -1.863956 0.000000 -vt 0.479686 -1.868182 0.000000 -vt 0.876025 -1.457774 0.000000 -vt 0.451276 -1.860724 0.000000 -vt 0.972277 -1.863576 0.000000 -vt 0.944247 -1.867623 0.000000 -vt 0.828884 -1.457134 0.000000 -vt 0.972069 -1.864459 0.000000 -vt 0.477639 -1.867702 0.000000 -vt 0.877212 -1.457549 0.000000 -vt 0.829157 -1.456704 0.000000 -vt 0.451852 -1.863192 0.000000 -vt 0.949354 -1.868694 0.000000 -vt 0.831205 -1.456800 0.000000 -vt 0.876293 -1.457682 0.000000 -vt 0.949906 -1.868694 0.000000 -vt 0.473767 -1.868634 0.000000 -vt 0.875387 -1.457669 0.000000 -vt 0.828770 -1.457858 0.000000 -vt 0.828628 -1.458084 0.000000 -vt 0.972724 -1.861599 0.000000 -vt 0.876879 -1.457280 0.000000 -vt 0.469951 -1.869397 0.000000 -vt 0.948142 -1.868755 0.000000 -vt 0.829543 -1.457311 0.000000 -vt 0.875525 -1.457883 0.000000 -vt 0.972246 -1.863524 0.000000 -vt 0.452091 -1.864086 0.000000 -vt 0.828780 -1.456825 0.000000 -vt 0.876632 -1.457644 0.000000 -vt 0.487185 -1.869714 0.000000 -vt 0.972161 -1.863907 0.000000 -vt 0.972160 -1.863962 0.000000 -vt 0.452102 -1.863599 0.000000 -vt 0.971248 -1.867505 0.000000 -vt 0.829384 -1.457744 0.000000 -vt 0.972345 -1.863358 0.000000 -vt 0.875706 -1.457610 0.000000 -vt 0.483553 -1.868973 0.000000 -vt 0.452019 -1.863561 0.000000 -vt 0.451940 -1.863264 0.000000 -vt 0.828306 -1.457759 0.000000 -vt 0.875839 -1.457175 0.000000 -vt 0.451209 -1.860488 0.000000 -vt 0.972173 -1.863853 0.000000 -vt 0.948088 -1.870427 0.000000 -vt 0.451880 -1.863108 0.000000 -vt 0.481867 -1.869676 0.000000 -vt 0.479093 -1.870937 0.000000 -vt 0.877378 -1.458749 0.000000 -vt 0.452405 -1.865097 0.000000 -vt 0.829847 -1.459929 0.000000 -vt 0.971057 -1.868906 0.000000 -vt 0.828728 -1.456783 0.000000 -vt 0.971727 -1.865673 0.000000 -vt 0.452211 -1.864402 0.000000 -vt 0.876786 -1.457847 0.000000 -vt 0.451956 -1.863566 0.000000 -vt 0.475944 -1.866089 0.000000 -vt 0.481453 -1.870048 0.000000 -vt 0.451758 -1.862800 0.000000 -vt 0.451367 -1.861115 0.000000 -vt 0.452023 -1.863780 0.000000 -vt 0.972305 -1.863569 0.000000 -vt 0.828884 -1.457464 0.000000 -vt 0.951541 -1.868004 0.000000 -vt 0.875292 -1.457469 0.000000 -vt 0.828177 -1.456968 0.000000 -vt 0.877146 -1.457614 0.000000 -vt 0.465539 -1.870165 0.000000 -vt 0.475376 -1.871410 0.000000 -vt 0.971891 -1.865238 0.000000 -vt 0.451984 -1.863602 0.000000 -vt 0.451081 -1.859882 0.000000 -vt 0.829591 -1.458419 0.000000 -vt 0.877151 -1.457435 0.000000 -vt 0.472016 -1.869328 0.000000 -vt 0.947146 -1.869243 0.000000 -vt 0.828694 -1.457016 0.000000 -vt 0.829919 -1.456851 0.000000 -vt 0.947182 -1.870234 0.000000 -vt 0.874654 -1.456733 0.000000 -vt 0.877418 -1.458245 0.000000 -vt 0.830298 -1.458251 0.000000 -vt 0.944782 -1.869317 0.000000 -vt 0.829314 -1.457618 0.000000 -vt 0.875823 -1.456924 0.000000 -vt 0.479366 -1.867708 0.000000 -vt 0.948278 -1.868539 0.000000 -vt 0.829792 -1.458097 0.000000 -vt 0.877097 -1.457110 0.000000 -vt 0.471723 -1.869990 0.000000 -vt 0.947234 -1.868533 0.000000 -vt 0.828686 -1.457152 0.000000 -vt 0.876568 -1.457265 0.000000 -vt 0.483485 -1.870629 0.000000 -vt 0.944827 -1.866485 0.000000 -vt 0.828933 -1.458644 0.000000 -vt 0.876984 -1.457996 0.000000 -vt 0.946429 -1.872049 0.000000 -vt 0.480111 -1.872686 0.000000 -vt 0.829753 -1.455776 0.000000 -vt 0.875659 -1.455884 0.000000 -vt 0.478854 -1.868377 0.000000 -vt 0.946724 -1.869313 0.000000 -vt 0.831090 -1.457178 0.000000 -vt 0.877402 -1.457505 0.000000 -vt 0.948777 -1.869040 0.000000 -vt 0.829947 -1.456792 0.000000 -vt 0.876298 -1.456800 0.000000 -# 178 texture coords - -g Teath -usemtl _Sharkgreatwhiteshark_teet -f 2802/3095 2894/3119 2801/3093 2804/3094 -f 2801/3093 2799/3117 2800/3096 2804/3094 -f 2805/3098 2839/3099 2841/3097 2804/3094 -f 2848/3102 2751/3104 2850/3100 2749/3101 -f 2850/3100 2750/3103 2749/3101 -f 2870/3100 3060/3104 3059/3105 -f 2870/3100 3052/3101 2867/3102 3060/3104 -f 2996/3100 3226/3127 2997/3106 2736/3107 -f 2736/3124 3225/3098 2937/3109 2996/3157 -f 2738/3098 2863/3109 2737/3108 2741/3094 -f 2738/3098 2741/3094 2858/3097 2860/3099 -f 3020/3096 3031/3117 2739/3093 2741/3094 -f 2739/3093 3030/3119 2740/3095 2741/3094 -f 2813/3108 2743/3109 2742/3098 3041/3094 -f 3042/3097 3041/3094 2742/3098 2744/3099 -f 3052/3108 3055/3109 2746/3098 2745/3094 -f 3060/3097 2745/3094 2746/3098 3059/3099 -f 3062/3095 3063/3119 3064/3093 2745/3094 -f 3064/3093 2879/3117 2747/3096 2745/3094 -f 2749/3108 2750/3109 3103/3098 2748/3094 -f 2751/3097 2748/3094 3103/3098 3104/3099 -f 2752/3108 2753/3109 3119/3098 3121/3094 -f 3128/3095 3129/3119 2754/3093 3121/3094 -f 2754/3093 3132/3117 3116/3096 3121/3094 -f 2980/3108 2977/3109 3143/3098 3146/3094 -f 2755/3095 2926/3119 2756/3093 3190/3094 -f 2756/3093 2904/3117 3198/3096 3190/3094 -f 2757/3095 3215/3119 3217/3093 2759/3094 -f 3217/3093 3219/3117 2758/3096 2759/3094 -f 2936/3108 2937/3109 3225/3098 3231/3094 -f 3234/3095 3237/3119 2760/3093 3231/3094 -f 2760/3093 3239/3117 3220/3096 3231/3094 -f 2761/3097 3252/3094 3247/3098 3250/3099 -f 3254/3095 3257/3119 3260/3093 3252/3094 -f 3260/3093 2916/3117 3242/3096 3252/3094 -f 2762/3097 2763/3094 3275/3098 2898/3099 -f 3278/3095 3280/3119 2764/3093 2763/3094 -f 2764/3093 3283/3117 3262/3096 2763/3094 -f 3284/3098 3004/3109 2765/3108 2766/3094 -f 2767/3096 3279/3117 2768/3093 2766/3094 -f 2768/3093 3281/3119 3282/3095 2766/3094 -f 3251/3098 3271/3109 3270/3108 2769/3094 -f 3258/3096 2877/3117 3240/3093 2769/3094 -f 3240/3093 3245/3119 3244/3095 2769/3094 -f 3238/3096 2875/3117 3216/3093 3223/3094 -f 3216/3093 2876/3119 3222/3095 3223/3094 -f 2770/3096 3182/3117 3181/3093 3196/3094 -f 3181/3093 3184/3119 3187/3095 3196/3094 -f 3149/3098 3153/3094 3161/3097 3160/3099 -f 3155/3096 2794/3117 3141/3093 3153/3094 -f 3141/3093 3144/3119 3147/3095 3153/3094 -f 2772/3098 3134/3109 2771/3108 2773/3094 -f 2772/3098 2773/3094 3115/3097 3126/3099 -f 3109/3096 2791/3117 2774/3093 2773/3094 -f 2774/3093 2793/3119 3113/3095 2773/3094 -f 3106/3096 2817/3117 3090/3093 2777/3094 -f 3090/3093 3101/3119 3098/3095 2777/3094 -f 2776/3098 2777/3094 2835/3097 2775/3099 -f 2776/3098 3097/3109 2831/3108 2777/3094 -f 3066/3098 3067/3109 2778/3108 2780/3094 -f 3054/3096 3053/3117 2779/3093 2780/3094 -f 2779/3093 3056/3119 3057/3095 2780/3094 -f 2781/3100 2783/3101 2782/3103 -f 2781/3100 3040/3104 3039/3102 2783/3101 -f 3036/3110 2783/3101 3039/3102 -f 2784/3098 2782/3109 2783/3108 2785/3094 -f 2784/3098 2785/3094 3040/3097 3032/3099 -f 3037/3096 3028/3117 3026/3093 2785/3094 -f 3026/3093 2887/3119 2786/3095 2785/3094 -f 3018/3100 3001/3101 3019/3103 -f 3018/3100 3008/3104 3009/3102 3001/3101 -f 3023/3110 3001/3101 3009/3102 -f 2787/3096 2981/3117 2982/3093 2788/3094 -f 2982/3093 2985/3119 2990/3095 2788/3094 -f 2954/3098 2789/3109 2973/3108 2951/3094 -f 2954/3098 2951/3094 2790/3097 2961/3099 -f 2791/3111 3109/3158 2792/3112 3137/3113 -f 3139/3116 3113/3159 2793/3114 3123/3115 -f 2794/3111 3155/3160 2795/3112 3174/3113 -f 3179/3116 3147/3161 3144/3114 3156/3115 -f 2808/3110 2800/3162 2807/3112 2914/3113 -f 2914/3113 2845/3126 2842/3102 2808/3110 -f 2808/3110 2842/3102 2806/3101 -f 2842/3102 2841/3104 2840/3100 2806/3101 -f 2840/3100 2796/3103 2806/3101 -f 2798/3124 2805/3098 2796/3109 2840/3163 -f 2840/3100 2838/3127 2797/3106 2798/3107 -f 2799/3111 2914/3113 2807/3112 2800/3164 -f 2843/3116 2844/3115 2894/3114 2802/3165 -f 2803/3128 2844/3115 2843/3116 2802/3166 -f 2804/3094 2841/3097 2803/3121 2802/3095 -f 2838/3122 2840/3167 2839/3099 2805/3098 -f 2805/3098 2798/3124 2797/3123 2838/3122 -f 2805/3098 2804/3094 2806/3108 2796/3109 -f 2804/3094 2800/3096 2808/3125 2806/3108 -f 3102/3116 3098/3168 3101/3114 2828/3115 -f 2809/3115 3033/3128 2811/3102 2810/3126 -f 2811/3102 3035/3110 2940/3113 2810/3126 -f 3035/3110 3047/3169 2941/3112 2940/3113 -f 2811/3102 3042/3104 2812/3100 2813/3101 -f 3035/3110 2811/3102 2813/3101 -f 2812/3100 2743/3103 2813/3101 -f 2814/3124 2742/3098 2743/3109 2812/3170 -f 2812/3100 2816/3127 2815/3106 2814/3107 -f 2744/3099 2742/3098 2816/3122 2812/3171 -f 2812/3100 3042/3104 2744/3105 -f 3033/3128 3042/3104 2811/3102 -f 2809/3115 2962/3114 2963/3116 3033/3128 -f 2817/3111 3106/3172 3107/3112 2829/3113 -f 2818/3113 2875/3111 3218/3112 3236/3110 -f 2821/3102 2819/3128 2820/3115 2826/3126 -f 2819/3128 3222/3173 3221/3116 2820/3115 -f 2819/3128 2821/3102 3224/3104 -f 2821/3102 2825/3101 2823/3100 3224/3104 -f 2823/3100 2822/3105 3224/3104 -f 3227/3122 3233/3098 2822/3099 2823/3174 -f 2823/3100 3230/3107 2824/3106 3227/3127 -f 3232/3109 3233/3098 3230/3124 2823/3175 -f 2823/3100 2825/3101 3232/3103 -f 3236/3110 2825/3101 2821/3102 -f 2821/3102 2826/3126 2818/3113 3236/3110 -f 2827/3128 3098/3176 3102/3116 2828/3115 -f 2829/3113 2830/3110 2836/3102 2837/3126 -f 3107/3112 3106/3177 2830/3110 2829/3113 -f 2830/3110 2831/3101 2836/3102 -f 2833/3100 2835/3104 2836/3102 2831/3101 -f 2833/3100 2831/3101 3097/3103 -f 3097/3109 2776/3098 2832/3124 2833/3178 -f 2834/3106 3092/3127 2833/3100 2832/3107 -f 3092/3122 2776/3098 2775/3099 2833/3179 -f 2833/3100 2775/3105 2835/3104 -f 2827/3128 2836/3102 2835/3104 -f 2828/3115 2837/3126 2836/3102 2827/3128 -f 2840/3100 2841/3104 2839/3105 -f 2803/3128 2841/3104 2842/3102 -f 2842/3102 2845/3126 2844/3115 2803/3128 -f 2846/3112 3211/3110 3210/3113 3182/3111 -f 2847/3115 3105/3128 2848/3102 2849/3126 -f 3105/3128 2751/3104 2848/3102 -f 2850/3100 2751/3104 3104/3105 -f 3104/3099 3103/3098 3100/3122 2850/3180 -f 3058/3116 3057/3181 3056/3114 3088/3115 -f 2851/3106 3099/3107 2850/3100 3100/3127 -f 3099/3124 3103/3098 2750/3109 2850/3182 -f 2852/3110 2848/3102 2749/3101 -f 2853/3113 2849/3126 2848/3102 2852/3110 -f 2852/3110 3096/3183 3095/3112 2853/3113 -f 2847/3115 3108/3114 2854/3116 3105/3128 -f 2855/3128 2740/3184 2924/3116 2856/3115 -f 2856/3115 2864/3126 2857/3102 2855/3128 -f 2855/3128 2857/3102 2858/3104 -f 2857/3102 2737/3101 2859/3100 2858/3104 -f 2859/3100 2860/3105 2858/3104 -f 2861/3122 2738/3098 2860/3099 2859/3185 -f 2859/3100 2862/3107 3025/3106 2861/3127 -f 2863/3109 2738/3098 2862/3124 2859/3186 -f 3021/3110 2737/3101 2857/3102 -f 2859/3100 2737/3101 2863/3103 -f 2857/3102 2864/3126 2938/3113 3021/3110 -f 2938/3113 3031/3111 3016/3112 3021/3110 -f 3185/3116 3187/3187 3184/3114 3199/3115 -f 2865/3115 2868/3128 2867/3102 2866/3126 -f 3053/3111 3054/3188 3083/3112 3082/3113 -f 2868/3128 3060/3104 2867/3102 -f 3059/3099 2746/3098 2869/3122 2870/3189 -f 2871/3106 2872/3107 2870/3100 2869/3127 -f 2872/3124 2746/3098 3055/3109 2870/3190 -f 2870/3100 3055/3103 3052/3101 -f 2874/3110 2867/3102 3052/3101 -f 2873/3113 2866/3126 2867/3102 2874/3110 -f 2874/3110 2747/3191 2880/3112 2873/3113 -f 2865/3115 3063/3114 3061/3116 2868/3128 -f 3221/3116 3222/3192 2876/3114 2820/3115 -f 3259/3112 3273/3110 3276/3113 2877/3111 -f 3246/3116 3244/3193 3245/3114 3261/3115 -f 2878/3112 3002/3110 2999/3113 3279/3111 -f 2880/3112 2747/3194 2879/3111 2873/3113 -f 2882/3116 3282/3195 3281/3114 2881/3115 -f 2884/3115 2893/3128 2892/3102 2883/3126 -f 2885/3100 3069/3101 2892/3102 3081/3104 -f 2893/3128 3081/3104 2892/3102 -f 2885/3100 3081/3104 2886/3105 -f 2886/3099 3078/3098 3075/3122 2885/3196 -f 3029/3116 2786/3197 2887/3114 3038/3115 -f 2888/3106 2889/3107 2885/3100 3075/3127 -f 2889/3124 3078/3098 2890/3109 2885/3198 -f 2885/3100 2890/3103 3069/3101 -f 3068/3110 2892/3102 3069/3101 -f 2891/3113 2883/3126 2892/3102 3068/3110 -f 3068/3110 3093/3199 3065/3112 2891/3113 -f 2884/3115 3086/3114 3085/3116 2893/3128 -f 3065/3112 3093/3200 3094/3111 2891/3113 -f 3263/3112 3262/3201 3283/3111 2909/3113 -f 2897/3102 3264/3110 2909/3113 2895/3126 -f 2910/3115 2896/3128 2897/3102 2895/3126 -f 2900/3100 2903/3101 2897/3102 2762/3104 -f 2896/3128 2762/3104 2897/3102 -f 2900/3100 2762/3104 2898/3105 -f 2898/3099 3275/3098 2899/3122 2900/3202 -f 3272/3106 2901/3107 2900/3100 2899/3127 -f 2901/3124 3275/3098 2902/3109 2900/3203 -f 2900/3100 2902/3103 2903/3101 -f 3180/3112 3198/3204 2904/3111 3176/3113 -f 3264/3110 2897/3102 2903/3101 -f 3215/3114 2757/3205 3214/3116 2905/3115 -f 3214/3116 2757/3206 2906/3128 2905/3115 -f 3028/3111 3037/3207 3027/3112 3049/3113 -f 3200/3110 2758/3208 2907/3112 2908/3113 -f 3264/3110 3262/3209 3263/3112 2909/3113 -f 2908/3113 2925/3126 2912/3102 3200/3110 -f 2910/3115 3280/3114 2911/3116 2896/3128 -f 3200/3110 2912/3102 3202/3101 -f 2912/3102 3209/3104 2921/3100 3202/3101 -f 2921/3100 2913/3103 3202/3101 -f 3204/3124 3205/3098 2913/3109 2921/3210 -f 2921/3100 3208/3127 2915/3106 3204/3107 -f 2917/3112 3242/3211 2916/3111 2919/3113 -f 2918/3099 3205/3098 3208/3122 2921/3212 -f 2935/3102 3243/3110 2919/3113 2920/3126 -f 2921/3100 3209/3104 2918/3105 -f 2922/3115 3253/3128 2935/3102 2920/3126 -f 2906/3128 3209/3104 2912/3102 -f 2923/3100 2933/3101 2935/3102 2761/3104 -f 3253/3128 2761/3104 2935/3102 -f 2923/3100 2761/3104 3250/3105 -f 2912/3102 2925/3126 2905/3115 2906/3128 -f 2924/3116 2740/3213 3030/3114 2856/3115 -f 3250/3099 3247/3098 3249/3122 2923/3214 -f 2929/3106 2930/3107 2923/3100 3249/3127 -f 2926/3114 2755/3215 2927/3116 2928/3115 -f 2907/3112 2758/3216 3219/3111 2908/3113 -f 2930/3124 3247/3098 2931/3109 2923/3217 -f 3136/3112 3135/3218 3152/3111 2984/3113 -f 2923/3100 2931/3103 2933/3101 -f 3235/3116 2932/3128 2994/3115 3237/3114 -f 3243/3110 2935/3102 2933/3101 -f 2934/3110 3220/3219 3241/3112 2992/3113 -f 2992/3113 2993/3126 2995/3102 2934/3110 -f 3243/3110 3242/3220 2917/3112 2919/3113 -f 2934/3110 2995/3102 2936/3101 -f 2922/3115 3257/3114 3256/3116 3253/3128 -f 2995/3102 3229/3104 2996/3100 2936/3101 -f 2996/3100 2937/3103 2936/3101 -f 3095/3112 3096/3221 3112/3111 2853/3113 -f 2939/3093 3154/3119 2950/3095 2951/3094 -f 2944/3096 2942/3117 2939/3093 2951/3094 -f 2941/3112 3047/3222 3048/3111 2940/3113 -f 2960/3115 3124/3128 2945/3102 2943/3126 -f 2976/3112 2975/3113 2942/3111 2944/3223 -f 2947/3100 2752/3101 2945/3102 2946/3104 -f 3124/3128 2946/3104 2945/3102 -f 2947/3100 2946/3104 2948/3105 -f 3154/3114 2957/3115 2949/3116 2950/3224 -f 2948/3099 3119/3098 3120/3122 2947/3225 -f 2949/3116 2957/3115 2952/3128 2950/3226 -f 3118/3106 2953/3107 2947/3100 3120/3127 -f 2952/3121 2790/3097 2951/3094 2950/3095 -f 2953/3124 3119/3098 2753/3109 2947/3227 -f 2961/3099 2965/3228 2966/3122 2954/3098 -f 2947/3100 2753/3103 2752/3101 -f 2967/3123 2968/3124 2954/3098 2966/3122 -f 2955/3110 2945/3102 2752/3101 -f 2968/3124 2965/3229 2789/3109 2954/3098 -f 2964/3113 2943/3126 2945/3102 2955/3110 -f 2956/3125 2944/3096 2951/3094 2973/3108 -f 2955/3110 3116/3230 3133/3112 2964/3113 -f 2956/3110 2975/3113 2976/3112 2944/3231 -f 2987/3116 2990/3232 2985/3114 3006/3115 -f 2958/3102 2952/3128 2957/3115 2979/3126 -f 2960/3115 3129/3114 2959/3116 3124/3128 -f 2952/3128 2958/3102 2790/3104 -f 2958/3102 2973/3101 2965/3100 2790/3104 -f 2965/3100 2961/3105 2790/3104 -f 3133/3112 3116/3233 3132/3111 2964/3113 -f 2965/3100 2968/3107 2967/3106 2966/3127 -f 3241/3112 3220/3234 3239/3111 2992/3113 -f 2969/3115 2971/3128 2970/3102 2986/3126 -f 2965/3100 2973/3101 2789/3103 -f 2978/3100 2980/3101 2970/3102 3145/3104 -f 2971/3128 3145/3104 2970/3102 -f 2978/3100 3145/3104 2972/3105 -f 2972/3099 3143/3098 2974/3122 2978/3235 -f 2956/3110 2973/3101 2958/3102 -f 3142/3106 3140/3107 2978/3100 2974/3127 -f 2958/3102 2979/3126 2975/3113 2956/3110 -f 3140/3124 3143/3098 2977/3109 2978/3236 -f 2978/3100 2977/3103 2980/3101 -f 3005/3112 3023/3110 3022/3113 2981/3111 -f 2983/3110 2970/3102 2980/3101 -f 2984/3113 2986/3126 2970/3102 2983/3110 -f 2787/3096 3023/3125 3005/3118 2981/3117 -f 2983/3110 3135/3237 3136/3112 2984/3113 -f 2969/3115 2988/3114 2989/3116 2971/3128 -f 2987/3116 3006/3115 2991/3128 2990/3238 -f 2991/3121 3008/3097 2788/3094 2990/3095 -f 2994/3115 2932/3128 2995/3102 2993/3126 -f 3008/3097 3010/3099 2998/3098 2788/3094 -f 2932/3128 3229/3104 2995/3102 -f 2996/3100 3229/3104 3228/3105 -f 3010/3099 3018/3239 3015/3122 2998/3098 -f 3228/3099 3225/3098 3226/3122 2996/3240 -f 3014/3123 3017/3124 2998/3098 3015/3122 -f 3011/3128 3282/3241 2882/3116 2881/3115 -f 3017/3124 3018/3242 3019/3109 2998/3098 -f 2999/3113 3002/3110 3013/3102 3000/3126 -f 3001/3108 2788/3094 2998/3098 3019/3109 -f 3023/3125 2787/3096 2788/3094 3001/3108 -f 3003/3100 3012/3104 3013/3102 2765/3101 -f 3002/3110 2765/3101 3013/3102 -f 3003/3100 2765/3101 3004/3103 -f 3004/3109 3284/3098 3285/3124 3003/3243 -f 3287/3106 3007/3127 3003/3100 3285/3107 -f 3009/3102 2991/3128 3006/3115 3024/3126 -f 3007/3122 3284/3098 3286/3099 3003/3244 -f 2991/3128 3009/3102 3008/3104 -f 3018/3100 3010/3105 3008/3104 -f 3003/3100 3286/3105 3012/3104 -f 3011/3128 3013/3102 3012/3104 -f 2881/3115 3000/3126 3013/3102 3011/3128 -f 3018/3100 3017/3107 3014/3106 3015/3127 -f 3016/3118 3031/3117 3020/3096 3021/3125 -f 2741/3094 2737/3108 3021/3125 3020/3096 -f 3009/3102 3024/3126 3022/3113 3023/3110 -f 2738/3098 2861/3122 3025/3123 2862/3124 -f 2741/3094 2740/3095 2855/3121 2858/3097 -f 3029/3116 3038/3115 3051/3128 2786/3245 -f 3051/3121 3040/3097 2785/3094 2786/3095 -f 3032/3099 2781/3246 3044/3122 2784/3098 -f 3034/3123 3046/3124 2784/3098 3044/3122 -f 2963/3120 2962/3119 3043/3095 3033/3121 -f 3046/3124 2781/3247 2782/3109 2784/3098 -f 3035/3125 2813/3108 3041/3094 3047/3096 -f 3036/3125 3037/3096 2785/3094 2783/3108 -f 3036/3110 3049/3113 3027/3112 3037/3248 -f 2815/3123 2816/3122 2742/3098 2814/3124 -f 3039/3102 3051/3128 3038/3115 3050/3126 -f 3051/3128 3039/3102 3040/3104 -f 3033/3121 3043/3095 3041/3094 3042/3097 -f 2781/3100 3032/3105 3040/3104 -f 3043/3095 2962/3119 3045/3093 3041/3094 -f 2781/3100 3046/3107 3034/3106 3044/3127 -f 3045/3093 3048/3117 3047/3096 3041/3094 -f 3039/3102 3050/3126 3049/3113 3036/3110 -f 2874/3125 3052/3108 2745/3094 2747/3096 -f 2871/3123 2869/3122 2746/3098 2872/3124 -f 3058/3116 3088/3115 3071/3128 3057/3249 -f 2868/3121 3062/3095 2745/3094 3060/3097 -f 3071/3121 3072/3097 2780/3094 3057/3095 -f 3061/3120 3063/3119 3062/3095 2868/3121 -f 3072/3097 3074/3099 3066/3098 2780/3094 -f 3074/3099 3077/3250 3076/3122 3066/3098 -f 3080/3123 3079/3124 3066/3098 3076/3122 -f 3079/3124 3077/3251 3067/3109 3066/3098 -f 3068/3125 3069/3108 3089/3094 3093/3096 -f 3084/3125 3054/3096 2780/3094 2778/3108 -f 3069/3108 2890/3109 3078/3098 3089/3094 -f 3084/3110 3082/3113 3083/3112 3054/3252 -f 3073/3102 3071/3128 3088/3115 3070/3126 -f 2888/3123 3075/3122 3078/3098 2889/3124 -f 3071/3128 3073/3102 3072/3104 -f 3073/3102 2778/3101 3077/3100 3072/3104 -f 3077/3100 3074/3105 3072/3104 -f 3077/3100 3079/3107 3080/3106 3076/3127 -f 3081/3097 3089/3094 3078/3098 2886/3099 -f 2893/3121 3087/3095 3089/3094 3081/3097 -f 3077/3100 2778/3101 3067/3103 -f 3084/3110 2778/3101 3073/3102 -f 3073/3102 3070/3126 3082/3113 3084/3110 -f 3085/3120 3086/3119 3087/3095 2893/3121 -f 3091/3093 3089/3094 3087/3095 3086/3119 -f 3091/3093 3094/3117 3093/3096 3089/3094 -f 2834/3123 2832/3124 2776/3098 3092/3122 -f 2852/3125 2749/3108 2748/3094 3096/3096 -f 2777/3094 3098/3095 2827/3121 2835/3097 -f 2851/3123 3100/3122 3103/3098 3099/3124 -f 3105/3121 3111/3095 2748/3094 2751/3097 -f 2777/3094 2831/3108 2830/3125 3106/3096 -f 2854/3120 3108/3119 3111/3095 3105/3121 -f 3110/3093 2748/3094 3111/3095 3108/3119 -f 3110/3093 3112/3117 3096/3096 2748/3094 -f 3139/3116 3123/3115 3114/3128 3113/3253 -f 3114/3121 3115/3097 2773/3094 3113/3095 -f 2955/3125 2752/3108 3121/3094 3116/3096 -f 3126/3099 3131/3254 3127/3122 2772/3098 -f 3117/3123 3130/3124 2772/3098 3127/3122 -f 3118/3123 3120/3122 3119/3098 2953/3124 -f 3130/3124 3131/3255 3134/3109 2772/3098 -f 3138/3125 3109/3096 2773/3094 2771/3108 -f 2946/3097 3121/3094 3119/3098 2948/3099 -f 3138/3110 3137/3113 2792/3112 3109/3256 -f 3125/3102 3114/3128 3123/3115 3122/3126 -f 3124/3121 3128/3095 3121/3094 2946/3097 -f 3114/3128 3125/3102 3115/3104 -f 3125/3102 2771/3101 3131/3100 3115/3104 -f 3131/3100 3126/3105 3115/3104 -f 2959/3120 3129/3119 3128/3095 3124/3121 -f 3131/3100 3130/3107 3117/3106 3127/3127 -f 3131/3100 2771/3101 3134/3103 -f 3138/3110 2771/3101 3125/3102 -f 3125/3102 3122/3126 3137/3113 3138/3110 -f 2983/3125 2980/3108 3146/3094 3135/3096 -f 3142/3123 2974/3122 3143/3098 3140/3124 -f 3145/3097 3146/3094 3143/3098 2972/3099 -f 3179/3116 3156/3115 3178/3128 3147/3257 -f 2971/3121 3148/3095 3146/3094 3145/3097 -f 3178/3121 3161/3097 3153/3094 3147/3095 -f 2989/3120 2988/3119 3148/3095 2971/3121 -f 3160/3099 3165/3258 3150/3122 3149/3098 -f 3167/3123 3166/3124 3149/3098 3150/3122 -f 3151/3093 3146/3094 3148/3095 2988/3119 -f 3166/3124 3165/3259 3170/3109 3149/3098 -f 3151/3093 3152/3117 3135/3096 3146/3094 -f 3169/3108 3153/3094 3149/3098 3170/3109 -f 3171/3125 3155/3096 3153/3094 3169/3108 -f 2927/3116 2755/3260 3158/3128 2928/3115 -f 3171/3110 3174/3113 2795/3112 3155/3261 -f 3177/3102 3173/3126 2928/3115 3158/3128 -f 3172/3102 3178/3128 3156/3115 3175/3126 -f 3163/3100 3183/3101 3177/3102 3157/3104 -f 3158/3128 3157/3104 3177/3102 -f 3163/3100 3157/3104 3192/3105 -f 3192/3099 3195/3098 3159/3122 3163/3262 -f 3178/3128 3172/3102 3161/3104 -f 3172/3102 3169/3101 3165/3100 3161/3104 -f 3165/3100 3160/3105 3161/3104 -f 3162/3106 3164/3107 3163/3100 3159/3127 -f 3165/3100 3166/3107 3167/3106 3150/3127 -f 3164/3124 3195/3098 3197/3109 3163/3263 -f 3163/3100 3197/3103 3183/3101 -f 3168/3110 3177/3102 3183/3101 -f 3165/3100 3169/3101 3170/3103 -f 3171/3110 3169/3101 3172/3102 -f 3172/3102 3175/3126 3174/3113 3171/3110 -f 3177/3102 3168/3110 3176/3113 3173/3126 -f 3168/3110 3198/3264 3180/3112 3176/3113 -f 2770/3096 3211/3125 2846/3118 3182/3117 -f 3190/3094 3198/3096 3168/3125 3183/3108 -f 3183/3108 3197/3109 3195/3098 3190/3094 -f 3185/3116 3199/3115 3186/3128 3187/3265 -f 3186/3121 3188/3097 3196/3094 3187/3095 -f 3188/3097 3201/3099 3189/3098 3196/3094 -f 3190/3094 3157/3097 3158/3121 2755/3095 -f 3201/3099 3206/3266 3191/3122 3189/3098 -f 3203/3123 3193/3124 3189/3098 3191/3122 -f 3195/3098 3192/3099 3157/3097 3190/3094 -f 3193/3124 3206/3267 3194/3109 3189/3098 -f 3207/3108 3196/3094 3189/3098 3194/3109 -f 3195/3098 3164/3124 3162/3123 3159/3122 -f 3211/3125 2770/3096 3196/3094 3207/3108 -f 3212/3102 3186/3128 3199/3115 3213/3126 -f 3186/3128 3212/3102 3188/3104 -f 3200/3125 3202/3108 2759/3094 2758/3096 -f 3212/3102 3207/3101 3206/3100 3188/3104 -f 3206/3100 3201/3105 3188/3104 -f 3202/3108 2913/3109 3205/3098 2759/3094 -f 3206/3100 3193/3107 3203/3106 3191/3127 -f 2915/3123 3208/3122 3205/3098 3204/3124 -f 3206/3100 3207/3101 3194/3103 -f 3209/3097 2759/3094 3205/3098 2918/3099 -f 3211/3110 3207/3101 3212/3102 -f 3212/3102 3213/3126 3210/3113 3211/3110 -f 2906/3121 2757/3095 2759/3094 3209/3097 -f 3238/3096 3236/3125 3218/3118 2875/3117 -f 2934/3125 2936/3108 3231/3094 3220/3096 -f 2819/3121 3224/3097 3223/3094 3222/3095 -f 3224/3097 2822/3099 3233/3098 3223/3094 -f 2997/3123 3226/3122 3225/3098 2736/3124 -f 2824/3123 3230/3124 3233/3098 3227/3122 -f 3229/3097 3231/3094 3225/3098 3228/3099 -f 2932/3121 3234/3095 3231/3094 3229/3097 -f 2825/3108 3223/3094 3233/3098 3232/3109 -f 3235/3120 3237/3119 3234/3095 2932/3121 -f 3236/3125 3238/3096 3223/3094 2825/3108 -f 3258/3096 3273/3125 3259/3118 2877/3117 -f 3243/3125 2933/3108 3252/3094 3242/3096 -f 3246/3116 3261/3115 3265/3128 3244/3268 -f 2933/3108 2931/3109 3247/3098 3252/3094 -f 3265/3121 3266/3097 2769/3094 3244/3095 -f 3266/3097 3248/3099 3251/3098 2769/3094 -f 2929/3123 3249/3122 3247/3098 2930/3124 -f 3248/3099 3269/3269 3268/3122 3251/3098 -f 3267/3123 3255/3124 3251/3098 3268/3122 -f 3253/3121 3254/3095 3252/3094 2761/3097 -f 3255/3124 3269/3270 3271/3109 3251/3098 -f 3256/3120 3257/3119 3254/3095 3253/3121 -f 3273/3125 3258/3096 2769/3094 3270/3108 -f 3274/3102 3265/3128 3261/3115 3277/3126 -f 3265/3128 3274/3102 3266/3104 -f 3274/3102 3270/3101 3269/3100 3266/3104 -f 3269/3100 3248/3105 3266/3104 -f 3264/3125 2903/3108 2763/3094 3262/3096 -f 3269/3100 3255/3107 3267/3106 3268/3127 -f 2903/3108 2902/3109 3275/3098 2763/3094 -f 3269/3100 3270/3101 3271/3103 -f 3272/3123 2899/3122 3275/3098 2901/3124 -f 3273/3110 3270/3101 3274/3102 -f 3274/3102 3277/3126 3276/3113 3273/3110 -f 2896/3121 3278/3095 2763/3094 2762/3097 -f 2911/3120 3280/3119 3278/3095 2896/3121 -f 2767/3096 3002/3125 2878/3118 3279/3117 -f 3011/3121 3012/3097 2766/3094 3282/3095 -f 2766/3094 2765/3108 3002/3125 2767/3096 -f 3012/3097 3286/3099 3284/3098 2766/3094 -f 3284/3098 3007/3122 3287/3123 3285/3124 -f 3290/3131 3325/3133 3288/3129 3289/3130 -f 3292/3133 3346/3131 3373/3134 3291/3132 -f 3293/3135 3294/3136 3292/3133 3291/3132 -f 3380/3137 3349/3139 3292/3133 3294/3136 -f 3375/3139 3377/3133 3374/3129 3371/3138 -f 3295/3140 3371/3138 3374/3129 -f 3377/3133 3379/3136 3366/3135 3296/3132 -f 3358/3134 3355/3131 3377/3133 3296/3132 -f 3488/3134 3486/3132 3325/3133 3290/3131 -f 3490/3143 3327/3144 3484/3141 3489/3142 -f 3465/3143 3464/3144 3347/3141 3297/3142 -f 3348/3145 3467/3146 3297/3142 3347/3141 -f 3298/3148 3300/3146 3302/3142 3448/3147 -f 3299/3143 3447/3149 3448/3147 3302/3142 -f 3301/3145 3303/3141 3302/3142 3300/3146 -f 3303/3141 3453/3144 3299/3143 3302/3142 -f 3304/3148 3305/3146 3433/3142 3441/3147 -f 3306/3143 3435/3149 3441/3147 3433/3142 -f 3322/3135 3485/3136 3325/3133 3486/3132 -f 3420/3148 3419/3146 3307/3142 3427/3147 -f 3422/3143 3421/3149 3427/3147 3307/3142 -f 3308/3135 3410/3132 3309/3133 3404/3136 -f 3309/3133 3409/3139 3310/3137 3404/3136 -f 3311/3143 3312/3142 3330/3147 3399/3149 -f 3312/3142 3313/3146 3331/3148 3330/3147 -f 3312/3142 3336/3141 3314/3145 3313/3146 -f 3311/3143 3397/3144 3336/3141 3312/3142 -f 3387/3143 3393/3149 3394/3150 3361/3144 -f 3315/3141 3391/3142 3387/3143 3361/3144 -f 3317/3147 3321/3142 3320/3143 3316/3149 -f 3318/3148 3319/3146 3321/3142 3317/3147 -f 3460/3145 3459/3141 3321/3142 3319/3146 -f 3459/3141 3458/3144 3320/3143 3321/3142 -f 3291/3148 3373/3147 3372/3142 3376/3146 -f 3372/3142 3380/3141 3294/3145 3376/3146 -f 3289/3130 3288/3129 3491/3151 -f 3323/3140 3339/3129 3324/3138 -f 3484/3137 3327/3139 3325/3133 3485/3136 -f 3339/3129 3333/3133 3474/3139 3324/3138 -f 3327/3139 3482/3138 3288/3129 3325/3133 -f 3326/3140 3288/3129 3482/3138 -f 3333/3133 3475/3136 3328/3137 3474/3139 -f 3329/3151 3400/3130 3337/3129 -f 3337/3129 3400/3130 3399/3131 3335/3133 -f 3330/3134 3331/3132 3335/3133 3399/3131 -f 3333/3133 3332/3132 3477/3135 3475/3136 -f 3398/3135 3314/3136 3335/3133 3331/3132 -f 3333/3133 3480/3131 3334/3134 3332/3132 -f 3336/3137 3397/3139 3335/3133 3314/3136 -f 3339/3129 3481/3130 3480/3131 3333/3133 -f 3397/3139 3341/3138 3337/3129 3335/3133 -f 3338/3151 3481/3130 3339/3129 -f 3340/3140 3342/3129 3343/3138 -f 3396/3140 3337/3129 3341/3138 -f 3342/3129 3354/3133 3464/3139 3343/3138 -f 3344/3151 3345/3130 3350/3129 -f 3346/3131 3292/3133 3350/3129 3345/3130 -f 3354/3133 3348/3136 3347/3137 3464/3139 -f 3354/3133 3468/3132 3466/3135 3348/3136 -f 3349/3139 3351/3138 3350/3129 3292/3133 -f 3383/3140 3350/3129 3351/3138 -f 3354/3133 3470/3131 3469/3134 3468/3132 -f 3381/3153 3355/3149 3352/3150 3353/3152 -f 3342/3129 3357/3130 3470/3131 3354/3133 -f 3356/3143 3375/3144 3352/3150 3355/3149 -f 3358/3147 3362/3142 3356/3143 3355/3149 -f 3472/3151 3357/3130 3342/3129 -f 3359/3140 3369/3129 3360/3138 -f 3369/3129 3363/3133 3361/3139 3360/3138 -f 3296/3148 3365/3146 3362/3142 3358/3147 -f 3363/3133 3364/3136 3315/3137 3361/3139 -f 3363/3133 3389/3132 3388/3135 3364/3136 -f 3366/3154 3379/3145 3365/3146 3296/3148 -f 3363/3133 3393/3131 3392/3134 3389/3132 -f 3379/3145 3378/3141 3362/3142 3365/3146 -f 3369/3129 3368/3130 3393/3131 3363/3133 -f 3367/3151 3368/3130 3369/3129 -f 3382/3150 3346/3149 3345/3153 3344/3152 -f 3378/3141 3375/3144 3356/3143 3362/3142 -f 3382/3150 3349/3144 3370/3143 3346/3149 -f 3352/3150 3375/3144 3371/3155 3295/3156 -f 3370/3143 3372/3142 3373/3147 3346/3149 -f 3376/3146 3294/3145 3293/3154 3291/3148 -f 3378/3137 3379/3136 3377/3133 3375/3139 -f 3370/3143 3349/3144 3380/3141 3372/3142 -f 3353/3151 3374/3129 3381/3130 -f 3374/3129 3377/3133 3355/3131 3381/3130 -f 3382/3150 3383/3156 3351/3155 3349/3144 -f 3386/3150 3458/3144 3384/3155 3456/3156 -f 3386/3150 3316/3149 3320/3143 3458/3144 -f 3319/3146 3318/3148 3385/3154 3460/3145 -f 3386/3150 3462/3152 3463/3153 3316/3149 -f 3360/3155 3361/3144 3394/3150 3359/3156 -f 3364/3145 3390/3146 3391/3142 3315/3141 -f 3388/3154 3389/3148 3390/3146 3364/3145 -f 3389/3148 3392/3147 3391/3142 3390/3146 -f 3392/3147 3393/3149 3387/3143 3391/3142 -f 3368/3153 3367/3152 3394/3150 3393/3149 -f 3341/3155 3397/3144 3395/3150 3396/3156 -f 3311/3143 3399/3149 3395/3150 3397/3144 -f 3398/3154 3331/3148 3313/3146 3314/3145 -f 3400/3153 3329/3152 3395/3150 3399/3149 -f 3401/3150 3409/3144 3402/3155 3408/3156 -f 3401/3150 3407/3149 3406/3143 3409/3144 -f 3406/3143 3403/3142 3310/3141 3409/3144 -f 3403/3142 3405/3146 3404/3145 3310/3141 -f 3405/3146 3410/3148 3308/3154 3404/3145 -f 3403/3142 3411/3147 3410/3148 3405/3146 -f 3406/3143 3407/3149 3411/3147 3403/3142 -f 3401/3150 3413/3152 3414/3153 3407/3149 -f 3408/3140 3402/3138 3412/3129 -f 3409/3139 3309/3133 3412/3129 3402/3138 -f 3411/3134 3407/3131 3309/3133 3410/3132 -f 3407/3131 3414/3130 3412/3129 3309/3133 -f 3413/3151 3412/3129 3414/3130 -f 3417/3150 3423/3144 3416/3155 3415/3156 -f 3417/3150 3421/3149 3422/3143 3423/3144 -f 3422/3143 3307/3142 3418/3141 3423/3144 -f 3307/3142 3419/3146 3424/3145 3418/3141 -f 3419/3146 3420/3148 3426/3154 3424/3145 -f 3417/3150 3429/3152 3430/3153 3421/3149 -f 3415/3140 3416/3138 3428/3129 -f 3428/3129 3416/3138 3423/3139 3425/3133 -f 3418/3137 3424/3136 3425/3133 3423/3139 -f 3426/3135 3420/3132 3425/3133 3424/3136 -f 3427/3134 3421/3131 3425/3133 3420/3132 -f 3421/3131 3430/3130 3428/3129 3425/3133 -f 3429/3151 3428/3129 3430/3130 -f 3431/3150 3439/3144 3438/3155 3437/3156 -f 3431/3150 3435/3149 3306/3143 3439/3144 -f 3306/3143 3433/3142 3432/3141 3439/3144 -f 3434/3145 3432/3141 3433/3142 3305/3146 -f 3305/3146 3304/3148 3440/3154 3434/3145 -f 3431/3150 3444/3152 3436/3153 3435/3149 -f 3437/3140 3438/3138 3443/3129 -f 3439/3139 3442/3133 3443/3129 3438/3138 -f 3432/3137 3434/3136 3442/3133 3439/3139 -f 3440/3135 3304/3132 3442/3133 3434/3136 -f 3441/3134 3435/3131 3442/3133 3304/3132 -f 3435/3131 3436/3130 3443/3129 3442/3133 -f 3444/3151 3443/3129 3436/3130 -f 3446/3150 3453/3144 3451/3155 3445/3156 -f 3446/3150 3447/3149 3299/3143 3453/3144 -f 3300/3146 3298/3148 3455/3154 3301/3145 -f 3446/3150 3449/3152 3450/3153 3447/3149 -f 3445/3140 3451/3138 3452/3129 -f 3453/3139 3454/3133 3452/3129 3451/3138 -f 3303/3137 3301/3136 3454/3133 3453/3139 -f 3455/3135 3298/3132 3454/3133 3301/3136 -f 3448/3134 3447/3131 3454/3133 3298/3132 -f 3447/3131 3450/3130 3452/3129 3454/3133 -f 3449/3151 3452/3129 3450/3130 -f 3456/3140 3384/3138 3457/3129 -f 3457/3129 3384/3138 3458/3139 3461/3133 -f 3459/3137 3460/3136 3461/3133 3458/3139 -f 3385/3135 3318/3132 3461/3133 3460/3136 -f 3317/3134 3316/3131 3461/3133 3318/3132 -f 3316/3131 3463/3130 3457/3129 3461/3133 -f 3462/3151 3457/3129 3463/3130 -f 3343/3155 3464/3144 3471/3150 3340/3156 -f 3465/3143 3470/3149 3471/3150 3464/3144 -f 3466/3154 3468/3148 3467/3146 3348/3145 -f 3468/3148 3469/3147 3297/3142 3467/3146 -f 3469/3147 3470/3149 3465/3143 3297/3142 -f 3357/3153 3472/3152 3471/3150 3470/3149 -f 3324/3155 3474/3144 3473/3150 3323/3156 -f 3479/3143 3480/3149 3473/3150 3474/3144 -f 3328/3141 3476/3142 3479/3143 3474/3144 -f 3476/3142 3328/3141 3475/3145 3478/3146 -f 3477/3154 3332/3148 3478/3146 3475/3145 -f 3334/3147 3480/3149 3479/3143 3476/3142 -f 3476/3142 3478/3146 3332/3148 3334/3147 -f 3481/3153 3338/3152 3473/3150 3480/3149 -f 3482/3155 3327/3144 3483/3150 3326/3156 -f 3490/3143 3290/3149 3483/3150 3327/3144 -f 3485/3145 3487/3146 3489/3142 3484/3141 -f 3322/3154 3486/3148 3487/3146 3485/3145 -f 3486/3148 3488/3147 3489/3142 3487/3146 -f 3488/3147 3290/3149 3490/3143 3489/3142 -f 3289/3153 3491/3152 3483/3150 3290/3149 -# 564 polygons - 120 triangles - -# -# object eyes -# - -v -1.193957 2.214023 7.605473 -v -1.280243 2.291366 7.737893 -v -1.255382 2.291366 7.795282 -v -1.246853 2.249702 7.625843 -v -1.224419 2.214023 7.639673 -v -1.238627 2.214023 7.727993 -v -1.264265 2.249702 7.734083 -v -1.267589 2.249702 7.678042 -v 1.209488 2.422336 7.583922 -v 1.224386 2.458018 7.639663 -v -1.066865 2.456882 7.793932 -v -1.050239 2.421533 7.815474 -v -1.104296 2.421533 7.837072 -v -1.100132 2.380259 7.852973 -v -1.150505 2.380673 7.860023 -v -1.211678 2.336021 7.841783 -v -1.241960 2.249702 7.785593 -v -1.200056 2.422337 7.822913 -v -1.143650 2.458019 7.817392 -v -1.186232 2.458019 7.800473 -v -1.208672 2.380673 7.836893 -v -1.260065 2.336021 7.798674 -v 1.260803 2.291365 7.617224 -v 1.283918 2.291365 7.675393 -v 1.267556 2.249701 7.678032 -v 1.285790 2.336020 7.739202 -v 1.255352 2.380672 7.795273 -v 1.163111 2.336020 7.540062 -v 1.161788 2.291365 7.545644 -v 1.099307 2.291365 7.541953 -v 1.053683 2.291779 7.564423 -v 1.101938 2.249701 7.558302 -v 1.157990 2.249701 7.561633 -v 1.106162 2.214022 7.584554 -v 1.246820 2.249701 7.625832 -v 1.193924 2.214022 7.605463 -v 1.209488 2.249701 7.583922 -v 1.219190 2.291365 7.570513 -v 1.050209 2.421532 7.815463 -v 1.110947 2.456881 7.811563 -v 1.241930 2.422336 7.785583 -v 1.200026 2.422336 7.822903 -v 1.211648 2.336020 7.841772 -v 1.066838 2.456881 7.793921 -v 1.011284 2.421532 7.774242 -v 1.104266 2.421532 7.837062 -v 1.100102 2.380258 7.852962 -v 1.147844 2.422336 7.843634 -v 1.208642 2.380672 7.836883 -v 1.208642 2.291365 7.836883 -v 1.200026 2.249701 7.822903 -v 1.147844 2.249701 7.843634 -v 1.084970 2.193808 7.770433 -v 1.150475 2.380672 7.860013 -v 1.110947 2.215156 7.811563 -v 1.050209 2.250505 7.815463 -v 1.039844 2.291779 7.828873 -v 1.011284 2.250505 7.774242 -v 1.004021 2.291779 7.606213 -v 0.994034 2.250505 7.667023 -v 0.989960 2.250505 7.722672 -v 0.977228 2.291779 7.663423 -v 0.996458 2.291779 7.782943 -v 1.036229 2.336020 7.833552 -v 1.100102 2.291779 7.852962 -v 1.039844 2.380258 7.828873 -v 0.991283 2.336020 7.785973 -v 0.996458 2.380258 7.782943 -v 0.989960 2.421532 7.722672 -v 1.017674 2.456881 7.718233 -v 1.020998 2.456881 7.672812 -v 1.101938 2.422336 7.558302 -v 1.157990 2.422336 7.561633 -v 1.193924 2.458018 7.605463 -v 1.050563 2.336020 7.559623 -v 0.972686 2.291779 7.725462 -v 0.966659 2.336020 7.726423 -v 0.971363 2.336020 7.662163 -v 0.972686 2.380258 7.725462 -v 0.977228 2.380258 7.663423 -v 0.994034 2.421532 7.667023 -v 1.040612 2.456881 7.630934 -v 0.999119 2.336020 7.602882 -v 1.053683 2.380258 7.564423 -v 1.004021 2.380258 7.606213 -v 1.018070 2.421532 7.615693 -v -1.163141 2.336021 7.540072 -v -1.098419 2.336021 7.536263 -v -1.161821 2.291366 7.545652 -v -1.101971 2.249702 7.558311 -v -0.999149 2.336021 7.602892 -v -1.062653 2.250506 7.578233 -v -1.004051 2.291780 7.606223 -v -1.053713 2.291780 7.564434 -v -1.050593 2.336021 7.559633 -v -1.004051 2.380259 7.606223 -v -1.018100 2.421533 7.615703 -v -0.994064 2.421533 7.667033 -v -0.977258 2.380259 7.663434 -v -0.971393 2.336021 7.662172 -v -0.994064 2.250506 7.667033 -v -1.018100 2.250506 7.615703 -v -1.040642 2.215157 7.630943 -v -0.996488 2.380259 7.782953 -v -1.011314 2.421533 7.774252 -v -0.989990 2.421533 7.722682 -v -0.991313 2.336021 7.785983 -v -0.966689 2.336021 7.726432 -v -0.972716 2.380259 7.725472 -v -1.021028 2.456882 7.672822 -v -1.040642 2.456882 7.630942 -v -1.062653 2.421533 7.578233 -v -1.053713 2.380259 7.564434 -v -1.099337 2.380673 7.541963 -v -1.209518 2.422337 7.583933 -v -1.224416 2.458019 7.639673 -v -1.246850 2.422337 7.625843 -v -1.260833 2.380673 7.617232 -v -1.158020 2.422337 7.561644 -v -1.101968 2.422337 7.558311 -v -1.193954 2.458019 7.605473 -v -1.151930 2.458019 7.587293 -v -1.283948 2.380673 7.675403 -v -1.267586 2.422337 7.678042 -v -1.264262 2.422337 7.734083 -v -1.238624 2.458019 7.727993 -v -1.241336 2.458019 7.682242 -v -1.289654 2.336021 7.674472 -v -1.283951 2.291366 7.675403 -v -1.285820 2.336021 7.739213 -v -1.280243 2.380673 7.737893 -v -1.255382 2.380673 7.795282 -v -1.241960 2.422337 7.785593 -v -1.220426 2.458019 7.770022 -v -1.265714 2.336021 7.614233 -v -0.977258 2.291780 7.663434 -v -0.989990 2.250506 7.722682 -v -0.996488 2.291780 7.782953 -v -1.017704 2.215157 7.718244 -v -1.066865 2.215157 7.793933 -v -1.011314 2.250506 7.774252 -v -1.050239 2.250506 7.815474 -v -1.104296 2.250506 7.837072 -v -1.150505 2.291366 7.860023 -v -1.208672 2.291366 7.836893 -v -1.100132 2.291780 7.852973 -v -1.147874 2.249702 7.843643 -v -1.200056 2.249702 7.822913 -v 1.260035 2.336020 7.798663 -v 1.264232 2.249701 7.734073 -v 1.280213 2.291365 7.737883 -v 1.255352 2.291365 7.795273 -v 1.241930 2.249701 7.785583 -v 1.238594 2.214022 7.727982 -v 1.246820 2.422336 7.625832 -v 1.280213 2.380672 7.737883 -v 1.289624 2.336020 7.674463 -v 1.265681 2.336020 7.614223 -v 1.260803 2.380672 7.617224 -v 1.283918 2.380672 7.675393 -v 1.264232 2.422336 7.734073 -v 1.267556 2.422336 7.678032 -v 1.066838 2.215156 7.793922 -v 1.035074 2.215156 7.760293 -v 1.020998 2.215156 7.672813 -v 1.076966 2.215156 7.600334 -v 1.040612 2.215156 7.630934 -v 1.018070 2.250505 7.615693 -v 1.099307 2.380672 7.541953 -v 1.161788 2.380672 7.545644 -v 1.098389 2.336020 7.536252 -v 1.219190 2.380672 7.570513 -v 1.222577 2.336020 7.565833 -v 1.104266 2.250505 7.837062 -v 1.098650 2.336020 7.858512 -v 1.151393 2.336020 7.865713 -v 1.150475 2.291365 7.860013 -v 1.062623 2.421532 7.578224 -v -1.151933 2.214023 7.587293 -v -1.099337 2.291366 7.541963 -v -1.158023 2.249702 7.561644 -v -1.161818 2.380673 7.545652 -v -1.222610 2.336021 7.565843 -v -1.219220 2.380673 7.570523 -v -1.151423 2.336021 7.865724 -v -1.098680 2.336021 7.858522 -v -1.039874 2.380259 7.828883 -v -1.036259 2.336021 7.833563 -v -1.039874 2.291780 7.828883 -v -0.972716 2.291780 7.725472 -v -1.209521 2.249702 7.583933 -v -1.219223 2.291366 7.570523 -v -1.260836 2.291366 7.617232 -v -1.158929 2.179406 7.653923 -v -1.124924 2.168171 7.700993 -v -1.167830 2.172956 7.694093 -v -1.118021 2.172956 7.658063 -v -1.176980 2.192474 7.628963 -v -1.053572 2.188796 7.712454 -v -1.095311 2.174477 7.705733 -v -1.241339 2.214023 7.682243 -v -1.207364 2.187410 7.687733 -v -1.085000 2.193809 7.770442 -v -1.220426 2.214023 7.770023 -v -1.138184 2.187410 7.783433 -v -1.110977 2.215157 7.811573 -v -1.143650 2.214023 7.817393 -v -1.186232 2.214023 7.800473 -v -1.131824 2.172956 7.743893 -v 1.124891 2.168170 7.700983 -v -1.104284 2.180867 7.745483 -v -1.131824 2.499083 7.743893 -v 1.131794 2.499082 7.743883 -v -1.196942 2.192474 7.753043 -v 1.196909 2.479567 7.753034 -v -1.171970 2.179406 7.734983 -v 1.171937 2.492632 7.734972 -v 1.167797 2.499082 7.694084 -v 1.158896 2.492632 7.653913 -v -1.035104 2.215157 7.760303 -v 1.176947 2.479567 7.628953 -v 1.111628 2.484628 7.618543 -v 1.151900 2.458018 7.587284 -v 1.207331 2.484628 7.687723 -v -1.111661 2.187410 7.618554 -v -1.065224 2.193809 7.647533 -v -1.091369 2.180867 7.665203 -v 1.117988 2.499082 7.658052 -v -1.106195 2.214023 7.584563 -v -1.076999 2.215157 7.600343 -v -1.021028 2.215157 7.672823 -v -1.167827 2.499083 7.694093 -v 1.104254 2.491171 7.745472 -v -1.196939 2.479568 7.753043 -v 1.084970 2.478229 7.770432 -v 1.035074 2.456881 7.760293 -v -1.158926 2.492633 7.653923 -v -1.124921 2.503868 7.700993 -v -1.053572 2.483246 7.712453 -v -1.095311 2.497565 7.705732 -v -1.138184 2.484629 7.783432 -v -1.091366 2.491172 7.665203 -v -1.171967 2.492633 7.734982 -v -1.118018 2.499083 7.658062 -v -1.104284 2.491172 7.745482 -v -1.110977 2.456882 7.811573 -v -1.085000 2.478230 7.770442 -v -1.207361 2.484629 7.687733 -v -1.147874 2.422337 7.843643 -v 1.131794 2.172955 7.743883 -v -1.076996 2.456882 7.600343 -v -1.065224 2.478230 7.647532 -v -1.111658 2.484629 7.618554 -v -1.106192 2.458019 7.584563 -v 1.196909 2.192473 7.753034 -v 1.224386 2.214022 7.639663 -v 1.241306 2.214022 7.682233 -v -1.176977 2.479568 7.628963 -v 1.207331 2.187409 7.687723 -v 1.167797 2.172955 7.694084 -v 1.158896 2.179408 7.653913 -v 1.220396 2.458018 7.770014 -v -1.035104 2.456882 7.760303 -v -1.017704 2.456882 7.718244 -v 1.238594 2.458018 7.727982 -v 1.241306 2.458018 7.682232 -v 1.062623 2.250505 7.578224 -v 1.106162 2.458018 7.584554 -v 1.017674 2.215156 7.718233 -v 1.065194 2.478229 7.647522 -v 1.076966 2.456881 7.600334 -v 1.091336 2.491171 7.665193 -v 1.151900 2.214022 7.587284 -v 1.111628 2.187409 7.618543 -v 1.065194 2.193808 7.647523 -v 1.053542 2.483245 7.712442 -v 1.095281 2.497564 7.705724 -v 1.117988 2.172955 7.658053 -v 1.104254 2.180866 7.745473 -v 1.053542 2.188795 7.712443 -v 1.143620 2.214022 7.817383 -v 1.091336 2.180866 7.665193 -v 1.143620 2.458018 7.817383 -v 1.138154 2.484628 7.783422 -v 1.186202 2.458018 7.800463 -v 1.176947 2.192473 7.628953 -v 1.095281 2.174476 7.705724 -v 1.220396 2.214022 7.770014 -v 1.124891 2.503867 7.700983 -v 1.186202 2.214022 7.800463 -v 1.171937 2.179408 7.734973 -v 1.138154 2.187409 7.783423 -# 292 vertices - -vt 0.269887 -1.845210 0.000000 -vt 0.249101 -1.780560 0.000000 -vt 0.311165 -1.782002 0.000000 -vt 0.062886 -1.501080 0.000000 -vt 0.062886 -1.596038 0.000000 -vt 0.003238 -1.595291 0.000000 -vt 0.003238 -1.501080 0.000000 -vt 0.187038 -1.689922 0.000000 -vt 0.249101 -1.688648 0.000000 -vt 0.187038 -1.782002 0.000000 -vt 0.062886 -1.689922 0.000000 -vt 0.003238 -1.688648 0.000000 -vt 0.124962 -1.688556 0.000000 -vt 0.124962 -1.780455 0.000000 -vt 0.062433 -1.782002 0.000000 -vt 0.003238 -1.780560 0.000000 -vt 0.187038 -1.312237 0.000000 -vt 0.249101 -1.313511 0.000000 -vt 0.249101 -1.221600 0.000000 -vt 0.187038 -1.220157 0.000000 -vt 0.683594 -1.312237 0.000000 -vt 0.683594 -1.220157 0.000000 -vt 0.745657 -1.221600 0.000000 -vt 0.745657 -1.313511 0.000000 -vt 0.745657 -1.406868 0.000000 -vt 0.807721 -1.312237 0.000000 -vt 0.807721 -1.406121 0.000000 -vt 0.869796 -1.313603 0.000000 -vt 0.869796 -1.406922 0.000000 -vt 0.869796 -1.501080 0.000000 -vt 0.931872 -1.406121 0.000000 -vt 0.931872 -1.501080 0.000000 -vt 0.931872 -1.689922 0.000000 -vt 0.931872 -1.596038 0.000000 -vt 0.996351 -1.595291 0.000000 -vt 0.996351 -1.688648 0.000000 -vt 0.996351 -1.780560 0.000000 -vt 0.931872 -1.782002 0.000000 -vt 0.996351 -1.221600 0.000000 -vt 0.996351 -1.313511 0.000000 -vt 0.931872 -1.312237 0.000000 -vt 0.931872 -1.220157 0.000000 -vt 0.869796 -1.221704 0.000000 -vt 0.996351 -1.406868 0.000000 -vt 0.996351 -1.501080 0.000000 -vt 0.807721 -1.220157 0.000000 -vt 0.187038 -1.596038 0.000000 -vt 0.124962 -1.595238 0.000000 -vt 0.124962 -1.501080 0.000000 -vt 0.003238 -1.406868 0.000000 -vt 0.062886 -1.406121 0.000000 -vt 0.062886 -1.312237 0.000000 -vt 0.003238 -1.313511 0.000000 -vt 0.003238 -1.221600 0.000000 -vt 0.062433 -1.220157 0.000000 -vt 0.249101 -1.406868 0.000000 -vt 0.187038 -1.406121 0.000000 -vt 0.187038 -1.501080 0.000000 -vt 0.249101 -1.501080 0.000000 -vt 0.311165 -1.501080 0.000000 -vt 0.249101 -1.595291 0.000000 -vt 0.311165 -1.596038 0.000000 -vt 0.373240 -1.501080 0.000000 -vt 0.373240 -1.595238 0.000000 -vt 0.435316 -1.596038 0.000000 -vt 0.373240 -1.688556 0.000000 -vt 0.435316 -1.689922 0.000000 -vt 0.311165 -1.689922 0.000000 -vt 0.373240 -1.780455 0.000000 -vt 0.869796 -1.688556 0.000000 -vt 0.869796 -1.780455 0.000000 -vt 0.725273 -1.845092 0.000000 -vt 0.807721 -1.782002 0.000000 -vt 0.745657 -1.780560 0.000000 -vt 0.839119 -1.857477 0.000000 -vt 0.807721 -1.501080 0.000000 -vt 0.807721 -1.689922 0.000000 -vt 0.807721 -1.596038 0.000000 -vt 0.745657 -1.595291 0.000000 -vt 0.745657 -1.688648 0.000000 -vt 0.683594 -1.689922 0.000000 -vt 0.683594 -1.596038 0.000000 -vt 0.621518 -1.688556 0.000000 -vt 0.621518 -1.595238 0.000000 -vt 0.497379 -1.595291 0.000000 -vt 0.497379 -1.688648 0.000000 -vt 0.559443 -1.689922 0.000000 -vt 0.559443 -1.596038 0.000000 -vt 0.621518 -1.501080 0.000000 -vt 0.683594 -1.501080 0.000000 -vt 0.745657 -1.501080 0.000000 -vt 0.683594 -1.406121 0.000000 -vt 0.621518 -1.313603 0.000000 -vt 0.621518 -1.221704 0.000000 -vt 0.621518 -1.406922 0.000000 -vt 0.559443 -1.406121 0.000000 -vt 0.559443 -1.312237 0.000000 -vt 0.559443 -1.220157 0.000000 -vt 0.373240 -1.313603 0.000000 -vt 0.373240 -1.221704 0.000000 -vt 0.311165 -1.220157 0.000000 -vt 0.311165 -1.312237 0.000000 -vt 0.497379 -1.406868 0.000000 -vt 0.435316 -1.406121 0.000000 -vt 0.435316 -1.501080 0.000000 -vt 0.497379 -1.501080 0.000000 -vt 0.559443 -1.501080 0.000000 -vt 0.497379 -1.221600 0.000000 -vt 0.497379 -1.313511 0.000000 -vt 0.435316 -1.312237 0.000000 -vt 0.435316 -1.220157 0.000000 -vt 0.497379 -1.780560 0.000000 -vt 0.435316 -1.782002 0.000000 -vt 0.373240 -1.406922 0.000000 -vt 0.311165 -1.406121 0.000000 -vt 0.124962 -1.313603 0.000000 -vt 0.124962 -1.406922 0.000000 -vt 0.124962 -1.221704 0.000000 -vt 0.559443 -1.782002 0.000000 -vt 0.621518 -1.780455 0.000000 -vt 0.683594 -1.782002 0.000000 -vt 0.869796 -1.595238 0.000000 -vt 0.383733 -1.857477 0.000000 -vt 0.484898 -1.998854 0.000000 -vt 0.598390 -1.926414 0.000000 -vt 0.698942 -1.901678 0.000000 -vt 0.296734 -1.902025 0.000000 -vt 0.397286 -1.928533 0.000000 -vt 0.196183 -1.927629 0.000000 -vt 0.156040 -1.857477 0.000000 -vt 0.497838 -1.901678 0.000000 -vt 0.611426 -1.857086 0.000000 -vt 0.044408 -1.845210 0.000000 -vt 0.097587 -1.902025 0.000000 -vt 0.097587 -1.928533 0.000000 -vt 0.799494 -1.928533 0.000000 -vt 0.902003 -1.100134 0.000000 -vt 0.799494 -1.073626 0.000000 -vt 0.501223 -1.003304 0.000000 -vt 0.955181 -1.845210 0.000000 -vt 0.156040 -1.144682 0.000000 -vt 0.097587 -1.100134 0.000000 -vt 0.044408 -1.156949 0.000000 -vt 0.902003 -1.902025 0.000000 -vt 0.196183 -1.074530 0.000000 -vt 0.296734 -1.100134 0.000000 -vt 0.397286 -1.073626 0.000000 -vt 0.269887 -1.156949 0.000000 -vt 0.383733 -1.144682 0.000000 -vt 0.497580 -1.845092 0.000000 -vt 0.497838 -1.100482 0.000000 -vt 0.598390 -1.075745 0.000000 -vt 0.698942 -1.100482 0.000000 -vt 0.611426 -1.145073 0.000000 -vt 0.725273 -1.157067 0.000000 -vt 0.902003 -1.074530 0.000000 -vt 0.955181 -1.156949 0.000000 -vt 0.839119 -1.144682 0.000000 -vt 0.497580 -1.157067 0.000000 -vt -0.036167 -1.195114 0.000000 -vt -0.036161 -1.807049 0.000000 -vt -0.036161 -1.195111 0.000000 -# 162 texture coords - -g eyes -usemtl _Sharkgreatwhiteshark_eye -f 3689/3271 3496/3280 3492/3272 3670/3273 -f 3494/3276 3513/3277 3621/3274 3493/3275 -f 3492/3272 3496/3280 3495/3278 3682/3279 -f 3498/3281 3508/3282 3494/3276 3493/3275 -f 3496/3280 3692/3284 3499/3283 3495/3278 -f 3497/3285 3498/3281 3499/3283 3692/3284 -f 3695/3286 3508/3282 3498/3281 3497/3285 -f 3565/3289 3501/3290 3646/3287 3500/3288 -f 3502/3293 3503/3294 3596/3291 3754/3292 -f 3504/3296 3505/3297 3678/3295 3503/3294 -f 3740/3298 3506/3299 3505/3297 3504/3296 -f 3512/3301 3507/3302 3676/3300 3506/3299 -f 3494/3305 3508/3306 3639/3303 3636/3304 -f 3695/3307 3699/3308 3639/3303 3508/3306 -f 3509/3311 3511/3312 3625/3309 3624/3310 -f 3511/3312 3509/3311 3740/3298 3510/3313 -f 3740/3298 3509/3311 3512/3301 3506/3299 -f 3623/3314 3512/3301 3509/3311 3624/3310 -f 3623/3314 3513/3315 3507/3302 3512/3301 -f 3507/3302 3513/3315 3494/3305 3636/3304 -f 3502/3293 3737/3316 3504/3296 3503/3294 -f 3514/3317 3515/3318 3516/3283 3526/3278 -f 3516/3283 3515/3318 3642/3275 3641/3281 -f 3648/3319 3517/3274 3642/3275 3515/3318 -f 3652/3322 3532/3323 3518/3320 3647/3321 -f 3652/3322 3756/3325 3753/3324 3532/3323 -f 3646/3287 3650/3327 3663/3326 3500/3288 -f 3649/3328 3664/3329 3663/3326 3650/3327 -f 3529/3331 3520/3332 3519/3330 3664/3329 -f 3520/3332 3521/3334 3662/3333 3519/3330 -f 3523/3336 3758/3337 3522/3335 3521/3334 -f 3520/3332 3524/3338 3523/3336 3521/3334 -f 3764/3273 3525/3339 3523/3336 3524/3338 -f 3747/3280 3526/3278 3516/3283 3748/3284 -f 3527/3272 3528/3279 3526/3278 3747/3280 -f 3524/3338 3528/3279 3527/3272 3764/3273 -f 3529/3331 3528/3279 3524/3338 3520/3332 -f 3529/3331 3514/3317 3526/3278 3528/3279 -f 3533/3311 3532/3310 3753/3309 3776/3312 -f 3537/3296 3531/3316 3535/3293 3530/3294 -f 3539/3298 3533/3311 3776/3312 3774/3313 -f 3533/3311 3540/3301 3518/3314 3532/3310 -f 3534/3302 3640/3315 3518/3314 3540/3301 -f 3536/3291 3530/3294 3535/3293 3727/3292 -f 3557/3295 3538/3297 3537/3296 3530/3294 -f 3538/3297 3545/3299 3539/3298 3537/3296 -f 3539/3298 3545/3299 3540/3301 3533/3311 -f 3667/3300 3534/3302 3540/3301 3545/3299 -f 3534/3302 3541/3304 3643/3305 3640/3315 -f 3542/3303 3644/3306 3643/3305 3541/3304 -f 3542/3303 3781/3308 3779/3307 3644/3306 -f 3543/3340 3772/3341 3781/3308 3542/3303 -f 3544/3342 3783/3345 3546/3343 3654/3344 -f 3538/3297 3666/3346 3667/3300 3545/3299 -f 3548/3349 3547/3350 3665/3347 3556/3348 -f 3665/3347 3547/3350 3654/3344 3546/3343 -f 3548/3349 3554/3352 3549/3351 3547/3350 -f 3554/3352 3567/3354 3552/3353 3549/3351 -f 3551/3357 3553/3358 3550/3355 3659/3356 -f 3552/3353 3567/3354 3553/3358 3551/3357 -f 3554/3352 3558/3360 3568/3359 3567/3354 -f 3548/3349 3555/3361 3558/3360 3554/3352 -f 3666/3346 3555/3361 3548/3349 3556/3348 -f 3666/3346 3538/3297 3557/3295 3555/3361 -f 3536/3291 3559/3362 3557/3295 3530/3294 -f 3727/3292 3561/3364 3560/3363 3536/3291 -f 3560/3363 3570/3365 3559/3362 3536/3291 -f 3557/3295 3559/3362 3558/3360 3555/3361 -f 3559/3362 3570/3365 3568/3359 3558/3360 -f 3560/3363 3572/3367 3571/3366 3570/3365 -f 3562/3368 3572/3367 3560/3363 3561/3364 -f 3714/3371 3564/3372 3563/3369 3759/3370 -f 3565/3289 3500/3288 3564/3372 3714/3371 -f 3566/3375 3574/3376 3576/3373 3575/3374 -f 3550/3355 3553/3358 3569/3377 3574/3376 -f 3568/3359 3569/3377 3553/3358 3567/3354 -f 3571/3366 3569/3377 3568/3359 3570/3365 -f 3573/3378 3577/3379 3572/3367 3562/3368 -f 3569/3377 3571/3366 3576/3373 3574/3376 -f 3572/3367 3577/3379 3576/3373 3571/3366 -f 3576/3373 3577/3379 3669/3380 3575/3374 -f 3573/3378 3762/3381 3669/3380 3577/3379 -f 3579/3333 3671/3334 3580/3332 3578/3330 -f 3585/3335 3583/3337 3581/3336 3671/3334 -f 3586/3375 3582/3376 3584/3355 3585/3335 -f 3584/3355 3593/3356 3583/3337 3585/3335 -f 3579/3333 3586/3375 3585/3335 3671/3334 -f 3586/3375 3604/3374 3587/3373 3582/3376 -f 3603/3380 3588/3379 3587/3373 3604/3374 -f 3589/3367 3590/3366 3587/3373 3588/3379 -f 3587/3373 3590/3366 3591/3377 3582/3376 -f 3591/3377 3627/3358 3584/3355 3582/3376 -f 3592/3357 3593/3356 3584/3355 3627/3358 -f 3594/3382 3721/3383 3583/3337 3593/3356 -f 3598/3360 3595/3362 3678/3295 3679/3361 -f 3678/3295 3595/3362 3596/3291 3503/3294 -f 3597/3363 3755/3364 3754/3292 3596/3291 -f 3599/3359 3600/3365 3595/3362 3598/3360 -f 3590/3366 3600/3365 3599/3359 3591/3377 -f 3590/3366 3589/3367 3597/3363 3600/3365 -f 3602/3378 3601/3368 3589/3367 3588/3379 -f 3595/3362 3600/3365 3597/3363 3596/3291 -f 3601/3368 3755/3364 3597/3363 3589/3367 -f 3675/3326 3609/3327 3608/3287 3606/3288 -f 3603/3380 3742/3381 3602/3378 3588/3379 -f 3604/3374 3605/3384 3611/3369 3603/3380 -f 3579/3333 3605/3384 3604/3374 3586/3375 -f 3579/3333 3578/3330 3673/3385 3605/3384 -f 3675/3326 3606/3288 3610/3372 3673/3385 -f 3608/3287 3607/3290 3612/3289 3606/3288 -f 3609/3327 3614/3387 3615/3386 3608/3287 -f 3673/3385 3610/3372 3611/3369 3605/3384 -f 3612/3289 3613/3371 3610/3372 3606/3288 -f 3613/3371 3745/3370 3611/3369 3610/3372 -f 3622/3321 3616/3322 3615/3386 3614/3387 -f 3617/3325 3618/3388 3615/3386 3616/3322 -f 3615/3386 3618/3388 3607/3290 3608/3287 -f 3495/3278 3684/3317 3683/3331 3682/3279 -f 3499/3283 3620/3318 3684/3317 3495/3278 -f 3493/3275 3620/3318 3499/3283 3498/3281 -f 3493/3275 3621/3274 3619/3319 3620/3318 -f 3619/3319 3621/3274 3622/3321 3614/3387 -f 3623/3320 3622/3321 3621/3274 3513/3277 -f 3623/3320 3624/3323 3616/3322 3622/3321 -f 3625/3324 3617/3325 3616/3322 3624/3323 -f 3684/3317 3620/3318 3619/3319 3626/3328 -f 3592/3357 3722/3389 3594/3382 3593/3356 -f 3599/3359 3681/3354 3627/3358 3591/3377 -f 3627/3358 3681/3354 3628/3353 3592/3357 -f 3629/3352 3632/3351 3628/3353 3681/3354 -f 3680/3349 3633/3350 3632/3351 3629/3352 -f 3628/3353 3630/3390 3722/3389 3592/3357 -f 3628/3353 3632/3351 3711/3391 3630/3390 -f 3632/3351 3633/3350 3631/3344 3711/3391 -f 3680/3349 3637/3348 3634/3347 3633/3350 -f 3676/3300 3635/3392 3637/3348 3677/3346 -f 3636/3304 3635/3392 3676/3300 3507/3302 -f 3636/3304 3639/3303 3638/3340 3635/3392 -f 3638/3340 3634/3347 3637/3348 3635/3392 -f 3634/3347 3697/3343 3631/3344 3633/3350 -f 3699/3308 3698/3341 3638/3340 3639/3303 -f 3518/3320 3640/3277 3517/3274 3647/3321 -f 3643/3276 3642/3275 3517/3274 3640/3277 -f 3643/3276 3644/3282 3641/3281 3642/3275 -f 3779/3286 3645/3285 3641/3281 3644/3282 -f 3645/3285 3748/3284 3516/3283 3641/3281 -f 3653/3386 3646/3287 3501/3290 3757/3388 -f 3648/3319 3651/3387 3647/3321 3517/3274 -f 3649/3328 3514/3317 3529/3331 3664/3329 -f 3514/3317 3649/3328 3648/3319 3515/3318 -f 3650/3327 3651/3387 3648/3319 3649/3328 -f 3653/3386 3651/3387 3650/3327 3646/3287 -f 3653/3386 3652/3322 3647/3321 3651/3387 -f 3653/3386 3757/3388 3756/3325 3652/3322 -f 3549/3351 3655/3391 3654/3344 3547/3350 -f 3552/3353 3760/3390 3655/3391 3549/3351 -f 3552/3353 3551/3357 3656/3389 3760/3390 -f 3551/3357 3659/3356 3658/3382 3656/3389 -f 3658/3382 3659/3356 3758/3337 3657/3383 -f 3550/3355 3522/3335 3758/3337 3659/3356 -f 3566/3375 3522/3335 3550/3355 3574/3376 -f 3522/3335 3566/3375 3662/3333 3521/3334 -f 3575/3374 3660/3384 3662/3333 3566/3375 -f 3563/3369 3564/3372 3661/3385 3660/3384 -f 3663/3326 3661/3385 3564/3372 3500/3288 -f 3661/3385 3519/3330 3662/3333 3660/3384 -f 3519/3330 3661/3385 3663/3326 3664/3329 -f 3543/3340 3668/3392 3556/3348 3665/3347 -f 3556/3348 3668/3392 3667/3300 3666/3346 -f 3667/3300 3668/3392 3541/3304 3534/3302 -f 3541/3304 3668/3392 3543/3340 3542/3303 -f 3575/3374 3669/3380 3563/3369 3660/3384 -f 3670/3273 3672/3338 3581/3336 3720/3339 -f 3581/3336 3672/3338 3580/3332 3671/3334 -f 3683/3331 3580/3332 3672/3338 3682/3279 -f 3683/3331 3674/3329 3578/3330 3580/3332 -f 3578/3330 3674/3329 3675/3326 3673/3385 -f 3626/3328 3609/3327 3675/3326 3674/3329 -f 3609/3327 3626/3328 3619/3319 3614/3387 -f 3676/3300 3677/3346 3505/3297 3506/3299 -f 3677/3346 3679/3361 3678/3295 3505/3297 -f 3680/3349 3679/3361 3677/3346 3637/3348 -f 3680/3349 3629/3352 3598/3360 3679/3361 -f 3599/3359 3598/3360 3629/3352 3681/3354 -f 3672/3338 3670/3273 3492/3272 3682/3279 -f 3626/3328 3674/3329 3683/3331 3684/3317 -f 3716/3393 3685/3397 3689/3271 3670/3273 -f 3702/3396 3700/3406 3686/3394 3691/3395 -f 3716/3393 3688/3398 3685/3397 -f 3685/3397 3688/3398 3686/3394 3687/3399 -f 3693/3400 3685/3397 3687/3399 -f 3718/3401 3691/3395 3686/3394 3688/3398 -f 3693/3400 3496/3280 3689/3271 3685/3397 -f 3718/3401 3717/3420 3690/3402 3691/3395 -f 3693/3400 3497/3285 3692/3284 3496/3280 -f 3690/3402 3702/3396 3691/3395 -f 3690/3402 3711/3391 3694/3342 3702/3396 -f 3705/3403 3695/3286 3497/3285 3693/3400 -f 3694/3342 3697/3343 3696/3345 3702/3396 -f 3694/3342 3711/3391 3631/3344 3697/3343 -f 3698/3341 3699/3308 3696/3345 3697/3343 -f 3707/3404 3705/3403 3693/3400 3687/3399 -f 3697/3343 3634/3347 3638/3340 3698/3341 -f 3707/3404 3687/3399 3686/3394 3700/3405 -f 3696/3345 3707/3414 3700/3406 3702/3396 -f 3782/3404 3741/3405 3701/3394 3751/3399 -f 3729/3409 3723/3426 3734/3407 3703/3408 -f 3705/3410 3699/3308 3695/3307 -f 3708/3407 3709/3426 3780/3409 3704/3408 -f 3705/3410 3707/3414 3696/3345 3699/3308 -f 3706/3413 3756/3325 3715/3411 3708/3412 -f 3715/3411 3710/3416 3709/3415 3708/3412 -f 3690/3402 3722/3389 3630/3390 3711/3391 -f 3710/3416 3719/3417 3780/3409 3709/3415 -f 3712/3418 3501/3290 3565/3289 3714/3371 -f 3713/3419 3710/3416 3712/3418 3714/3371 -f 3717/3420 3594/3382 3722/3389 3690/3402 -f 3712/3418 3710/3416 3715/3411 3501/3290 -f 3718/3401 3688/3398 3716/3393 3717/3420 -f 3713/3419 3763/3421 3719/3417 3710/3416 -f 3720/3339 3721/3383 3716/3393 3670/3273 -f 3763/3421 3768/3422 3780/3409 3719/3417 -f 3721/3383 3594/3382 3717/3420 3716/3393 -f 3723/3415 3728/3416 3739/3411 3734/3412 -f 3724/3423 3704/3408 3780/3409 3768/3422 -f 3739/3411 3617/3325 3725/3413 3734/3412 -f 3768/3422 3763/3421 3767/3424 3724/3423 -f 3767/3424 3727/3292 3726/3425 3724/3423 -f 3625/3324 3511/3430 3725/3413 3617/3325 -f 3739/3411 3607/3290 3618/3388 3617/3325 -f 3726/3425 3727/3292 3535/3293 -f 3728/3416 3723/3415 3729/3409 3735/3417 -f 3730/3424 3736/3423 3738/3425 3754/3292 -f 3738/3425 3502/3293 3754/3292 -f 3730/3424 3733/3421 3731/3422 3736/3423 -f 3736/3423 3731/3422 3729/3409 3703/3408 -f 3733/3421 3735/3417 3729/3409 3731/3422 -f 3732/3428 3734/3407 3725/3427 3511/3312 -f 3733/3421 3743/3429 3744/3419 3735/3417 -f 3732/3428 3703/3408 3734/3407 -f 3744/3419 3728/3416 3735/3417 -f 3732/3428 3738/3425 3736/3423 3703/3408 -f 3744/3419 3613/3371 3749/3418 3728/3416 -f 3749/3418 3607/3290 3739/3411 3728/3416 -f 3737/3316 3502/3293 3738/3425 3732/3428 -f 3732/3428 3511/3312 3510/3313 3737/3316 -f 3737/3316 3510/3313 3740/3298 3504/3296 -f 3744/3419 3742/3381 3745/3370 3613/3371 -f 3751/3399 3752/3397 3750/3400 3782/3404 -f 3730/3424 3601/3368 3743/3429 3733/3421 -f 3750/3400 3645/3285 3746/3403 3782/3404 -f 3779/3286 3781/3431 3746/3403 3645/3285 -f 3743/3429 3602/3378 3742/3381 3744/3419 -f 3742/3381 3603/3380 3611/3369 3745/3370 -f 3750/3400 3747/3280 3748/3284 3645/3285 -f 3612/3289 3607/3290 3749/3418 3613/3371 -f 3750/3400 3752/3397 3777/3271 3747/3280 -f 3743/3429 3601/3368 3602/3378 -f 3701/3394 3769/3398 3752/3397 3751/3399 -f 3730/3424 3754/3292 3755/3364 3601/3368 -f 3706/3413 3776/3432 3753/3324 3756/3325 -f 3721/3383 3720/3339 3581/3336 3583/3337 -f 3757/3388 3501/3290 3715/3411 3756/3325 -f 3762/3381 3759/3370 3563/3369 3669/3380 -f 3523/3336 3525/3339 3657/3383 3758/3337 -f 3766/3420 3656/3389 3658/3382 -f 3759/3370 3762/3381 3713/3419 3714/3371 -f 3766/3420 3773/3401 3771/3402 3656/3389 -f 3771/3402 3655/3391 3760/3390 3656/3389 -f 3761/3429 3763/3421 3713/3419 3762/3381 -f 3573/3378 3562/3368 3761/3429 3762/3381 -f 3761/3429 3562/3368 3767/3424 3763/3421 -f 3765/3393 3657/3383 3525/3339 3764/3273 -f 3561/3364 3727/3292 3767/3424 3562/3368 -f 3766/3420 3658/3382 3657/3383 3765/3393 -f 3765/3393 3769/3398 3773/3401 3766/3420 -f 3777/3271 3764/3273 3527/3272 3747/3280 -f 3546/3343 3772/3341 3543/3340 3665/3347 -f 3544/3342 3654/3344 3655/3391 -f 3783/3345 3781/3308 3772/3341 3546/3343 -f 3771/3402 3770/3396 3544/3342 3655/3391 -f 3770/3396 3741/3406 3783/3345 3544/3342 -f 3771/3402 3773/3401 3778/3395 3770/3396 -f 3539/3298 3774/3313 3531/3316 3537/3296 -f 3773/3401 3769/3398 3701/3394 3778/3395 -f 3775/3428 3531/3316 3774/3313 3776/3312 -f 3726/3425 3535/3293 3531/3316 3775/3428 -f 3775/3428 3704/3408 3724/3423 3726/3425 -f 3765/3393 3752/3397 3769/3398 -f 3765/3393 3764/3273 3777/3271 3752/3397 -f 3706/3427 3708/3407 3775/3428 3776/3312 -f 3775/3428 3708/3407 3704/3408 -f 3701/3394 3741/3406 3770/3396 3778/3395 -f 3783/3345 3782/3414 3746/3410 3781/3308 -f 3783/3345 3741/3406 3782/3414 -# 281 polygons - 14 triangles - diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/shark.obj.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/shark.obj.meta deleted file mode 100644 index d065a02ba..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/shark.obj.meta +++ /dev/null @@ -1,105 +0,0 @@ -fileFormatVersion: 2 -guid: 92fe50136a7db4cc7bf5dceedcfc586e -ModelImporter: - serializedVersion: 21202 - internalIDToNameTable: [] - externalObjects: {} - materials: - materialImportMode: 2 - materialName: 0 - materialSearch: 1 - materialLocation: 1 - animations: - legacyGenerateAnimations: 4 - bakeSimulation: 0 - resampleCurves: 1 - optimizeGameObjects: 0 - removeConstantScaleCurves: 1 - motionNodeName: - rigImportErrors: - rigImportWarnings: - animationImportErrors: - animationImportWarnings: - animationRetargetingWarnings: - animationDoRetargetingWarnings: 0 - importAnimatedCustomProperties: 0 - importConstraints: 0 - animationCompression: 1 - animationRotationError: 0.5 - animationPositionError: 0.5 - animationScaleError: 0.5 - animationWrapMode: 0 - extraExposedTransformPaths: [] - extraUserProperties: [] - clipAnimations: [] - isReadable: 1 - meshes: - lODScreenPercentages: [] - globalScale: 1 - meshCompression: 0 - addColliders: 0 - useSRGBMaterialColor: 1 - sortHierarchyByName: 1 - importVisibility: 1 - importBlendShapes: 1 - importCameras: 1 - importLights: 1 - nodeNameCollisionStrategy: 1 - fileIdsGeneration: 2 - swapUVChannels: 0 - generateSecondaryUV: 0 - useFileUnits: 1 - keepQuads: 0 - weldVertices: 1 - bakeAxisConversion: 0 - preserveHierarchy: 0 - skinWeightsMode: 0 - maxBonesPerVertex: 4 - minBoneWeight: 0.001 - optimizeBones: 1 - meshOptimizationFlags: -1 - indexFormat: 0 - secondaryUVAngleDistortion: 8 - secondaryUVAreaDistortion: 15.000001 - secondaryUVHardAngle: 88 - secondaryUVMarginMethod: 1 - secondaryUVMinLightmapResolution: 40 - secondaryUVMinObjectScale: 1 - secondaryUVPackMargin: 4 - useFileScale: 1 - tangentSpace: - normalSmoothAngle: 60 - normalImportMode: 0 - tangentImportMode: 3 - normalCalculationMode: 4 - legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 - blendShapeNormalImportMode: 1 - normalSmoothingSource: 0 - referencedClips: [] - importAnimation: 1 - humanDescription: - serializedVersion: 3 - human: [] - skeleton: [] - armTwist: 0.5 - foreArmTwist: 0.5 - upperLegTwist: 0.5 - legTwist: 0.5 - armStretch: 0.05 - legStretch: 0.05 - feetSpacing: 0 - globalScale: 1 - rootMotionBoneName: - hasTranslationDoF: 0 - hasExtraRoot: 0 - skeletonHasParents: 1 - lastHumanDescriptionAvatarSource: {instanceID: 0} - autoGenerateAvatarMappingIfUnspecified: 1 - animationType: 2 - humanoidOversampling: 1 - avatarSetup: 0 - addHumanoidExtraRootOnlyWhenUsingAvatar: 1 - additionalBone: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/tentacle_guy.fbx b/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/tentacle_guy.fbx deleted file mode 100644 index 692790676..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/tentacle_guy.fbx and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/tentacle_guy.fbx.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/tentacle_guy.fbx.meta deleted file mode 100644 index 64f5ef49f..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Models/tentacle_guy.fbx.meta +++ /dev/null @@ -1,609 +0,0 @@ -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/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs.meta deleted file mode 100644 index 69e2f0949..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6d65e63468c2542c684d7e441b40f6c8 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBamboo.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBamboo.asset deleted file mode 100644 index 94fc66745..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBamboo.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBamboo.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBamboo.asset.meta deleted file mode 100644 index 6917eeadb..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBamboo.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4c46db05afff546f8a9f9333946e9882 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBody.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBody.asset deleted file mode 100644 index 6ab3e177c..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBody.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBody.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBody.asset.meta deleted file mode 100644 index 5c826115e..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeBody.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: dbf5bc78c024b4724bd8b2aaca1af0c2 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeFloor.asset b/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeFloor.asset deleted file mode 100644 index ed883c0d2..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeFloor.asset and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeFloor.asset.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeFloor.asset.meta deleted file mode 100644 index 0fa3990c6..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/SnakeFloor.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c73079cca10924a80871331c66b4ad4b -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 11400000 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab b/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab deleted file mode 100644 index e76a37d4f..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab.meta deleted file mode 100644 index 2b57782d2..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePeg.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: fd76f3270d8cf4fe3bc7a9f2f3cb6b4a -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab b/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab deleted file mode 100644 index daa9b5fee..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab.meta deleted file mode 100644 index ca1021a20..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/TanglePegSlot.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: aa6b142bbb2bb4887bebe33010c84c6c -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/WrapPeg.prefab b/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/WrapPeg.prefab deleted file mode 100644 index 661fdcd1b..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/WrapPeg.prefab and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/WrapPeg.prefab.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/WrapPeg.prefab.meta deleted file mode 100644 index e4fe13d36..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Prefabs/WrapPeg.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 88eb4cec0c7324e51bf5e7e1342370e3 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts.meta deleted file mode 100644 index 0d3d741b7..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3bfafe4a7962d422083d44fc9934852e -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CableCarController.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CableCarController.cs deleted file mode 100644 index ea7f8e54c..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CableCarController.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - public class CableCarController : MonoBehaviour - { - public ObiPinhole pinhole; - public float carSpeed = 1; - - // Update is called once per frame - void Update() - { - float speed = 0; - if (Input.GetKey(KeyCode.W)) - { - speed = carSpeed; - } - - if (Input.GetKey(KeyCode.S)) - { - speed = -carSpeed; - } - pinhole.motorSpeed = speed; - - if (Input.GetKeyDown(KeyCode.Space)) - { - pinhole.friction = pinhole.friction > 0.5f ? 0 : 1; - } - } - } -} diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CableCarController.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CableCarController.cs.meta deleted file mode 100644 index 96a021d0e..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CableCarController.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: df6783efff96747d7b949f3538d1cee7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CharacterControl2D.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CharacterControl2D.cs deleted file mode 100644 index 2bc1b2078..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CharacterControl2D.cs +++ /dev/null @@ -1,79 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - public class CharacterControl2D : MonoBehaviour - { - - public float floorRaycastDistance = 1.2f; - - [Header("Grounded")] - public float acceleration = 80; - public float maxSpeed = 6; - public float damping = 0.005f; - public float jumpPower = 10; - - [Header("Airborne")] - public float airAcceleration = 16; - public float airMaxSpeed = 12; - public float extraGravity = -12; - - [Header("Auto upright")] - public Vector3 centerOfMass = new Vector3(0, -0.25f, 0); - public float P = 2; - public float D = 0.1f; - - private Rigidbody unityRigidbody; - private float axis; - private bool grounded; - private float error; - private float prevError; - - public void Awake() - { - unityRigidbody = GetComponent(); - unityRigidbody.centerOfMass = centerOfMass; - } - - private void Update() - { - axis = Input.GetAxisRaw("Horizontal"); - grounded = Physics.Raycast(new Ray(transform.position, -Vector3.up), floorRaycastDistance); - - if (Input.GetButtonDown("Jump") && grounded) - unityRigidbody.AddForce(Vector3.up * jumpPower, ForceMode.VelocityChange); - } - - private void FixedUpdate() - { - var velocity = unityRigidbody.linearVelocity; - - prevError = error; - error = Vector3.SignedAngle(unityRigidbody.transform.up, Vector3.up, Vector3.forward); - - if (grounded) - { - float accel = axis * acceleration * Time.deltaTime; - if ((velocity.x < maxSpeed && accel > 0) || (velocity.x > -maxSpeed && accel < 0)) - velocity.x += accel; - - if (Mathf.Approximately(axis, 0)) - velocity.x *= Mathf.Pow(damping, Time.deltaTime); - - unityRigidbody.AddTorque(new Vector3(0, 0, error * P + (error - prevError) / Time.deltaTime * D)); - } - else - { - float accel = axis * airAcceleration * Time.deltaTime; - if ((velocity.x < airMaxSpeed && accel > 0) || (velocity.x > -airMaxSpeed && accel < 0)) - velocity.x += accel; - - velocity.y += extraGravity * Time.deltaTime; - } - - unityRigidbody.linearVelocity = velocity; - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CharacterControl2D.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CharacterControl2D.cs.meta deleted file mode 100644 index e5c889d78..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CharacterControl2D.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 82b0f164ac14247fd8a566109fbbe771 -labels: -- ObiRope -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CraneController.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CraneController.cs deleted file mode 100644 index 62f926e8f..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CraneController.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - 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); - } - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CraneController.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CraneController.cs.meta deleted file mode 100644 index 32e4eeb6b..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CraneController.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 5551d37f45fd044ff8768019501c20a5 -labels: -- ObiRope -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CursorController.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CursorController.cs deleted file mode 100644 index f5257fff3..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CursorController.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - [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/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CursorController.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CursorController.cs.meta deleted file mode 100644 index 1ac896612..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/CursorController.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 83c7e82b3aac04e408bc8bfe9027c983 -labels: -- ObiRope -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/ExtendableGrapplingHook.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/ExtendableGrapplingHook.cs deleted file mode 100644 index 8c2ade265..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/ExtendableGrapplingHook.cs +++ /dev/null @@ -1,227 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - - -/** - * 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. - */ - -namespace Obi.Samples -{ - 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 = solver.transform.InverseTransformPoint(hookAttachment.point) - origin; - float distance = direction.magnitude; - direction.Normalize(); - - LayParticlesInStraightLine(origin, direction); - - // increase length: - float distanceLeft = distance - cursor.ChangeLength(hookShootSpeed * Time.deltaTime); - - // if we have exceeded the desired length, correct it and break the loop: - if (distanceLeft < 0) - { - cursor.ChangeLength(distanceLeft); - break; - } - - // wait for next frame: - yield return null; - } - - // wait for the last length change to take effect, and ensure the rope is straight: - yield return new WaitForFixedUpdate(); - yield return null; - LayParticlesInStraightLine(origin, direction); - - // restore masses so that the simulation takes over now that the rope is in place: - for (int i = 0; i < rope.activeParticleCount; ++i) - solver.invMasses[rope.solverIndices[i]] = 10; // 1/0.1 = 10 - - // Pin both ends of the rope (this enables two-way interaction between character and rope): - var batch = new ObiPinConstraintsBatch(); - batch.AddConstraint(rope.elements[0].particle1, character, transform.localPosition, Quaternion.identity, 0, 0); - batch.AddConstraint(rope.elements[rope.elements.Count - 1].particle2, hookAttachment.collider.GetComponent(), - hookAttachment.collider.transform.InverseTransformPoint(hookAttachment.point), Quaternion.identity, 0, 0); - batch.activeConstraintCount = 2; - pinConstraints.AddBatch(batch); - - rope.SetConstraintsDirty(Oni.ConstraintType.Pin); - } - - private void DetachHook() - { - // Set the rope blueprint to null (automatically removes the previous blueprint from the solver, if any). - rope.ropeBlueprint = null; - rope.GetComponent().enabled = false; - } - - - void Update() - { - - if (Input.GetMouseButtonDown(0)) - { - if (!rope.isLoaded) - LaunchHook(); - else - DetachHook(); - } - - if (rope.isLoaded) - { - if (Input.GetKey(KeyCode.W)) - { - cursor.ChangeLength(-hookExtendRetractSpeed * Time.deltaTime); - } - if (Input.GetKey(KeyCode.S)) - { - cursor.ChangeLength(hookExtendRetractSpeed * Time.deltaTime); - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/ExtendableGrapplingHook.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/ExtendableGrapplingHook.cs.meta deleted file mode 100644 index 3347fd188..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/ExtendableGrapplingHook.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: b77478c97cefb4dec9cc85236f7c5fca -labels: -- ObiRope -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/GrapplingHook.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/GrapplingHook.cs deleted file mode 100644 index b3448a132..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/GrapplingHook.cs +++ /dev/null @@ -1,155 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -/** - * 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. - */ - -namespace Obi.Samples -{ - 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); - batch.AddConstraint(rope.solverIndices[blueprint.activeParticleCount - 1], hookAttachment.collider.GetComponent(), - hookAttachment.collider.transform.InverseTransformPoint(hookAttachment.point), Quaternion.identity, 0, 0); - batch.activeConstraintCount = 2; - pinConstraints.AddBatch(batch); - - rope.SetConstraintsDirty(Oni.ConstraintType.Pin); - } - - private void DetachHook() - { - // Set the rope blueprint to null (automatically removes the previous blueprint from the solver, if any). - rope.ropeBlueprint = null; - rope.GetComponent().enabled = false; - } - - - void Update() - { - - if (Input.GetMouseButtonDown(0)) - { - if (!rope.isLoaded) - LaunchHook(); - else - DetachHook(); - } - - if (rope.isLoaded) - { - if (Input.GetKey(KeyCode.W)) - { - cursor.ChangeLength(rope.restLength - hookExtendRetractSpeed * Time.deltaTime); - } - if (Input.GetKey(KeyCode.S)) - { - cursor.ChangeLength(rope.restLength + hookExtendRetractSpeed * Time.deltaTime); - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/GrapplingHook.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/GrapplingHook.cs.meta deleted file mode 100644 index f34f6918a..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/GrapplingHook.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 94f9aa141b5964f9f91dadcc1919618c -labels: -- ObiRope -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HighlightCollidingRopes.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HighlightCollidingRopes.cs deleted file mode 100644 index a988cbd94..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HighlightCollidingRopes.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - public class HighlightCollidingRopes : MonoBehaviour - { - public void Highlight(ActorActorCollisionDetector.ActorPair pair) - { - if (pair.actorA.TryGetComponent(out ActorBlinker blinkerA)) blinkerA.Blink(pair.particleA); - if (pair.actorB.TryGetComponent(out ActorBlinker blinkerB)) blinkerB.Blink(pair.particleB); - } - } -} diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HighlightCollidingRopes.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HighlightCollidingRopes.cs.meta deleted file mode 100644 index 1eb72df78..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HighlightCollidingRopes.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 50979842bbc734acdb11f0f01062fe92 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HosePump.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HosePump.cs deleted file mode 100644 index 5f5311d80..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HosePump.cs +++ /dev/null @@ -1,84 +0,0 @@ -using UnityEngine; - -namespace Obi.Samples -{ - [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/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HosePump.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HosePump.cs.meta deleted file mode 100644 index 0cbb3fc86..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/HosePump.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d71cdcf242c9b44fb874af7b7d8fd2b9 -timeCreated: 1518879675 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/PinholeRatchet.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/PinholeRatchet.cs deleted file mode 100644 index 57bd1d835..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/PinholeRatchet.cs +++ /dev/null @@ -1,50 +0,0 @@ -using UnityEngine; - -namespace Obi.Samples -{ - public class PinholeRatchet : MonoBehaviour - { - public ObiPinhole pinhole; - public bool direction = false; - public float teethSeparation = 0.1f; - - public float distanceToNextTooth { get; private set; } - - void Update() - { - if (pinhole == null || pinhole.rope == null) - return; - - float restLength = (pinhole.rope as ObiRopeBase).restLength; - float normalizedTeethDistance = Mathf.Max(0.001f, teethSeparation / restLength); - var range = pinhole.range; - - if (direction) - { - distanceToNextTooth = (range.y - pinhole.position) * restLength; - while (distanceToNextTooth > teethSeparation) - { - range.y -= normalizedTeethDistance; - distanceToNextTooth -= teethSeparation; - } - } - else - { - distanceToNextTooth = (pinhole.position - range.x) * restLength; - while (distanceToNextTooth > teethSeparation) - { - range.x += normalizedTeethDistance; - distanceToNextTooth -= teethSeparation; - } - } - - pinhole.range = range; - } - - public void OnDisable() - { - if (pinhole != null) - pinhole.range = new Vector2(0, 1); - } - } -} diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/PinholeRatchet.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/PinholeRatchet.cs.meta deleted file mode 100644 index ec6fb16e1..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/PinholeRatchet.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: de82c5da5889a437bbca59463285c6a3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RatchetController.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RatchetController.cs deleted file mode 100644 index 59ab5a77d..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RatchetController.cs +++ /dev/null @@ -1,23 +0,0 @@ -using UnityEngine; - -namespace Obi.Samples -{ - public class RatchetController : MonoBehaviour - { - public PinholeRatchet ratchet; - - public Transform ratchetVisualizer; - public float minAngle = 0; - public float maxAngle = 25; - - void Update() - { - if (Input.GetKeyDown(KeyCode.Space)) - ratchet.enabled = !ratchet.enabled; - - float angle = ratchet.enabled ? Mathf.LerpAngle(minAngle, maxAngle, ratchet.distanceToNextTooth / ratchet.teethSeparation) : maxAngle; - ratchetVisualizer.rotation = Quaternion.AngleAxis(angle, Vector3.forward); - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RatchetController.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RatchetController.cs.meta deleted file mode 100644 index 9c4b951ee..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RatchetController.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 89f7ec50c6e36440593469d980ba7830 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RenderLineBetweenTransforms.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RenderLineBetweenTransforms.cs deleted file mode 100644 index 867d08d66..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RenderLineBetweenTransforms.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - [RequireComponent(typeof(LineRenderer))] - public class RenderLineBetweenTransforms : MonoBehaviour - { - public Transform transformA; - public Transform transformB; - LineRenderer line; - - void Awake() - { - line = GetComponent(); - } - - void Update() - { - if (transformA != null && transformB != null) - line.SetPositions(new Vector3[] { transformA.position, transformB.position }); - } - } -} diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RenderLineBetweenTransforms.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RenderLineBetweenTransforms.cs.meta deleted file mode 100644 index fe9c79383..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RenderLineBetweenTransforms.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 411d9eba4bb0042bf9302873985bc6e0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeBetweenTwoPoints.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeBetweenTwoPoints.cs deleted file mode 100644 index bd01b8f3c..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeBetweenTwoPoints.cs +++ /dev/null @@ -1,71 +0,0 @@ -using UnityEngine; - -namespace Obi.Samples -{ - 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/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeBetweenTwoPoints.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeBetweenTwoPoints.cs.meta deleted file mode 100644 index fe82b5414..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeBetweenTwoPoints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9eaa9e75d3f0a4e119decb19dce797be -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeNet.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeNet.cs deleted file mode 100644 index d3be53849..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeNet.cs +++ /dev/null @@ -1,130 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - /** - * 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/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeNet.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeNet.cs.meta deleted file mode 100644 index 9bc85116d..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeNet.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: 83e341aa1a9a14825ab84ad04cd5f44c -labels: -- ObiRope -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeSweepCut.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeSweepCut.cs deleted file mode 100644 index d6bdd3649..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeSweepCut.cs +++ /dev/null @@ -1,150 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - [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); - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeSweepCut.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeSweepCut.cs.meta deleted file mode 100644 index ba9f07b7c..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeSweepCut.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 88cb6f64c607f46b3b0d7a30a99ed18b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTenser.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTenser.cs deleted file mode 100644 index 5e1aa2799..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTenser.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - public class RopeTenser : MonoBehaviour - { - public float force = 10; - - // Update is called once per frame - void Update() - { - GetComponent().AddForce(Vector3.down * force); - } - } -} diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTenser.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTenser.cs.meta deleted file mode 100644 index 6af8d62be..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTenser.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6a01ab42f187a43818168cd1cd11d3cf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTensionColorizer.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTensionColorizer.cs deleted file mode 100644 index 23a38d675..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTensionColorizer.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - [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/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTensionColorizer.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTensionColorizer.cs.meta deleted file mode 100644 index c6f4f97c9..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/RopeTensionColorizer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 51f5e34b2316b45c6bdf971b375b5f2e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SnakeController.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SnakeController.cs deleted file mode 100644 index a939ce8f0..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SnakeController.cs +++ /dev/null @@ -1,126 +0,0 @@ -using UnityEngine; - -namespace Obi.Samples -{ - 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; - } - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SnakeController.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SnakeController.cs.meta deleted file mode 100644 index 1a1733556..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SnakeController.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e5d46d2f0b9f9496f9ed59231aa6982d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SpiralCurve.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SpiralCurve.cs deleted file mode 100644 index 62469a0f4..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SpiralCurve.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - [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/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SpiralCurve.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SpiralCurve.cs.meta deleted file mode 100644 index 2eb51c90b..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/SpiralCurve.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -fileFormatVersion: 2 -guid: e76488b5e11ef47ba9c0746db5c47115 -labels: -- ObiRope -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPeg.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPeg.cs deleted file mode 100644 index fc85aafaf..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPeg.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System.Collections; -using UnityEngine; - -namespace Obi.Samples -{ - [RequireComponent(typeof(Rigidbody))] - public class TangledPeg : MonoBehaviour - { - public TangledPegSlot currentSlot; - public Collider floorCollider; - public ObiRope attachedRope; - - [Header("Movement")] - public float stiffness = 200; - public float damping = 20; - public float maxAccel = 50; - public float minDistance = 0.05f; - - - public Rigidbody rb { get; private set; } - public ObiRigidbody orb { get; private set; } - - void Awake() - { - rb = GetComponent(); - orb = GetComponent(); - - // Ignore collisions with the floor: - Physics.IgnoreCollision(GetComponent(), floorCollider); - - // Initialize the peg's current slot, if any: - if (currentSlot != null) - { - currentSlot.currentPeg = this; - transform.position = currentSlot.transform.position; - } - } - - public float MoveTowards(Vector3 position) - { - Vector3 vector = position - transform.position; - float distance = Vector3.Magnitude(vector); - - // simple damped spring: F = -kx - vu - Vector3 accel = stiffness * vector - damping * rb.linearVelocity; - - // clamp spring acceleration: - accel = Vector3.ClampMagnitude(accel, maxAccel); - - rb.AddForce(accel, ForceMode.Acceleration); - - return distance; - } - - public void DockInSlot(TangledPegSlot slot) - { - StopAllCoroutines(); - StartCoroutine(MoveTowardsSlot(slot)); - } - - public void UndockFromCurrentSlot() - { - if (currentSlot != null) - { - currentSlot.currentPeg = null; - rb.isKinematic = false; - } - } - - private IEnumerator MoveTowardsSlot(TangledPegSlot slot) - { - float distance = float.MaxValue; - orb.kinematicForParticles = true; - - while (distance > minDistance) - { - distance = MoveTowards(slot.transform.position); - yield return 0; - } - - currentSlot = slot; - currentSlot.currentPeg = this; - transform.position = currentSlot.transform.position; - rb.isKinematic = true; - orb.kinematicForParticles = false; - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPeg.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPeg.cs.meta deleted file mode 100644 index 5e3431e2c..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPeg.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: beb10e70cc06a4b019ecf88348a5f7fa -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPegSlot.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPegSlot.cs deleted file mode 100644 index 5febdfd65..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPegSlot.cs +++ /dev/null @@ -1,34 +0,0 @@ -using UnityEngine; - -namespace Obi.Samples -{ - public class TangledPegSlot : MonoBehaviour - { - public TangledPeg currentPeg; - public Color tintColor; - - private Material instance; - private Color normalColor; - - public void Awake() - { - instance = GetComponent().material; - normalColor = instance.color; - } - - public void Tint() - { - instance.color = tintColor; - } - - public void ResetColor() - { - instance.color = normalColor; - } - - public void OnDestroy() - { - Destroy(instance); - } - } -} diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPegSlot.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPegSlot.cs.meta deleted file mode 100644 index b4c1bbdf3..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledPegSlot.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 866212c246a9c4c5797069099ad745aa -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledRopesGameController.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledRopesGameController.cs deleted file mode 100644 index 8a0c5345b..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledRopesGameController.cs +++ /dev/null @@ -1,138 +0,0 @@ -using UnityEngine; -using UnityEngine.Events; - -namespace Obi.Samples -{ - [RequireComponent(typeof(ObiSolver))] - public class TangledRopesGameController : MonoBehaviour - { - public TangledPegSlot[] pegSlots; - public float pegHoverHeight = 1; - public float maxPegDistanceFromSlot = 1.5f; - public int framesWithoutContactsToWin = 30; - public UnityEvent onFinish = new UnityEvent(); - - private TangledPeg selectedPeg; - private Plane floor = new Plane(Vector3.up, 0); - private int framesSinceLastContact = 0; - - void OnEnable() - { - GetComponent().OnParticleCollision += Solver_OnParticleCollision; - } - - private void OnDisable() - { - GetComponent().OnParticleCollision -= Solver_OnParticleCollision; - } - - private TangledPegSlot FindCandidateSlot(TangledPeg peg) - { - // Go over all slots, find the closest one to the peg that's closer than - // maxPegDistanceFromSlot: - - TangledPegSlot closest = null; - float closestDistance = float.MaxValue; - - foreach (TangledPegSlot slot in pegSlots) - { - // reset slot color, to make sure it looks normal if it's not a candidate for our peg. - slot.ResetColor(); - - // ignore occupied slots: - if (slot.currentPeg != null) - continue; - - Vector3 slotOnFloor = floor.ClosestPointOnPlane(slot.transform.position); - Vector3 pegOnFloor = floor.ClosestPointOnPlane(peg.transform.position); - - float distance = Vector3.Distance(slotOnFloor, pegOnFloor); - if (distance < closestDistance && distance < maxPegDistanceFromSlot) - { - closest = slot; - closestDistance = distance; - } - } - - return closest; - } - - private void Update() - { - Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); - - // User clicks, cast a ray towards the floor, see if it hits any peg. - if (Input.GetMouseButtonDown(0)) - { - if (Physics.Raycast(ray, out RaycastHit hit)) - { - // if the ray hit a peg, store it as the selected peg and lift it off from its current slot. - if (hit.transform.TryGetComponent(out TangledPeg peg) && peg.currentSlot != null) - { - selectedPeg = peg; - selectedPeg.UndockFromCurrentSlot(); - } - } - } - - if (selectedPeg != null) - { - // Make selected peg follow the mouse cursor: - if (floor.Raycast(ray, out float enter)) - selectedPeg.MoveTowards(ray.GetPoint(enter) + Vector3.up * pegHoverHeight); - - // Try to find a suitable slot to drop the peg: - TangledPegSlot closest = FindCandidateSlot(selectedPeg); - - // If we found a candidate slot, tint it to give the player some visual feedback: - if (closest != null) - closest.Tint(); - - // Drop selected peg: - if (Input.GetMouseButtonUp(0)) - { - // If we could find a free slot nearby, connect to it: - if (closest != null) - { - selectedPeg.currentSlot = null; - selectedPeg.DockInSlot(closest); - closest.ResetColor(); - } - else // If we couldn't find one or if it's too far, return to current slot. - { - selectedPeg.DockInSlot(selectedPeg.currentSlot); - } - - selectedPeg = null; - } - } - - // If all ropes have been contact-free for a certain amount of frames, trigger finish event. - if (framesSinceLastContact >= framesWithoutContactsToWin && onFinish != null) - onFinish.Invoke(); - - } - - private void Solver_OnParticleCollision(ObiSolver s, ObiNativeContactList e) - { - // Count contacts between different ropes (that is, exclude self-contacts): - int contactsBetweenRopes = 0; - - for (int i = 0; i < e.count; ++i) - { - var ropeA = s.particleToActor[s.simplices[e[i].bodyA]].actor; - var ropeB = s.particleToActor[s.simplices[e[i].bodyB]].actor; - - if (ropeA != ropeB) - contactsBetweenRopes++; - } - - // If there's no contacts, bump the amount of frames we've been contact-free. - // Otherwise reset the amount of frames to zero. - if (contactsBetweenRopes == 0) - framesSinceLastContact++; - else - framesSinceLastContact = 0; - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledRopesGameController.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledRopesGameController.cs.meta deleted file mode 100644 index 3a556d54a..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/TangledRopesGameController.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c1cdc16773c1f4ebe94e32c3ae0005bf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/VineClimbController.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/VineClimbController.cs deleted file mode 100644 index 6da29b457..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/VineClimbController.cs +++ /dev/null @@ -1,114 +0,0 @@ - -using UnityEngine; - -namespace Obi.Samples -{ - public class VineClimbController : MonoBehaviour - { - public ObiSolver solver; - public float climbSpeed = 1.5f; - - ObiPinhole pinhole; - bool pressedSpace = false; - - void Start() - { - solver.OnCollision += Solver_OnCollision; - } - - public void Update() - { - if (pinhole != null) - { - float speed = 0; - if (Input.GetKey(KeyCode.W)) - speed = climbSpeed; - if (Input.GetKey(KeyCode.S)) - speed = -climbSpeed; - - pinhole.motorSpeed = speed; - } - - if (Input.GetKeyDown(KeyCode.Space)) - { - pressedSpace = true; - DetachFromVine(); - } - } - - private void Solver_OnCollision(ObiSolver solver, ObiNativeContactList contacts) - { - if (pressedSpace) - { - int bestParticle = -1; - float closestDistance = float.MaxValue; - Vector3 closestOffset = Vector3.zero; - foreach (var c in contacts) - { - if (c.distance < 0.001f) - { - ObiCollider collider = ObiColliderWorld.GetInstance().colliderHandles[c.bodyB].owner as ObiCollider; - if (collider.sourceCollider.isTrigger) - { - int particle = solver.simplices[c.bodyA]; - var worldPosition = solver.transform.TransformPoint(solver.positions[particle]); - Vector3 offset = worldPosition - collider.transform.position; - float distance = Vector3.Magnitude(offset); - - if (distance < closestDistance) - { - closestDistance = distance; - closestOffset = offset; - bestParticle = particle; - } - } - } - } - - if (bestParticle >= 0) - { - var actor = solver.particleToActor[bestParticle].actor; - AttachToVine(actor as ObiRope, bestParticle, closestOffset); - } - - pressedSpace = false; - } - } - - private float GetParticleMu(ObiRope rope, int solverParticleIndex) - { - for (int i = 0; i < rope.elements.Count; ++i) - { - if (rope.elements[i].particle1 == solverParticleIndex) - return i / (float)rope.elements.Count; - if (rope.elements[i].particle2 == solverParticleIndex) - return (i + 1) / (float)rope.elements.Count; - } - return 1; - } - - // Update is called once per frame - void AttachToVine(ObiRope rope, int particle, Vector3 offset) - { - if (pinhole == null && rope != null) - { - transform.position += offset; - pinhole = rope.gameObject.AddComponent(); - pinhole.position = GetParticleMu(rope, particle); - pinhole.motorForce = Mathf.Infinity; - pinhole.friction = 1; - pinhole.target = this.transform; - } - } - - void DetachFromVine() - { - if (pinhole != null) - { - GameObject.Destroy(pinhole); - pinhole = null; - pressedSpace = false; - } - } - } -} diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/VineClimbController.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/VineClimbController.cs.meta deleted file mode 100644 index 12b4f345b..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/VineClimbController.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 50c674b3f8f0045249ac099130c6a6b2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopeGameController.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopeGameController.cs deleted file mode 100644 index aa3da3fc2..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopeGameController.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Events; - -namespace Obi.Samples -{ - [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(); - } - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopeGameController.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopeGameController.cs.meta deleted file mode 100644 index a1437745f..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopeGameController.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 92b1832c67f564e9fa43a180598111e8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopePlayerController.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopePlayerController.cs deleted file mode 100644 index bd2e656c8..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopePlayerController.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - [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/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopePlayerController.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopePlayerController.cs.meta deleted file mode 100644 index a819f0c7e..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/WrapRopePlayerController.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fdf58ad80e1cd4860aa12e8da0aa833c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/Wrappable.cs b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/Wrappable.cs deleted file mode 100644 index d5e7337e0..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/Wrappable.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi.Samples -{ - public class Wrappable : MonoBehaviour - { - - private bool wrapped = false; - public Color normalColor = new Color(0.2f, 0.2f, 0.8f); - public Color wrappedColor = new Color(0.9f, 0.9f, 0.2f); - - 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/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/Wrappable.cs.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/Wrappable.cs.meta deleted file mode 100644 index 1982e779b..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Scripts/Wrappable.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 39f0f8f454a2049f3af7bad3dda0481e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures.meta deleted file mode 100644 index 01e9927f1..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 538d3ea4a9f2b42c0b88206c340f4ab4 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rod.png b/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rod.png deleted file mode 100644 index f33a031f9..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rod.png and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rod.png.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rod.png.meta deleted file mode 100644 index 4dbd893f9..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rod.png.meta +++ /dev/null @@ -1,123 +0,0 @@ -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/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_NRM.png b/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_NRM.png deleted file mode 100644 index 5979b81d7..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_NRM.png and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_NRM.png.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_NRM.png.meta deleted file mode 100644 index d7fc89aaf..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_NRM.png.meta +++ /dev/null @@ -1,90 +0,0 @@ -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/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_OCC.png b/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_OCC.png deleted file mode 100644 index cb35a1ec3..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_OCC.png and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_OCC.png.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_OCC.png.meta deleted file mode 100644 index fc28463de..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_OCC.png.meta +++ /dev/null @@ -1,90 +0,0 @@ -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/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_red.png b/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_red.png deleted file mode 100644 index f900cb956..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_red.png and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_red.png.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_red.png.meta deleted file mode 100644 index 63234a1da..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/Rope_red.png.meta +++ /dev/null @@ -1,134 +0,0 @@ -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/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/cylinder_NRM.png b/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/cylinder_NRM.png deleted file mode 100644 index 90ac43dcf..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/cylinder_NRM.png and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/cylinder_NRM.png.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/cylinder_NRM.png.meta deleted file mode 100644 index 194c30a16..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/cylinder_NRM.png.meta +++ /dev/null @@ -1,121 +0,0 @@ -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/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png b/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png deleted file mode 100644 index bcb4cd987..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png.meta deleted file mode 100644 index 75a808fc7..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark.png.meta +++ /dev/null @@ -1,98 +0,0 @@ -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/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark_n.png b/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark_n.png deleted file mode 100644 index a0ba55487..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark_n.png and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark_n.png.meta b/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark_n.png.meta deleted file mode 100644 index 36079f241..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SampleResources/Textures/greatwhiteshark_n.png.meta +++ /dev/null @@ -1,98 +0,0 @@ -fileFormatVersion: 2 -guid: e4a9139c969c3419a813c9513127f817 -TextureImporter: - internalIDToNameTable: [] - externalObjects: {} - serializedVersion: 11 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 0 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - vTOnly: 0 - ignoreMasterTextureLimit: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 1 - aniso: 1 - mipBias: 0 - wrapU: 0 - wrapV: 0 - wrapW: 0 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 1 - textureShape: 1 - singleChannelComponent: 0 - flipbookRows: 1 - flipbookColumns: 1 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - ignorePngGamma: 0 - applyGammaDecoding: 0 - platformSettings: - - serializedVersion: 3 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - forceMaximumCompressionQuality_BC6H_BC7: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - internalID: 0 - vertices: [] - indices: - edges: [] - weights: [] - secondaryTextures: [] - nameFileIdTable: {} - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/Snake.unity b/Assets/Obi/Samples/RopeAndRod/Snake.unity deleted file mode 100644 index 8d43502b5..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/Snake.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/Snake.unity.meta b/Assets/Obi/Samples/RopeAndRod/Snake.unity.meta deleted file mode 100644 index b6344c063..000000000 --- a/Assets/Obi/Samples/RopeAndRod/Snake.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 20d1d83e4d4bd45e09d7f7c50d3b48bd -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SpringRod.unity b/Assets/Obi/Samples/RopeAndRod/SpringRod.unity deleted file mode 100644 index de9b6c643..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SpringRod.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SpringRod.unity.meta b/Assets/Obi/Samples/RopeAndRod/SpringRod.unity.meta deleted file mode 100644 index fa309c5d0..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SpringRod.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 62deeda7ebac34fb1aa15a197b4edb8e -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/SpringRodSettings.lighting b/Assets/Obi/Samples/RopeAndRod/SpringRodSettings.lighting deleted file mode 100644 index 858f3f3f0..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/SpringRodSettings.lighting and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/SpringRodSettings.lighting.meta b/Assets/Obi/Samples/RopeAndRod/SpringRodSettings.lighting.meta deleted file mode 100644 index f1b982a26..000000000 --- a/Assets/Obi/Samples/RopeAndRod/SpringRodSettings.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2a7dd55cd73e04316941dd907bb58462 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 4890085278179872738 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/TangledRopes.unity b/Assets/Obi/Samples/RopeAndRod/TangledRopes.unity deleted file mode 100644 index fa15bf491..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/TangledRopes.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/TangledRopes.unity.meta b/Assets/Obi/Samples/RopeAndRod/TangledRopes.unity.meta deleted file mode 100644 index 2fbd30a4c..000000000 --- a/Assets/Obi/Samples/RopeAndRod/TangledRopes.unity.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: d1c0a7d11dfd3425e80480fae4b6546c -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/VineSwinging.unity b/Assets/Obi/Samples/RopeAndRod/VineSwinging.unity deleted file mode 100644 index 7fa99155b..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/VineSwinging.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/VineSwinging.unity.meta b/Assets/Obi/Samples/RopeAndRod/VineSwinging.unity.meta deleted file mode 100644 index dc9365402..000000000 --- a/Assets/Obi/Samples/RopeAndRod/VineSwinging.unity.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 72bf5bcaef9ac46a8b1d07273f12237f -labels: -- ObiRope -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/WrapTheRope.unity b/Assets/Obi/Samples/RopeAndRod/WrapTheRope.unity deleted file mode 100644 index eb6f57d66..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/WrapTheRope.unity and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/WrapTheRope.unity.meta b/Assets/Obi/Samples/RopeAndRod/WrapTheRope.unity.meta deleted file mode 100644 index e62a89f3f..000000000 --- a/Assets/Obi/Samples/RopeAndRod/WrapTheRope.unity.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: fc2b8ae2ba09f45b7be65218f74cd121 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting b/Assets/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting deleted file mode 100644 index bde3e815f..000000000 Binary files a/Assets/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting and /dev/null differ diff --git a/Assets/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting.meta b/Assets/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting.meta deleted file mode 100644 index b753eec11..000000000 --- a/Assets/Obi/Samples/RopeAndRod/WrapTheRopeSettings.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e16f40cccc9f747d3a88842b4591f225 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 4890085278179872738 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts.meta b/Assets/Obi/Scripts.meta deleted file mode 100644 index 3253a175d..000000000 --- a/Assets/Obi/Scripts.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 7dc12f70242e74cd485e5ba96559b3ec -folderAsset: yes -timeCreated: 1435569421 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common.meta b/Assets/Obi/Scripts/Common.meta deleted file mode 100644 index 60bb6b90f..000000000 --- a/Assets/Obi/Scripts/Common.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e288a2209cca94fbfaf8c2fb1c51506b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Actors.meta b/Assets/Obi/Scripts/Common/Actors.meta deleted file mode 100644 index 8cccbdd58..000000000 --- a/Assets/Obi/Scripts/Common/Actors.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: df93aa6716fd8485b9e0d6e29b00d432 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Actors/IObiParticleCollection.cs b/Assets/Obi/Scripts/Common/Actors/IObiParticleCollection.cs deleted file mode 100644 index 691131ff6..000000000 --- a/Assets/Obi/Scripts/Common/Actors/IObiParticleCollection.cs +++ /dev/null @@ -1,25 +0,0 @@ -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/Assets/Obi/Scripts/Common/Actors/IObiParticleCollection.cs.meta b/Assets/Obi/Scripts/Common/Actors/IObiParticleCollection.cs.meta deleted file mode 100644 index ec362ee05..000000000 --- a/Assets/Obi/Scripts/Common/Actors/IObiParticleCollection.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0281a989d5aa445b0bcb43597806adf7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Actors/ObiActor.cs b/Assets/Obi/Scripts/Common/Actors/ObiActor.cs deleted file mode 100644 index 35f1a344a..000000000 --- a/Assets/Obi/Scripts/Common/Actors/ObiActor.cs +++ /dev/null @@ -1,1391 +0,0 @@ -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 after CPU->GPU data transfers, before collision detection starts. - /// - public event ActorStepCallback OnCollisionDetectionStart; - - /// - /// Called before performing substepping. - /// - public event ActorStepCallback OnSubstepsStart; - - /// - /// Called after simulation ends. - /// - public event ActorStepCallback OnSimulationEnd; - - /// - /// You can use this callback to issue GPU->CPU readbacks. - /// - public event ActorCallback OnRequestReadback; - - /// - /// Called at the end of each frame, after interpolation but before rendering. - /// - public event ActorStepCallback OnInterpolate; - - [HideInInspector] protected ObiNativeIntList m_ActiveParticleCount; - - /// - /// Index of each one of the actor's particles in the solver. - /// - [HideInInspector] public ObiNativeIntList solverIndices; - - /// - /// For each of the actor's constraint types, offset of every batch in the solver. - /// - [HideInInspector] public List[] solverBatchOffsets; - - public int deformableEdgesOffset { protected set; get; } /**< index of the first deformable edge in the solver that belongs to this rope.*/ - - protected ObiSolver m_Solver; - protected bool m_Loaded = false; - public int groupID = 0; - - private ObiActorBlueprint m_State; - private ObiActorBlueprint m_BlueprintInstance; - private ObiPinConstraintsData m_PinConstraints; - private ObiPinholeConstraintsData m_PinholeConstraints; - private BufferedForces bufferedForces = new BufferedForces(); - [SerializeField] [HideInInspector] protected ObiCollisionMaterial m_CollisionMaterial; - [SerializeField] [HideInInspector] protected bool m_SurfaceCollisions = false; - [SerializeField] [HideInInspector] [Min(ObiUtils.epsilon)] protected float m_MassScale = 1; - - /// - /// The solver in charge of simulating this actor. - /// - /// This is the first ObiSolver 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_Solver != null && 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; - } - } - } - } - - /// - /// Scale applied to this actor's particle masses. - /// - public float massScale - { - get - { - return m_MassScale; - } - set - { - if (Mathf.Abs(m_MassScale - value) > ObiUtils.epsilon) - SetMassScale(value); - } - } - - /// - /// Amount of particles allocated by this actor. - /// - public int particleCount - { - get - { - return sourceBlueprint != null ? sourceBlueprint.particleCount : 0; - } - } - - /// - /// Amount of particles in use by this actor. - /// - /// This will always be equal to or smaller than . - public int activeParticleCount - { - get - { - return m_ActiveParticleCount != null ? m_ActiveParticleCount[0]:0; - } - } - - /// - /// Buffer of size 1 that contains the amount of active particles in use by this actor. - /// Useful to modify the amount of active particles from a compute shader. - /// - /// This will always be equal to or smaller than . - public ObiNativeIntList activeParticleCountBuffer - { - get - { - return m_ActiveParticleCount; - } - } - - /// - /// 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() - { - m_ActiveParticleCount = new ObiNativeIntList(); - m_ActiveParticleCount.Add(0); - -#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() - { - m_ActiveParticleCount.Dispose(); - m_ActiveParticleCount = null; - - 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(); - m_PinholeConstraints = new ObiPinholeConstraintsData(); - - // when an actor is enabled, grabs the first solver up its hierarchy, - // initializes it (if not initialized) and gets added to it. - 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(); - } - } - - /// - /// Sets the mass of all particles in the actor to their blueprint values, multiplied by a scale factor. - /// - /// new mass scale. - protected void SetMassScale(float scale) - { - if (Application.isPlaying && isLoaded && particleCount > 0) - { - scale = Mathf.Max(ObiUtils.epsilon, scale); - - for (int i = 0; i < particleCount; ++i) - { - int solverIndex = solverIndices[i]; - - if (m_Solver.invMasses[solverIndex] > 0) - m_Solver.invMasses[solverIndex] = sharedBlueprint.invMasses[i] / scale; - - if (m_Solver.invRotationalMasses[solverIndex] > 0 && sharedBlueprint.invRotationalMasses != null && i < sharedBlueprint.invRotationalMasses.Length) - m_Solver.invRotationalMasses[solverIndex] = sharedBlueprint.invRotationalMasses[i] / scale; - } - - UpdateParticleProperties(); - } - } - - protected virtual void OnBlueprintRegenerate(ObiActorBlueprint blueprint) - { - // Reload 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) - { - - } - - public virtual int GetDeformableEdgeCount() - { - return 0; - } - - /// - /// 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[activeParticleCount]]; - radii.w = 1; - m_Solver.principalRadii[solverIndices[activeParticleCount]] = radii; - - m_ActiveParticleCount[0]++; - 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[0]--; - - // set inactive particle W to zero, this allows renderers to ignore it. - var radii = m_Solver.principalRadii[solverIndices[actorIndex]]; - radii.w = 0; - m_Solver.principalRadii[solverIndices[actorIndex]] = radii; - - SwapWithFirstInactiveParticle(actorIndex); - m_Solver.dirtyActiveParticles = true; - m_Solver.dirtySimplices |= simplexTypes; - - return true; - } - - /// - /// 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 self-collision flag. - /// - public virtual void SetDirectionalCollisions(bool dfCollisions) - { - if (m_Solver != null && Application.isPlaying && isLoaded) - { - for (int i = 0; i < particleCount; i++) - { - var norm = m_Solver.normals[solverIndices[i]]; - - if (dfCollisions) - norm.w = sharedBlueprint.restNormals[i].w; - else - norm.w = 0; - - m_Solver.normals[solverIndices[i]] = norm; - } - } - } - - /// - /// Updates particle phases in the solver at runtime, including or removing the one-sided flag. - /// - 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 (type == Oni.ConstraintType.Pinhole) - return m_PinholeConstraints; - - 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; - } - - UpdateParticleProperties(); - } - } - - /// - /// 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]; - } - - // for softbodies, xyz values store SDF normal in particle's local space: needs to be transformed using particle orientation during simulation. - // w value stores sparse SDF if < 0. - if (bp.restNormals != null && i < bp.restNormals.Length) - m_Solver.normals[k] = bp.restNormals[i]; - - if (bp.restPositions != null && i < bp.restPositions.Length) - m_Solver.restPositions[k] = bp.restPositions[i]; - - 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] / m_MassScale; - - if (bp.invRotationalMasses != null && i < bp.invRotationalMasses.Length) - m_Solver.invRotationalMasses[k] = bp.invRotationalMasses[i] / m_MassScale; - - 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[0] = 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] = 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 the current solver. Automatically called by . - /// - internal virtual void LoadBlueprint() - { - 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 . - /// - internal virtual void UnloadBlueprint() - { - // 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 CollisionDetectionStart(float simulatedTime, float substepTime) - { - OnCollisionDetectionStart?.Invoke(this, simulatedTime, substepTime); - } - - public virtual void SubstepsStart(float simulatedTime, float substepTime) - { - OnSubstepsStart?.Invoke(this, simulatedTime, substepTime); - } - - public virtual void SimulationEnd(float simulatedTime, float substepTime) - { - OnSimulationEnd?.Invoke(this, simulatedTime, substepTime); - } - - public virtual void RequestReadback() - { - OnRequestReadback?.Invoke(this); - } - - 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/Assets/Obi/Scripts/Common/Actors/ObiActor.cs.meta b/Assets/Obi/Scripts/Common/Actors/ObiActor.cs.meta deleted file mode 100644 index 2030a7c5a..000000000 --- a/Assets/Obi/Scripts/Common/Actors/ObiActor.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 4602f0908b7ed409dbe198de06df8955 -timeCreated: 1449041314 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends.meta b/Assets/Obi/Scripts/Common/Backends.meta deleted file mode 100644 index 22ad70e37..000000000 --- a/Assets/Obi/Scripts/Common/Backends.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8c24459c92f72479e883a382c415ea21 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst.meta b/Assets/Obi/Scripts/Common/Backends/Burst.meta deleted file mode 100644 index 018fd9d48..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0ccea30afd7eb40d988c19314f42b11c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/BurstBackend.cs b/Assets/Obi/Scripts/Common/Backends/Burst/BurstBackend.cs deleted file mode 100644 index 6a94fc9db..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/BurstBackend.cs +++ /dev/null @@ -1,26 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/BurstBackend.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/BurstBackend.cs.meta deleted file mode 100644 index 0fa2befc2..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/BurstBackend.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e3c1f86ca79494b9198874007d195a38 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/BurstIntegration.cs b/Assets/Obi/Scripts/Common/Backends/Burst/BurstIntegration.cs deleted file mode 100644 index baaa099ab..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/BurstIntegration.cs +++ /dev/null @@ -1,48 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/BurstIntegration.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/BurstIntegration.cs.meta deleted file mode 100644 index a4dbd1145..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/BurstIntegration.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ba69cdb85ae0f4523810cb349ded03d5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/BurstJobHandle.cs b/Assets/Obi/Scripts/Common/Backends/Burst/BurstJobHandle.cs deleted file mode 100644 index df3caa35c..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/BurstJobHandle.cs +++ /dev/null @@ -1,22 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/BurstJobHandle.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/BurstJobHandle.cs.meta deleted file mode 100644 index dc7d643a0..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/BurstJobHandle.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: dc827231eb963458fad0d395a186f910 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/BurstMath.cs b/Assets/Obi/Scripts/Common/Backends/Burst/BurstMath.cs deleted file mode 100644 index e683dce37..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/BurstMath.cs +++ /dev/null @@ -1,1085 +0,0 @@ -#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 void OneSidedNormal2(float4 xij, ref float4 nij) - { - float dot = math.dot(xij.xyz, nij.xyz); - if (dot < 0) - nij = xij - 2 * dot * nij; - else nij = xij; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float EllipsoidRadius(float4 normSolverDirection, quaternion orientation, float3 radii) - { - 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 float nfmod(float a, float 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) + epsilon); - - if (clampToSegment) - mu = math.saturate(mu); - - return a + ab * mu; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float3 NearestPointOnEdge(float3 a, float3 b, float3 p, out float mu, bool clampToSegment = true) - { - float3 ap = p - a; - float3 ab = b - a; - - mu = math.dot(ap, ab) / (math.dot(ab, ab) + epsilon); - - if (clampToSegment) - mu = math.saturate(mu); - - 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); - } - } - - //https://www.shadertoy.com/view/4djSRW - public static float3 Hash33(float3 p3) - { - p3 = math.frac(p3 * new float3(.1031f, .1030f, .0973f)); - p3 += math.dot(p3, p3.yxz + 33.33f); - return math.frac((p3.xxy + p3.yxx) * p3.zyx); - } - - public static float Hash13(float3 p3) - { - p3 = math.frac(p3 * .1031f); - p3 += math.dot(p3, p3.zyx + 31.32f); - return math.frac((p3.x + p3.y) * p3.z); - } - - public static float2 Hash21(float p) - { - float3 p3 = math.frac(new float3(p) * new float3(.1031f, .1030f, .0973f)); - p3 += math.dot(p3, p3.yzx + 33.33f); - return math.frac((p3.xx + p3.yz) * p3.zy); - } - - public static float3 Hash31(float p) - { - float3 p3 = math.frac(new float3(p) * new float3(.1031f, .1030f, .0973f)); - p3 += math.dot(p3, p3.yzx + 33.33f); - return math.frac((p3.xxy + p3.yzz) * p3.zyx); - } - - public static void RandomInCylinder(float seed, float4 pos, float4 dir, float length, float radius, out float4 position, out float3 velocity) - { - float3 rand = Hash31(seed); - - float3 b1 = dir.xyz; - float3 b2 = math.normalizesafe(math.cross(b1, new float3(1, 0, 0))); - float3 b3 = math.cross(b2, b1); - - float theta = rand.y * 2 * math.PI; - float2 disc = radius * math.sqrt(rand.x) * new float2(math.cos(theta), math.sin(theta)); - - velocity = b2 * disc.x + b3 * disc.y; - position = new float4(pos.xyz + b1 * length * rand.z + velocity, 0); - } - - public static void RandomInBox(float seed, float4 center, float4 size, out float4 position, out float3 velocity) - { - float3 rand = Hash31(seed); - velocity = (rand - new float3(0.5f, 0.5f, 0.5f)) * size.xyz; - position = new float4(center.xyz + velocity, 0); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/BurstMath.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/BurstMath.cs.meta deleted file mode 100644 index 5b662b682..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/BurstMath.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1cc365339e47244d7b217576a7d95ca8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions.meta deleted file mode 100644 index 7f66f5927..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 71085a94c3367475ab31b12e483c6479 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstBox.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstBox.cs deleted file mode 100644 index 44adb2feb..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstBox.cs +++ /dev/null @@ -1,155 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstBox.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstBox.cs.meta deleted file mode 100644 index 5a84d9cd3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstBox.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f09926d9bc8604475a3bce5e593165b4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstCapsule.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstCapsule.cs deleted file mode 100644 index c66e8df36..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstCapsule.cs +++ /dev/null @@ -1,136 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstCapsule.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstCapsule.cs.meta deleted file mode 100644 index e75f16760..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstCapsule.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 30a6f80040171467eb7e40b869d0aa44 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderShape.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderShape.cs deleted file mode 100644 index 88c580a4e..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderShape.cs +++ /dev/null @@ -1,41 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderShape.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderShape.cs.meta deleted file mode 100644 index 362c07aef..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderShape.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 707535693276c450e8ba4504defa09eb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderWorld.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderWorld.cs deleted file mode 100644 index 3f0823cc6..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderWorld.cs +++ /dev/null @@ -1,632 +0,0 @@ -#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 colors; - [NativeDisableParallelForRestriction] public NativeArray life; - [ReadOnly] public NativeArray positions; - [ReadOnly] public NativeArray invMasses; - - // simplex arrays: - [ReadOnly] public NativeArray simplices; - [ReadOnly] public SimplexCounts simplexCounts; - - // collider arrays: - [ReadOnly] public NativeArray transforms; - [ReadOnly] public NativeArray shapes; - [ReadOnly] public NativeArray forceZones; - - // contacts - [ReadOnly] public NativeArray contacts; - - // auxiliar data: - [ReadOnly] public BurstAffineTransform worldToSolver; - [ReadOnly] public float deltaTime; - - public void Execute(int i) - { - var contact = contacts[i]; - int forceZoneIndex = shapes[contact.bodyB].forceZoneIndex; - - if (forceZoneIndex >= 0) - { - int simplexStart = simplexCounts.GetSimplexStartAndSize(contact.bodyA, out int simplexSize); - for (int j = 0; j < simplexSize; ++j) - { - int particleIndex = simplices[simplexStart + j]; - - float distance = -math.dot(positions[particleIndex] - contact.pointB, contact.normal); - if (distance < 0) continue; - - float4 axis = (worldToSolver * transforms[contact.bodyB]).TransformDirection(new float4(0, 0, 1, 0)); - - // calculate falloff region based on min/max distances: - float falloff = 1; - float range = forceZones[forceZoneIndex].maxDistance - forceZones[forceZoneIndex].minDistance; - if (math.abs(range) > BurstMath.epsilon) - falloff = math.pow(math.saturate((distance - forceZones[forceZoneIndex].minDistance) / range), forceZones[forceZoneIndex].falloffPower); - - float forceIntensity = forceZones[forceZoneIndex].intensity * falloff; - float dampIntensity = forceZones[forceZoneIndex].damping * falloff; - - // tint particles: - float mix = math.pow(1 - math.saturate(forceZones[forceZoneIndex].color.a * falloff), deltaTime); - colors[particleIndex] = math.lerp((Vector4)forceZones[forceZoneIndex].color, colors[particleIndex], mix); - - // calculate force direction, depending on the type of the force field: - float4 result = float4.zero; - switch (forceZones[forceZoneIndex].type) - { - case ForceZone.ZoneType.Radial: - result = contact.normal * forceIntensity; - break; - case ForceZone.ZoneType.Vortex: - result = new float4(math.cross(axis.xyz * forceIntensity, contact.normal.xyz).xyz, 0); - break; - case ForceZone.ZoneType.Directional: - result = axis * forceIntensity; - break; - default: - BurstMath.AtomicAdd(life, particleIndex, -forceIntensity * deltaTime); - continue; - } - - // apply damping: - switch (forceZones[forceZoneIndex].dampingDir) - { - case ForceZone.DampingDirection.ForceDirection: - { - float4 forceDir = math.normalizesafe(result); - result -= forceDir * math.dot(velocities[particleIndex], forceDir) * dampIntensity; - } - break; - case ForceZone.DampingDirection.SurfaceDirection: - result -= contact.normal * math.dot(velocities[particleIndex], contact.normal) * dampIntensity; - break; - default: - result -= velocities[particleIndex] * dampIntensity; - break; - } - - if (invMasses[particleIndex] > 0) - { - switch (forceZones[forceZoneIndex].mode) - { - case ForceZone.ForceMode.Acceleration: - BurstMath.AtomicAdd(externalForces, particleIndex, result / simplexSize / invMasses[particleIndex]); - break; - case ForceZone.ForceMode.Force: - BurstMath.AtomicAdd(externalForces, particleIndex, result / simplexSize); - break; - case ForceZone.ForceMode.Wind: - BurstMath.AtomicAdd(wind, particleIndex, result / simplexSize); - break; - } - } - - } - } - } - } - - public JobHandle ApplyForceZones(BurstSolverImpl solver, float deltaTime, JobHandle inputDeps) - { - var world = ObiColliderWorld.GetInstance(); - - var applyForceFieldsJob = new ApplyForceZonesJob - { - contacts = solver.abstraction.colliderContacts.AsNativeArray(), - - positions = solver.positions, - velocities = solver.velocities, - externalForces = solver.externalForces, - wind = solver.wind, - invMasses = solver.invMasses, - life = solver.life, - colors = solver.colors, - - simplices = solver.simplices, - simplexCounts = solver.simplexCounts, - - transforms = world.colliderTransforms.AsNativeArray(), - shapes = world.colliderShapes.AsNativeArray(), - forceZones = world.forceZones.AsNativeArray(), - - worldToSolver = solver.worldToSolver, - deltaTime = deltaTime, - }; - - return applyForceFieldsJob.Schedule(solver.abstraction.colliderContacts.count, 64, inputDeps); - } - - public JobHandle GenerateContacts(BurstSolverImpl solver, float deltaTime, JobHandle inputDeps) - { - 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/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderWorld.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderWorld.cs.meta deleted file mode 100644 index 8c04e4b67..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstColliderWorld.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f1a161c4294214a4fbcb7e9e94800494 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDFNode.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDFNode.cs deleted file mode 100644 index f4d7a54a0..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDFNode.cs +++ /dev/null @@ -1,65 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDFNode.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDFNode.cs.meta deleted file mode 100644 index 3ab35ee48..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDFNode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b5a1060edd11d4d268313295cdfe778b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDistanceField.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDistanceField.cs deleted file mode 100644 index 1ebf5c041..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDistanceField.cs +++ /dev/null @@ -1,188 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDistanceField.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDistanceField.cs.meta deleted file mode 100644 index 3d2205825..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstDistanceField.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 965f98194011e4cd9b8c1400b59565d8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstEdgeMesh.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstEdgeMesh.cs deleted file mode 100644 index 754887774..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstEdgeMesh.cs +++ /dev/null @@ -1,211 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstEdgeMesh.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstEdgeMesh.cs.meta deleted file mode 100644 index bda2d5b6a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstEdgeMesh.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 91bd73e80795e494292d0b2fbf2e5e7f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstHeightField.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstHeightField.cs deleted file mode 100644 index 321510321..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstHeightField.cs +++ /dev/null @@ -1,273 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstHeightField.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstHeightField.cs.meta deleted file mode 100644 index a4815254a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstHeightField.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 780062b6393e3476e947fb10fc9b4f3d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstLocalOptimization.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstLocalOptimization.cs deleted file mode 100644 index 16da88c46..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstLocalOptimization.cs +++ /dev/null @@ -1,207 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstLocalOptimization.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstLocalOptimization.cs.meta deleted file mode 100644 index 364d3fc91..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstLocalOptimization.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e0353c4eae8ca4ec78f2db34845cd5cd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSimplex.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSimplex.cs deleted file mode 100644 index d042894d9..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSimplex.cs +++ /dev/null @@ -1,65 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSimplex.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSimplex.cs.meta deleted file mode 100644 index 31e49b57a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSimplex.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d84f433832a8c4a90ba92ac471d18e44 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSphere.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSphere.cs deleted file mode 100644 index cd5b297f1..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSphere.cs +++ /dev/null @@ -1,127 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSphere.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSphere.cs.meta deleted file mode 100644 index 5417774c5..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstSphere.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 38081dcc3e28a4a3dba1e8e5d042a262 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstTriangleMesh.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstTriangleMesh.cs deleted file mode 100644 index 6ef8be0bf..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstTriangleMesh.cs +++ /dev/null @@ -1,220 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstTriangleMesh.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstTriangleMesh.cs.meta deleted file mode 100644 index df2751d27..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Collisions/BurstTriangleMesh.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1a65b8b437c2548c0b04b7ddb58a3970 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints.meta deleted file mode 100644 index eadb4408b..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f2aff1726dad4479cb41e9f94e28473f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics.meta deleted file mode 100644 index fc5587ede..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b4c2af25bbe8a4c44941ea5486c18f71 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraints.cs deleted file mode 100644 index 9f54797cd..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraints.cs +++ /dev/null @@ -1,26 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraints.cs.meta deleted file mode 100644 index d1acf22e2..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 64e54848bb85248c8b0c31991ef094e0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraintsBatch.cs deleted file mode 100644 index 2c66cbdc9..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraintsBatch.cs +++ /dev/null @@ -1,112 +0,0 @@ -#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 stepTime, float substepTime, int steps, float timeLeft) - { - 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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraintsBatch.cs.meta deleted file mode 100644 index 727a13f49..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Aerodynamics/BurstAerodynamicConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e9db1828d66ec4f65aa37304663982af -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend.meta deleted file mode 100644 index 844ecb4de..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 93818b1e63d1143c580b09480a2c0a1c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraints.cs deleted file mode 100644 index 38ba785ca..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraints.cs +++ /dev/null @@ -1,26 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraints.cs.meta deleted file mode 100644 index 621fd0643..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6c5e3cbf9187d4d39a1bc1a2e2386b00 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraintsBatch.cs deleted file mode 100644 index 18997515c..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraintsBatch.cs +++ /dev/null @@ -1,168 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraintsBatch.cs.meta deleted file mode 100644 index 174589037..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Bend/BurstBendConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3ca9c1fed63774363964743eb64fb68b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist.meta deleted file mode 100644 index ef85fae76..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e62fc9e22b02847ba86a32d3d0f375da -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraints.cs deleted file mode 100644 index 6f913d959..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraints.cs +++ /dev/null @@ -1,26 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraints.cs.meta deleted file mode 100644 index e87fcafa2..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 59166e10c311e43e283064f9c03b525c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraintsBatch.cs deleted file mode 100644 index bea412444..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraintsBatch.cs +++ /dev/null @@ -1,181 +0,0 @@ -#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) > math.lengthsq(omega_plus.value)) - 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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraintsBatch.cs.meta deleted file mode 100644 index 3271c978d..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BendTwist/BurstBendTwistConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c6235d2e315a94287ab8a219496d7961 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsBatchImpl.cs deleted file mode 100644 index 35f19d56b..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsBatchImpl.cs +++ /dev/null @@ -1,110 +0,0 @@ -#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 stepTime, float substepTime, int steps, float timeLeft) - { - 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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsBatchImpl.cs.meta deleted file mode 100644 index 165c67449..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 09a081eed828341979cf470e2eca6ee0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsImpl.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsImpl.cs deleted file mode 100644 index 961b8de13..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsImpl.cs +++ /dev/null @@ -1,145 +0,0 @@ -#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 stepTime, float substepTime, int steps, float timeLeft); - 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 stepTime, float substepTime, int steps, float timeLeft) - { - // initialize all batches in parallel: - if (batches.Count > 0) - { - NativeArray deps = new NativeArray(batches.Count, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); - for (int i = 0; i < batches.Count; ++i) - deps[i] = batches[i].enabled ? batches[i].Initialize(inputDeps, stepTime, substepTime, steps, timeLeft) : 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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsImpl.cs.meta deleted file mode 100644 index 3c1af147a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/BurstConstraintsImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0c1b834b5430e4d3790a5979367cd915 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain.meta deleted file mode 100644 index b92adc0c8..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 60c7b29b5d2db47a68bfc9b00847af01 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraints.cs deleted file mode 100644 index 9a4b5c58d..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraints.cs +++ /dev/null @@ -1,26 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraints.cs.meta deleted file mode 100644 index 31b28ddea..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ea608f10fe5d24cb392ca8dcd960a920 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraintsBatch.cs deleted file mode 100644 index 2a177188d..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraintsBatch.cs +++ /dev/null @@ -1,222 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraintsBatch.cs.meta deleted file mode 100644 index fdbcc4aac..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Chain/BurstChainConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 832ac0a67ec764ee6a1e9a69fc1092e0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision.meta deleted file mode 100644 index a28d030e1..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0d7d6ac7f5b664d5cb7860b843e47fff -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/ApplyCollisionConstraintsJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/ApplyCollisionConstraintsJob.cs deleted file mode 100644 index ccaf624b4..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/ApplyCollisionConstraintsJob.cs +++ /dev/null @@ -1,49 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; -using System; -using System.Collections; - -namespace Obi -{ - - [BurstCompile] - 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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/ApplyCollisionConstraintsJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/ApplyCollisionConstraintsJob.cs.meta deleted file mode 100644 index 82d43c729..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/ApplyCollisionConstraintsJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f97613844b24a40899f10722bcfc4cf8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraints.cs deleted file mode 100644 index b139b9481..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraints.cs +++ /dev/null @@ -1,31 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraints.cs.meta deleted file mode 100644 index 2df9c312f..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e31847a0e619545c0bc70258b413a42e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraintsBatch.cs deleted file mode 100644 index 35538e876..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraintsBatch.cs +++ /dev/null @@ -1,344 +0,0 @@ -#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 stepTime, float substepTime, int steps, float timeLeft) - { - 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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraintsBatch.cs.meta deleted file mode 100644 index 7f8067c92..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderCollisionConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 273c5561da8534560bb9b9e8d32ae092 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraints.cs deleted file mode 100644 index 5d57a75e3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraints.cs +++ /dev/null @@ -1,33 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraints.cs.meta deleted file mode 100644 index 08ea00753..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 00f91403e75564dc6ace566943caa172 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraintsBatch.cs deleted file mode 100644 index bd39b1612..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraintsBatch.cs +++ /dev/null @@ -1,280 +0,0 @@ -#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 stepTime, float substepTime, int steps, float timeLeft) - { - 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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraintsBatch.cs.meta deleted file mode 100644 index fb3228fd6..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ColliderCollision/BurstColliderFrictionConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9abf9b1d2ee1a4d09b965103ae78fe53 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density.meta deleted file mode 100644 index 10b4e12b9..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1d2e0de656b27431f9501fe6ffacff67 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraints.cs deleted file mode 100644 index 5110160a2..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraints.cs +++ /dev/null @@ -1,553 +0,0 @@ -#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, - deltas = m_Solver.positionDeltas, - counts = m_Solver.positionConstraintCounts, - anisotropies = m_Solver.anisotropies, - normals = m_Solver.normals, - fluidData = m_Solver.fluidData, - matchingRotations = m_Solver.orientationDeltas, - linearFromAngular = m_Solver.restPositions, - }; - - inputDeps = app.Schedule(fluidParticles.Length, 64, inputDeps); - - // apply density positional deltas: - for (int i = 0; i < batches.Count; ++i) - { - if (batches[i].enabled) - { - inputDeps = batches[i].Apply(inputDeps, substepTime); - m_Solver.ScheduleBatchedJobsIfNeeded(); - } - } - - return inputDeps; - } - - public JobHandle CalculateVelocityCorrections(JobHandle inputDeps, float deltaTime) - { - for (int i = 0; i < batches.Count; ++i) - { - if (batches[i].enabled) - { - inputDeps = batches[i].CalculateNormals(inputDeps, deltaTime); - m_Solver.ScheduleBatchedJobsIfNeeded(); - } - } - - return inputDeps; - } - - public JobHandle ApplyVelocityCorrections(JobHandle inputDeps, float deltaTime) - { - 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, - matchingRotations = m_Solver.restPositions.Reinterpret(), - principalRadii = m_Solver.principalRadii, - fluidMaterials = m_Solver.fluidMaterials, - densityKernel = new Poly6Kernel(m_Solver.abstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D), - gradientKernel = new SpikyKernel(m_Solver.abstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D), - 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, - fluidMaterials2 = m_Solver.fluidMaterials2, - principalRadii = m_Solver.principalRadii, - normals = m_Solver.normals, - fluidData = m_Solver.fluidData, - velocities = m_Solver.velocities, - angularVelocities = m_Solver.angularVelocities, - vorticity = m_Solver.restOrientations.Reinterpret(), - vorticityAccelerations = m_Solver.orientationDeltas.Reinterpret(), - linearAccelerations = m_Solver.positionDeltas, - linearFromAngular = m_Solver.restPositions, - angularDiffusion = m_Solver.anisotropies, - positions = m_Solver.positions, - prevPositions = m_Solver.prevPositions, - dt = deltaTime, - solverParams = m_Solver.abstraction.parameters - }; - - return conf.Schedule(fluidParticles.Length, 64, inputDeps); - } - - private JobHandle 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, - life = m_Solver.life, - 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 matchingRotations; - - [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) * fluidMaterials[i].w; - - // 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.001f) / positions[i].w; - moments[i] -= M * BurstMath.multrnsp4(massCenters[i], prevMassCenters[i]); - - // extract neighborhood orientation delta: - matchingRotations[i] = BurstMath.ExtractRotation(moments[i], quaternion.identity, 5); - - // viscosity and vorticity: - float4 viscGoal = new float4(massCenters[i].xyz + math.rotate(matchingRotations[i], (prevPositions[i] - prevMassCenters[i]).xyz), 0); - deltas[i] += (viscGoal - positions[i]) * fluidMaterials[i].z; - - counts[i]++; - } - } - - [BurstCompile] - public struct ApplyPositionDeltasJob : IJobParallelFor - { - [ReadOnly] public NativeList fluidParticles; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray positions; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; - - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray normals; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray anisotropies; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray matchingRotations; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray linearFromAngular; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray fluidData; - - public void Execute(int p) - { - int i = fluidParticles[p]; - - if (counts[i] > 0) - { - positions[i] += new float4(deltas[i].xyz,0) / counts[i]; - deltas[i] = float4.zero; - counts[i] = 0; - } - - normals[i] = float4.zero; - anisotropies[i] = float4x4.zero; - linearFromAngular[i] = float4.zero; - matchingRotations[i] = new quaternion(0, 0, 0, 0); - - // zero out fluidData.z in preparation to accumulate relative velocity. - float4 data = fluidData[i]; - data.z = 0; - fluidData[i] = data; - } - } - - [BurstCompile] - public struct ApplyAtmosphereJob : IJobParallelFor - { - [ReadOnly] public NativeList fluidParticles; - [ReadOnly] public NativeArray wind; - [ReadOnly] public NativeArray fluidInterface; - [ReadOnly] public NativeArray fluidMaterials2; - [ReadOnly] public NativeArray principalRadii; - [ReadOnly] public NativeArray normals; - [ReadOnly] public NativeArray fluidData; - [ReadOnly] public NativeArray linearFromAngular; - - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray positions; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray prevPositions; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray linearAccelerations; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray vorticityAccelerations; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray vorticity; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray angularDiffusion; - - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray angularVelocities; - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray velocities; - - [ReadOnly] public float dt; - [ReadOnly] public Oni.SolverParameters solverParams; - - public void Execute(int p) - { - int i = fluidParticles[p]; - - float restVolume = math.pow(principalRadii[i].x * 2, 3 - (int)solverParams.mode); - - //atmospheric drag: - float4 velocityDiff = velocities[i] - wind[i]; - - // particles near the surface should experience drag: - velocities[i] -= fluidInterface[i].x * velocityDiff * math.max(0, 1 - fluidData[i][0] * restVolume) * dt; - - // ambient pressure: - velocities[i] += fluidInterface[i].y * normals[i] * dt; - - // angular accel due to baroclinity: - angularVelocities[i] += new float4(fluidMaterials2[i].z * math.cross(-normals[i].xyz, -velocityDiff.xyz), 0) * dt; - angularVelocities[i] -= fluidMaterials2[i].w * angularDiffusion[i].c0; - - // micropolar vorticity: - velocities[i] += fluidMaterials2[i].x * linearAccelerations[i] * dt; - vorticity[i] += fluidMaterials2[i].x * (vorticityAccelerations[i] * 0.5f - vorticity[i]) * dt; - vorticity[i] -= fluidMaterials2[i].y * angularDiffusion[i].c1; - - linearAccelerations[i] = float4.zero; - vorticityAccelerations[i] = float4.zero; - angularDiffusion[i] = float4x4.zero; - - // we want to add together linear and angular velocity fields and use result to advect particles without modifying either field: - positions[i] += new float4(linearFromAngular[i].xyz * dt,0); - prevPositions[i] += new float4(linearFromAngular[i].xyz * dt, 0); - } - } - - [BurstCompile] - public struct AverageSmoothPositionsJob : IJobParallelFor - { - [ReadOnly] public 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; - [ReadOnly] public NativeArray life; - - [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)); - - // inactive particles have radii.w == 0, set it right away for particles killed during this frame - // to keep them from being rendered during this frame instead of waiting to do it at the start of next sim step: - float4 radii = renderableRadii[i]; - radii.w = life[i] <= 0 ? 0 : radii.w; - renderableRadii[i] = radii; - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraints.cs.meta deleted file mode 100644 index 6099508ed..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: df96ac4db14c846ea99a6ebc5771098f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraintsBatch.cs deleted file mode 100644 index c37438008..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraintsBatch.cs +++ /dev/null @@ -1,477 +0,0 @@ -#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 stepTime, float substepTime, int steps, float timeLeft) - { - 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, - positions = solverImplementation.positions, - principalRadii = solverImplementation.principalRadii, - fluidMaterials = solverImplementation.fluidMaterials, - fluidMaterials2 = solverImplementation.fluidMaterials2, - fluidData = solverImplementation.fluidData, - fluidInterface = solverImplementation.fluidInterface, - velocities = solverImplementation.velocities, - angularVelocities = solverImplementation.angularVelocities, - - vorticityAccelerations = solverImplementation.orientationDeltas.Reinterpret(), - vorticity = solverImplementation.restOrientations.Reinterpret(), - linearAccelerations = solverImplementation.positionDeltas, - linearFromAngular = solverImplementation.restPositions, - angularDiffusion = solverImplementation.anisotropies, - - userData = solverImplementation.userData, - pairs = ((BurstSolverImpl)constraints.solver).fluidInteractions, - normals = solverImplementation.normals, - densityKernel = new Poly6Kernel(solverAbstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D), - gradKernel = new SpikyKernel(solverAbstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D), - solverParams = solverAbstraction.parameters, - batchData = batchData, - dt = deltaTime, - }; - - return vorticity.Schedule(batchData.workItemCount, batchCount, inputDeps); - } - - public JobHandle ViscosityAndVorticity(JobHandle inputDeps) - { - var eta = new ViscosityVorticityJob() - { - positions = solverImplementation.positions, - prevPositions = solverImplementation.prevPositions, - matchingRotations = solverImplementation.restPositions.Reinterpret(), - 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.001f) / positions[pair.particleB].w; - moments[pair.particleB] += wAvg * (BurstMath.multrnsp4(positions[pair.particleA], prevPositions[pair.particleA]) + float4x4.identity * math.pow(principalRadii[pair.particleA].x, 2) * 0.001f) / positions[pair.particleA].w; - } - } - } - - [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 matchingRotations; - [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]; - - float visc = math.min(fluidParams[pair.particleA].z, fluidParams[pair.particleB].z); - - // viscosity: - float4 goalA = new float4(massCenters[pair.particleB].xyz + math.rotate(matchingRotations[pair.particleB], (prevPositions[pair.particleA] - prevMassCenters[pair.particleB]).xyz), 0); - float4 goalB = new float4(massCenters[pair.particleA].xyz + math.rotate(matchingRotations[pair.particleA], (prevPositions[pair.particleB] - prevMassCenters[pair.particleA]).xyz), 0); - deltas[pair.particleA] += (goalA - positions[pair.particleA]) * visc; - deltas[pair.particleB] += (goalB - positions[pair.particleB]) * visc; - - counts[pair.particleA]++; - counts[pair.particleB]++; - } - } - } - - [BurstCompile] - public struct NormalsJob : IJobParallelFor - { - [ReadOnly] public NativeArray invMasses; - [ReadOnly] public NativeArray velocities; - [ReadOnly] public NativeArray angularVelocities; - [ReadOnly] public NativeArray positions; - [ReadOnly] public NativeArray vorticity; - - [ReadOnly] public NativeArray principalRadii; - [ReadOnly] public NativeArray fluidMaterials; - [ReadOnly] public NativeArray fluidMaterials2; - [ReadOnly] public NativeArray fluidInterface; - [ReadOnly] public NativeArray pairs; - - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray fluidData; - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray userData; - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray normals; - - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray linearAccelerations; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray vorticityAccelerations; - - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray linearFromAngular; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray angularDiffusion; - - [ReadOnly] public Poly6Kernel densityKernel; - [ReadOnly] public SpikyKernel gradKernel; - [ReadOnly] public BatchData batchData; - [ReadOnly] public Oni.SolverParameters solverParams; - [ReadOnly] public float dt; - - public void Execute(int workItemIndex) - { - 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 invDensityA = invMasses[pair.particleA] / fluidData[pair.particleA].x; - float invDensityB = invMasses[pair.particleB] / fluidData[pair.particleB].x; - - float3 relVel = velocities[pair.particleA].xyz - velocities[pair.particleB].xyz; - float3 relAng = angularVelocities[pair.particleA].xyz - angularVelocities[pair.particleB].xyz; - float3 relVort = vorticity[pair.particleA].xyz - vorticity[pair.particleB].xyz; - float4 d = new float4((positions[pair.particleA] - positions[pair.particleB]).xyz,0); - float dist = math.length(d); - - float avgGrad = (gradKernel.W(dist, fluidMaterials[pair.particleA].x) + - gradKernel.W(dist, fluidMaterials[pair.particleB].x)) * 0.5f; - float avgKern = (densityKernel.W(dist, fluidMaterials[pair.particleA].x) + - densityKernel.W(dist, fluidMaterials[pair.particleB].x)) * 0.5f; - float avgNorm = (densityKernel.W(0, fluidMaterials[pair.particleA].x) + - densityKernel.W(0, fluidMaterials[pair.particleB].x)) * 0.5f; - - // property diffusion: - float diffusionSpeed = (fluidInterface[pair.particleA].w + fluidInterface[pair.particleB].w) * avgKern * dt; - float4 userDelta = (userData[pair.particleB] - userData[pair.particleA]) * solverParams.diffusionMask * diffusionSpeed; - userData[pair.particleA] += restVolumeB / restVolumeA * userDelta; - userData[pair.particleB] -= restVolumeA / restVolumeB * userDelta; - - // calculate color field normal: - float4 normGrad = d / (dist + BurstMath.epsilon); - float4 vgrad = normGrad * avgGrad; - float radius = (fluidMaterials[pair.particleA].x + fluidMaterials[pair.particleB].x) * 0.5f; - normals[pair.particleA] += vgrad * radius * restVolumeB; - normals[pair.particleB] -= vgrad * radius * restVolumeA; - - // measure relative velocity for foam generation: - float4 dataA = fluidData[pair.particleA]; - float4 dataB = fluidData[pair.particleB]; - float relVelMag = math.length(relVel) + BurstMath.epsilon; - float avgVelDiffKernel = 1 - math.min(1, dist / (radius + BurstMath.epsilon)); - float rv = relVelMag * (1 - math.dot(relVel / relVelMag, normGrad.xyz)) * avgVelDiffKernel; - dataA.z += rv; - dataB.z += rv; - fluidData[pair.particleA] = dataA; - fluidData[pair.particleB] = dataB; - - // micropolar: curl of linear/angular velocity: - float3 velCross = math.cross(relVel, vgrad.xyz); - float3 vortCross = math.cross(relVort, vgrad.xyz); - linearAccelerations[pair.particleA] += new float4(vortCross / invMasses[pair.particleB] * invDensityA, 0); - linearAccelerations[pair.particleB] += new float4(vortCross / invMasses[pair.particleA] * invDensityB, 0); - vorticityAccelerations[pair.particleA] += new float4(velCross / invMasses[pair.particleB] * invDensityA, 0); - vorticityAccelerations[pair.particleB] += new float4(velCross / invMasses[pair.particleA] * invDensityB, 0); - - // angular diffusion: - float4x4 diffA = angularDiffusion[pair.particleA]; - float4x4 diffB = angularDiffusion[pair.particleB]; - diffA.c0 += new float4(relAng * avgKern / invMasses[pair.particleB] * invDensityA, 0); - diffB.c0 -= new float4(relAng * avgKern / invMasses[pair.particleA] * invDensityB, 0); - diffA.c1 += new float4(relVort * avgKern / invMasses[pair.particleB] * invDensityA, 0); - diffB.c1 -= new float4(relVort * avgKern / invMasses[pair.particleA] * invDensityB, 0); - angularDiffusion[pair.particleA] = diffA; - angularDiffusion[pair.particleB] = diffB; - - // linear velocity due to baroclinity: - linearFromAngular[pair.particleA] += new float4(math.cross(angularVelocities[pair.particleB].xyz, d.xyz) * avgKern / avgNorm, 0); - linearFromAngular[pair.particleB] -= new float4(math.cross(angularVelocities[pair.particleA].xyz, d.xyz) * avgKern / avgNorm, 0); - } - } - } - - [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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraintsBatch.cs.meta deleted file mode 100644 index f1d82202a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/BurstDensityConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8292e6ef6129f47abaee4fb2cb49055e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels.meta deleted file mode 100644 index 4f0f6fa9d..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5a128a7c745c84794a944362f49011fc -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/CohesionKernel.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/CohesionKernel.cs deleted file mode 100644 index ed30bdf36..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/CohesionKernel.cs +++ /dev/null @@ -1,15 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using System; -using Unity.Mathematics; - -namespace Obi -{ - public struct CohesionKernel - { - public float W(float r, float h) - { - return math.cos(math.min(r, h) * 3 * math.PI / (2 * h)); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/CohesionKernel.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/CohesionKernel.cs.meta deleted file mode 100644 index 9278ccede..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/CohesionKernel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d2bcf975ae59e4fcf9412ec328a3e2b9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/Poly6Kernel.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/Poly6Kernel.cs deleted file mode 100644 index 412f3b189..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/Poly6Kernel.cs +++ /dev/null @@ -1,36 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/Poly6Kernel.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/Poly6Kernel.cs.meta deleted file mode 100644 index ccf533149..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/Poly6Kernel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7a3990134524143ac852b488554f6d4e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/SpikyKernel.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/SpikyKernel.cs deleted file mode 100644 index 113fbc6b4..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/SpikyKernel.cs +++ /dev/null @@ -1,35 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/SpikyKernel.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/SpikyKernel.cs.meta deleted file mode 100644 index d80dd5a91..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Density/Kernels/SpikyKernel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a407989bfa0664e9ab75773d1808f549 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance.meta deleted file mode 100644 index 4f562f2dc..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 725436c3a327442cd8b06889111f9b8f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraints.cs deleted file mode 100644 index 66ed256ba..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraints.cs +++ /dev/null @@ -1,26 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraints.cs.meta deleted file mode 100644 index 578334695..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: af06abf9c29a04274842dbcb65a2a753 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraintsBatch.cs deleted file mode 100644 index 4d83f2e44..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraintsBatch.cs +++ /dev/null @@ -1,146 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraintsBatch.cs.meta deleted file mode 100644 index 5c4e478c6..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Distance/BurstDistanceConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 31ee5bf24da6847f0b93a69dbbdecf25 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision.meta deleted file mode 100644 index 18a7fb3c1..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 66103ca5acc86407cab9aa94d1e6d1fd -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/ApplyBatchedCollisionConstraintsBatchJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/ApplyBatchedCollisionConstraintsBatchJob.cs deleted file mode 100644 index 170e0840b..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/ApplyBatchedCollisionConstraintsBatchJob.cs +++ /dev/null @@ -1,62 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; -using System; -using System.Collections; - -namespace Obi -{ - - [BurstCompile] - 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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/ApplyBatchedCollisionConstraintsBatchJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/ApplyBatchedCollisionConstraintsBatchJob.cs.meta deleted file mode 100644 index 5b2e6ce64..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/ApplyBatchedCollisionConstraintsBatchJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 96623cff9b30e4504a4a6dbfe3d19ace -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraints.cs deleted file mode 100644 index 5401abd7b..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraints.cs +++ /dev/null @@ -1,32 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraints.cs.meta deleted file mode 100644 index 41c44704e..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8ef36a05943714c1db8f9ee0b28e9c51 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraintsBatch.cs deleted file mode 100644 index e7b438b30..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraintsBatch.cs +++ /dev/null @@ -1,364 +0,0 @@ -#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 stepTime, float substepTime, int steps, float timeLeft) - { - 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, - fluidInterface = solverImplementation.fluidInterface, - collisionMaterials = ObiColliderWorld.GetInstance().collisionMaterials.AsNativeArray(), - - simplices = solverImplementation.simplices, - simplexCounts = solverImplementation.simplexCounts, - - deltas = solverImplementation.positionDeltas, - counts = solverImplementation.positionConstraintCounts, - userData = solverImplementation.userData, - 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]; - } - - simplexPrevPositionA.w = 0; - simplexPrevPositionB.w = 0; - - // update contact distance - float4 contactPointA = simplexPrevPositionA - contact.normal * simplexRadiusA; - float4 contactPointB = simplexPrevPositionB + contact.normal * simplexRadiusB; - - contact.distance = math.dot(contactPointA - contactPointB, contact.normal); - - // update contact basis: - contact.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 fluidInterface; - [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 userData; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray contacts; - [ReadOnly] public NativeArray effectiveMasses; - - [ReadOnly] public Oni.ConstraintParameters constraintParameters; - [ReadOnly] public Oni.SolverParameters solverParameters; - [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; - float4 simplexUserDataA = float4.zero, simplexUserDataB = float4.zero; - float miscibility = 0; - - for (int j = 0; j < simplexSizeA; ++j) - { - int particleIndex = simplices[simplexStartA + j]; - simplexPositionA += positions[particleIndex] * contact.pointA[j]; - simplexRadiusA += BurstMath.EllipsoidRadius(contact.normal, orientations[particleIndex], radii[particleIndex].xyz) * contact.pointA[j]; - simplexUserDataA += userData[particleIndex] * contact.pointA[j]; - miscibility += fluidInterface[particleIndex].w * contact.pointA[j]; - } - for (int j = 0; j < simplexSizeB; ++j) - { - int particleIndex = simplices[simplexStartB + j]; - simplexPositionB += positions[particleIndex] * contact.pointB[j]; - simplexRadiusB += BurstMath.EllipsoidRadius(contact.normal, orientations[particleIndex], radii[particleIndex].xyz) * contact.pointA[j]; - simplexUserDataB += userData[particleIndex] * contact.pointB[j]; - miscibility += fluidInterface[particleIndex].w * contact.pointB[j]; - } - - simplexPositionA.w = 0; - simplexPositionB.w = 0; - - float4 posA = simplexPositionA - contact.normal * simplexRadiusA; - float4 posB = simplexPositionB + contact.normal * simplexRadiusB; - - // adhesion: - float lambda = contact.SolveAdhesion(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]++; - } - } - - // property diffusion: - if (contact.distance < solverParameters.collisionMargin) - { - float diffusionSpeed = miscibility * 0.5f * substepTime; - float4 userDelta = (simplexUserDataB - simplexUserDataA) * solverParameters.diffusionMask * diffusionSpeed; - - for (int j = 0; j < simplexSizeA; ++j) - userData[simplices[simplexStartA + j]] += userDelta * contact.pointA[j]; - - for (int j = 0; j < simplexSizeB; ++j) - userData[simplices[simplexStartB + j]] -= userDelta * contact.pointB[j]; - } - - // Apply position deltas immediately, if using sequential evaluation: - if (constraintParameters.evaluationOrder == Oni.ConstraintParameters.EvaluationOrder.Sequential) - { - for (int j = 0; j < simplexSizeA; ++j) - ApplyPositionDelta(simplices[simplexStartA + j], constraintParameters.SORFactor, ref positions, ref deltas, ref counts); - - for (int j = 0; j < simplexSizeB; ++j) - ApplyPositionDelta(simplices[simplexStartB + j], 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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraintsBatch.cs.meta deleted file mode 100644 index 18a62f383..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleCollisionConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 61f5c3e93290646948b251d617f01c8d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraints.cs deleted file mode 100644 index 0eda6086a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraints.cs +++ /dev/null @@ -1,31 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraints.cs.meta deleted file mode 100644 index b28ae4e1c..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 63dade0c384ee4c1398ddf4d60038764 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraintsBatch.cs deleted file mode 100644 index f69bc41a3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraintsBatch.cs +++ /dev/null @@ -1,289 +0,0 @@ -#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 stepTime, float substepTime, int steps, float timeLeft) - { - 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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraintsBatch.cs.meta deleted file mode 100644 index 17dfb971e..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ParticleCollision/BurstParticleFrictionConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9a942dd261ea741b69997eba73462034 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin.meta deleted file mode 100644 index d0bbb0cf6..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: dcbc7b9bf37704bd3945f0fb82506bfb -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraints.cs deleted file mode 100644 index d552207ec..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraints.cs +++ /dev/null @@ -1,41 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using System; -using Unity.Jobs; - -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(); - } - - public JobHandle ProjectRenderablePositions(JobHandle inputDeps) - { - for (int i = 0; i < batches.Count; ++i) - { - if (batches[i].enabled) - { - inputDeps = batches[i].ProjectRenderablePositions(inputDeps); - m_Solver.ScheduleBatchedJobsIfNeeded(); - } - } - - return inputDeps; - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraints.cs.meta deleted file mode 100644 index 8a357a986..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 73ae545b061fa4db988fd3b64410fc6d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraintsBatch.cs deleted file mode 100644 index 18a58a6b7..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraintsBatch.cs +++ /dev/null @@ -1,409 +0,0 @@ -#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 stepTime, float substepTime, int steps, float timeLeft) - { - var clearPins = new ClearPinsJob - { - colliderIndices = colliderIndices, - shapes = ObiColliderWorld.GetInstance().colliderShapes.AsNativeArray(), - rigidbodies = ObiColliderWorld.GetInstance().rigidbodies.AsNativeArray(), - }; - inputDeps = clearPins.Schedule(m_ConstraintCount, 128, inputDeps); - - var updatePins = new UpdatePinsJob - { - colliderIndices = colliderIndices, - shapes = ObiColliderWorld.GetInstance().colliderShapes.AsNativeArray(), - rigidbodies = ObiColliderWorld.GetInstance().rigidbodies.AsNativeArray(), - }; - inputDeps = updatePins.Schedule(m_ConstraintCount, 128, inputDeps); - - // clear lambdas: - return base.Initialize(inputDeps, stepTime, substepTime, steps, timeLeft); - } - - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) - { - var projectConstraints = new PinConstraintsBatchJob() - { - 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); - } - - public JobHandle ProjectRenderablePositions(JobHandle inputDeps) - { - var project = new ProjectRenderablePositionsJob() - { - particleIndices = particleIndices, - colliderIndices = colliderIndices, - offsets = offsets, - stiffnesses = stiffnesses, - restDarboux = restDarbouxVectors, - - transforms = ObiColliderWorld.GetInstance().colliderTransforms.AsNativeArray(), - - renderablePositions = solverImplementation.renderablePositions, - renderableOrientations = solverImplementation.renderableOrientations, - - inertialFrame = ((BurstSolverImpl)constraints.solver).inertialFrame, - }; - - return project.Schedule(m_ConstraintCount, 16, inputDeps); - } - - [BurstCompile] - public unsafe struct ClearPinsJob : IJobParallelFor - { - [ReadOnly] public NativeArray colliderIndices; - [ReadOnly] public NativeArray shapes; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray rigidbodies; - - public void Execute(int i) - { - int colliderIndex = colliderIndices[i]; - - // no collider to pin to, so ignore the constraint. - if (colliderIndex < 0) - return; - - int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; - if (rigidbodyIndex >= 0) - { - BurstRigidbody* arr = (BurstRigidbody*)rigidbodies.GetUnsafePtr(); - Interlocked.Exchange(ref arr[rigidbodyIndex].constraintCount, 0); - } - } - } - - [BurstCompile] - public unsafe struct UpdatePinsJob : IJobParallelFor - { - [ReadOnly] public NativeArray colliderIndices; - [ReadOnly] public NativeArray shapes; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray rigidbodies; - - public void Execute(int i) - { - int colliderIndex = colliderIndices[i]; - - // no collider to pin to, so ignore the constraint. - if (colliderIndex < 0) - return; - - // Increment the amount of constraints affecting this rigidbody for mass splitting: - int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; - if (rigidbodyIndex >= 0) - { - BurstRigidbody* arr = (BurstRigidbody*)rigidbodies.GetUnsafePtr(); - Interlocked.Increment(ref arr[rigidbodyIndex].constraintCount); - } - } - } - - [BurstCompile] - public unsafe struct PinConstraintsBatchJob : IJobParallelFor - { - [ReadOnly] public NativeArray particleIndices; - [ReadOnly] public NativeArray colliderIndices; - - [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 offset point position using rb velocity at that point (can't integrate transform since position != center of mass) - float4 velocityAtPoint = BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, inertialFrame.frame.InverseTransformPoint(worldPinOffset), rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame); - predictedPinOffset = BurstIntegration.IntegrateLinear(predictedPinOffset, inertialFrame.frame.TransformVector(velocityAtPoint), frameEnd); - - // predict rotation at the end of the step: - predictedRotation = BurstIntegration.IntegrateAngular(predictedRotation, rigidbody.angularVelocity + rigidbodyAngularDeltas[rigidbodyIndex], stepTime); - - // 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) > math.lengthsq(omega_plus.value)) - omega = omega_plus; - - float3 dlambda = (omega.value.xyz - compliances.y * lambda.xyz) / (compliances.y + invRotationalMasses[particleIndex] + rigidbodyAngularW + BurstMath.epsilon); - lambda.xyz += dlambda; - - //discrete Darboux vector does not have vanishing scalar part - quaternion dlambdaQ = new quaternion(dlambda[0], dlambda[1], dlambda[2], 0); - - quaternion orientDelta = orientationDeltas[particleIndex]; - orientDelta.value += math.mul(predictedRotation, dlambdaQ).value * invRotationalMasses[particleIndex] / substepsToEnd; - orientationDeltas[particleIndex] = orientDelta; - orientationCounts[particleIndex]++; - - if (rigidbodyIndex >= 0) - { - BurstMath.ApplyDeltaQuaternion(rigidbodyIndex, - predictedRotation, - -math.mul(orientations[particleIndex], dlambdaQ).value * rigidbodyAngularW, - rigidbodyAngularDeltas, inertialFrame.frame, frameEnd); - } - } - - lambdas[i] = lambda; - } - } - - [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; - } - } - } - } - - [BurstCompile] - public struct ProjectRenderablePositionsJob : IJobParallelFor - { - [ReadOnly] public NativeArray particleIndices; - [ReadOnly] public NativeArray colliderIndices; - - [ReadOnly] public NativeArray offsets; - [ReadOnly] public NativeArray stiffnesses; - [ReadOnly] public NativeArray restDarboux; - - [ReadOnly] public NativeArray transforms; - - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray renderablePositions; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray renderableOrientations; - - [ReadOnly] public BurstInertialFrame inertialFrame; - - public void Execute(int i) - { - int particleIndex = particleIndices[i]; - int colliderIndex = colliderIndices[i]; - - // no collider to pin to or projection deactivated, so ignore the constraint. - if (colliderIndex < 0 || offsets[i].w < 0.5f) - return; - - BurstAffineTransform attachmentMatrix = inertialFrame.frame.Inverse() * transforms[colliderIndex]; - - renderablePositions[particleIndex] = attachmentMatrix.TransformPoint(offsets[i]); - if (stiffnesses[i].y < 10000) - renderableOrientations[particleIndex] = math.mul(attachmentMatrix.rotation, restDarboux[i]); - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraintsBatch.cs.meta deleted file mode 100644 index 36ea9d25f..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pin/BurstPinConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a383dd79fc24448059bb45283b12a52b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole.meta deleted file mode 100644 index 75112eaea..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 744a58a1ca5364e0a86c93e04770c0b8 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraints.cs deleted file mode 100644 index 7c962bbc0..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraints.cs +++ /dev/null @@ -1,26 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using System; - -namespace Obi -{ - public class BurstPinholeConstraints : BurstConstraintsImpl - { - public BurstPinholeConstraints(BurstSolverImpl solver) : base(solver, Oni.ConstraintType.Pinhole) - { - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new BurstPinholeConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as BurstPinholeConstraintsBatch); - batch.Destroy(); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraints.cs.meta deleted file mode 100644 index 17b0fea75..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 71db1a3a2698147deb04f0264e4a728f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraintsBatch.cs deleted file mode 100644 index 7f0a2b9c9..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraintsBatch.cs +++ /dev/null @@ -1,490 +0,0 @@ - #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using Unity.Jobs; -using Unity.Collections; -using Unity.Collections.LowLevel.Unsafe; -using Unity.Mathematics; -using Unity.Burst; -using System.Collections.Generic; -using System.Threading; - -namespace Obi -{ - public class BurstPinholeConstraintsBatch : BurstConstraintsBatchImpl, IPinholeConstraintsBatchImpl - { - private NativeArray colliderIndices; - private NativeArray offsets; - private NativeArray edgeMus; - private NativeArray edgeRanges; - private NativeArray edgeRangeMus; - private NativeArray parameters; - private NativeArray relativeVelocities; - - public BurstPinholeConstraintsBatch(BurstPinholeConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.Pinhole; - } - - public void SetPinholeConstraints(ObiNativeIntList particleIndices, ObiNativeIntList colliderIndices, ObiNativeVector4List offsets, ObiNativeFloatList edgeMus, ObiNativeIntList edgeRanges, ObiNativeFloatList edgeRangeMus, ObiNativeFloatList parameters, ObiNativeFloatList relativeVelocities, ObiNativeFloatList lambdas, int count) - { - this.particleIndices = particleIndices.AsNativeArray(); - this.colliderIndices = colliderIndices.AsNativeArray(); - this.offsets = offsets.AsNativeArray(); - this.edgeMus = edgeMus.AsNativeArray(); - this.edgeRanges = edgeRanges.AsNativeArray(); - this.edgeRangeMus = edgeRangeMus.AsNativeArray(); - this.parameters = parameters.AsNativeArray(); - this.relativeVelocities = relativeVelocities.AsNativeArray(); - this.lambdas = lambdas.AsNativeArray(); - m_ConstraintCount = count; - } - - public override JobHandle Initialize(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) - { - var clearPins = new ClearPinsJob - { - colliderIndices = colliderIndices, - shapes = ObiColliderWorld.GetInstance().colliderShapes.AsNativeArray(), - rigidbodies = ObiColliderWorld.GetInstance().rigidbodies.AsNativeArray(), - }; - inputDeps = clearPins.Schedule(m_ConstraintCount, 128, inputDeps); - - var updatePins = new UpdatePinsJob - { - particleIndices = particleIndices, - colliderIndices = colliderIndices, - offsets = offsets, - edgeMus = edgeMus, - edgeRangeMus = edgeRangeMus, - relativeVelocities = relativeVelocities, - parameters = parameters, - edgeRanges = edgeRanges, - - positions = solverImplementation.positions, - prevPositions = solverImplementation.prevPositions, - invMasses = solverImplementation.invMasses, - - deformableEdges = solverImplementation.abstraction.deformableEdges.AsNativeArray(), - - shapes = ObiColliderWorld.GetInstance().colliderShapes.AsNativeArray(), - transforms = ObiColliderWorld.GetInstance().colliderTransforms.AsNativeArray(), - rigidbodies = ObiColliderWorld.GetInstance().rigidbodies.AsNativeArray(), - rigidbodyLinearDeltas = solverImplementation.abstraction.rigidbodyLinearDeltas.AsNativeArray(), - rigidbodyAngularDeltas = solverImplementation.abstraction.rigidbodyAngularDeltas.AsNativeArray(), - - inertialFrame = ((BurstSolverImpl)constraints.solver).inertialFrame, - stepTime = stepTime, - steps = steps, - substepTime = substepTime, - timeLeft = timeLeft, - activeConstraintCount = m_ConstraintCount - }; - inputDeps = updatePins.Schedule(m_ConstraintCount, 128, inputDeps); - - // clear lambdas: - return base.Initialize(inputDeps, stepTime, substepTime, steps, timeLeft); - } - - public override JobHandle Evaluate(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) - { - var projectConstraints = new PinholeConstraintsBatchJob() - { - particleIndices = particleIndices, - colliderIndices = colliderIndices, - offsets = offsets, - edgeMus = edgeMus, - parameters = parameters, - lambdas = lambdas, - - positions = solverImplementation.positions, - prevPositions = solverImplementation.prevPositions, - invMasses = solverImplementation.invMasses, - - deformableEdges = solverImplementation.abstraction.deformableEdges.AsNativeArray(), - - shapes = ObiColliderWorld.GetInstance().colliderShapes.AsNativeArray(), - transforms = ObiColliderWorld.GetInstance().colliderTransforms.AsNativeArray(), - rigidbodies = ObiColliderWorld.GetInstance().rigidbodies.AsNativeArray(), - rigidbodyLinearDeltas = solverImplementation.abstraction.rigidbodyLinearDeltas.AsNativeArray(), - rigidbodyAngularDeltas = solverImplementation.abstraction.rigidbodyAngularDeltas.AsNativeArray(), - - deltas = solverImplementation.positionDeltas, - counts = solverImplementation.positionConstraintCounts, - - inertialFrame = ((BurstSolverImpl)constraints.solver).inertialFrame, - stepTime = stepTime, - steps = steps, - substepTime = substepTime, - timeLeft = timeLeft, - activeConstraintCount = m_ConstraintCount - }; - - return projectConstraints.Schedule(m_ConstraintCount, 16, inputDeps); - } - - public override JobHandle Apply(JobHandle inputDeps, float substepTime) - { - var cparameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); - - var applyConstraints = new ApplyPinholeConstraintsBatchJob() - { - particleIndices = particleIndices, - deformableEdges = solverImplementation.abstraction.deformableEdges.AsNativeArray(), - - positions = solverImplementation.positions, - deltas = solverImplementation.positionDeltas, - counts = solverImplementation.positionConstraintCounts, - - sorFactor = cparameters.SORFactor, - activeConstraintCount = m_ConstraintCount, - }; - - return applyConstraints.Schedule(inputDeps); - } - - [BurstCompile] - public unsafe struct ClearPinsJob : IJobParallelFor - { - [ReadOnly] public NativeArray colliderIndices; - [ReadOnly] public NativeArray shapes; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray rigidbodies; - - public void Execute(int i) - { - int colliderIndex = colliderIndices[i]; - - // no collider to pin to, so ignore the constraint. - if (colliderIndex < 0) - return; - - int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; - if (rigidbodyIndex >= 0) - { - BurstRigidbody* arr = (BurstRigidbody*)rigidbodies.GetUnsafePtr(); - Interlocked.Exchange(ref arr[rigidbodyIndex].constraintCount, 0); - } - } - } - - [BurstCompile] - public unsafe struct UpdatePinsJob : IJobParallelFor - { - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray particleIndices; - - [ReadOnly] public NativeArray edgeRanges; - [ReadOnly] public NativeArray edgeRangeMus; - [ReadOnly] public NativeArray offsets; - [ReadOnly] public NativeArray parameters; // compliance, friction, motor speed, motor force, clamp behavior. - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray edgeMus; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray relativeVelocities; - - [ReadOnly] public NativeArray positions; - [ReadOnly] public NativeArray prevPositions; - [ReadOnly] public NativeArray invMasses; - - [ReadOnly] public NativeArray deformableEdges; - - [ReadOnly] public NativeArray colliderIndices; - [ReadOnly] public NativeArray shapes; - [ReadOnly] public NativeArray transforms; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray rigidbodies; - - [ReadOnly] public NativeArray rigidbodyLinearDeltas; - [ReadOnly] public NativeArray rigidbodyAngularDeltas; - - [ReadOnly] public BurstInertialFrame inertialFrame; - [ReadOnly] public float stepTime; - [ReadOnly] public float substepTime; - [ReadOnly] public float timeLeft; - [ReadOnly] public int steps; - [ReadOnly] public int activeConstraintCount; - - private bool IsEdgeValid(int edgeIndex, int nextEdgeIndex, float mix) - { - return mix < 0 ? deformableEdges[nextEdgeIndex * 2 + 1] == deformableEdges[edgeIndex * 2] : - deformableEdges[nextEdgeIndex * 2] == deformableEdges[edgeIndex * 2 + 1]; - } - - private bool ClampToRange(int i, int edgeIndex, ref float mix) - { - bool clamped = false; - if (edgeIndex == edgeRanges[i].x && mix < edgeRangeMus[i].x) - { - mix = edgeRangeMus[i].x; - clamped = true; - } - if (edgeIndex == edgeRanges[i].y && mix > edgeRangeMus[i].y) - { - mix = edgeRangeMus[i].y; - clamped = true; - } - return clamped; - } - - public void Execute(int i) - { - int edgeIndex = particleIndices[i]; - int colliderIndex = colliderIndices[i]; - - // if no collider or edge, ignore the constraint. - if (colliderIndex < 0 || edgeIndex < 0) - return; - - // Increment the amount of constraints affecting this rigidbody for mass splitting: - int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; - if (rigidbodyIndex >= 0) - { - BurstRigidbody* arr = (BurstRigidbody*)rigidbodies.GetUnsafePtr(); - Interlocked.Increment(ref arr[rigidbodyIndex].constraintCount); - } - - float frameEnd = stepTime * steps; - float substepsToEnd = timeLeft / substepTime; - - int p1 = deformableEdges[edgeIndex * 2]; - int p2 = deformableEdges[edgeIndex * 2 + 1]; - int edgeCount = math.max(0, edgeRanges[i].y - edgeRanges[i].x + 1); - - // express pin offset in world space: - float4 worldPinOffset = transforms[colliderIndex].TransformPoint(offsets[i]); - float4 predictedPinOffset = worldPinOffset; - - if (rigidbodyIndex >= 0) - { - // predict offset point position using rb velocity at that point (can't integrate transform since position != center of mass) - float4 pointVelocity = BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, inertialFrame.frame.InverseTransformPoint(worldPinOffset), rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame); - predictedPinOffset = BurstIntegration.IntegrateLinear(predictedPinOffset, inertialFrame.frame.TransformVector(pointVelocity), frameEnd); - } - - // transform pinhole position to solver space for constraint solving: - float4 solverPredictedOffset = inertialFrame.frame.InverseTransformPoint(predictedPinOffset); - - // get current edge data: - float4 particlePosition1 = math.lerp(prevPositions[p1], positions[p1], substepsToEnd); - float4 particlePosition2 = math.lerp(prevPositions[p2], positions[p2], substepsToEnd); - float edgeLength = math.length(particlePosition1 - particlePosition2) + BurstMath.epsilon; - BurstMath.NearestPointOnEdge(particlePosition1, particlePosition2, solverPredictedOffset, out float mix, false); - - // calculate current relative velocity between rope and pinhole: - float velocity = (mix - edgeMus[i]) / substepTime * edgeLength; // vel = pos / time. - relativeVelocities[i] = velocity; - - //apply motor force: - float targetAccel = (parameters[i * 5 + 2] - velocity) / substepTime; // accel = vel / time. - float maxAccel = parameters[i * 5 + 3] * math.max(math.lerp(invMasses[p1], invMasses[p2], mix), BurstMath.epsilon); // accel = force / mass. Guard against inf*0 - velocity += math.clamp(targetAccel, -maxAccel, maxAccel) * substepTime; - - // calculate new position by adding motor acceleration: - float corrMix = edgeMus[i] + velocity * substepTime / edgeLength; - - // apply artificial friction by interpolating predicted position and corrected position. - mix = math.lerp(mix, corrMix, parameters[i * 5 + 1]); - - // move to an adjacent edge if needed: - if (!ClampToRange(i, edgeIndex, ref mix) && (mix < 0 || mix > 1)) - { - bool clampOnEnd = parameters[i * 5 + 4] > 0.5f; - - // calculate distance we need to travel along edge chain: - float distToTravel = math.length(particlePosition1 - particlePosition2) * (mix < 0 ? -mix : mix - 1); - - int nextEdgeIndex; - for (int k = 0; k < 10; ++k) // look up to 10 edges away. - { - // calculate index of next edge: - nextEdgeIndex = mix < 0 ? edgeIndex - 1 : edgeIndex + 1; - nextEdgeIndex = edgeRanges[i].x + (int)BurstMath.nfmod(nextEdgeIndex - edgeRanges[i].x, edgeCount); - - // see if it's valid - if (!IsEdgeValid(edgeIndex, nextEdgeIndex, mix)) - { - // disable constraint if needed - if (!clampOnEnd) { particleIndices[i] = -1; return; } - - // otherwise clamp: - mix = math.saturate(mix); - break; - } - - // advance to next edge: - edgeIndex = nextEdgeIndex; - p1 = deformableEdges[edgeIndex * 2]; - p2 = deformableEdges[edgeIndex * 2 + 1]; - particlePosition1 = math.lerp(prevPositions[p1], positions[p1], substepsToEnd); - particlePosition2 = math.lerp(prevPositions[p2], positions[p2], substepsToEnd); - edgeLength = math.length(particlePosition1 - particlePosition2) + BurstMath.epsilon; - - // stop if we reached target edge: - if (distToTravel <= edgeLength) - { - mix = mix < 0 ? 1 - math.saturate(distToTravel / edgeLength) : math.saturate(distToTravel / edgeLength); - ClampToRange(i, edgeIndex, ref mix); - break; - } - - // stop if we reached end of range: - if (ClampToRange(i, edgeIndex, ref mix)) - break; - - distToTravel -= edgeLength; - } - } - - edgeMus[i] = mix; - particleIndices[i] = edgeIndex; - } - } - - [BurstCompile] - public unsafe struct PinholeConstraintsBatchJob : IJobParallelFor - { - [ReadOnly] public NativeArray particleIndices; - [ReadOnly] public NativeArray colliderIndices; - - [ReadOnly] public NativeArray offsets; - [ReadOnly] public NativeArray parameters; // compliance, friction, motor speed, motor force, clamp behavior. - [ReadOnly] public NativeArray edgeMus; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray lambdas; - - [ReadOnly] public NativeArray positions; - [ReadOnly] public NativeArray prevPositions; - [ReadOnly] public NativeArray invMasses; - - [ReadOnly] public NativeArray deformableEdges; - - [ReadOnly] public NativeArray shapes; - [ReadOnly] public NativeArray transforms; - [ReadOnly] public NativeArray rigidbodies; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray rigidbodyLinearDeltas; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray rigidbodyAngularDeltas; - - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray deltas; - [NativeDisableContainerSafetyRestriction][NativeDisableParallelForRestriction] public NativeArray counts; - - [ReadOnly] public BurstInertialFrame inertialFrame; - [ReadOnly] public float stepTime; - [ReadOnly] public float substepTime; - [ReadOnly] public float timeLeft; - [ReadOnly] public int steps; - [ReadOnly] public int activeConstraintCount; - - public void Execute(int i) - { - int edgeIndex = particleIndices[i]; - int colliderIndex = colliderIndices[i]; - - // if no collider or edge, ignore the constraint. - if (edgeIndex < 0 || colliderIndex < 0) - return; - - float frameEnd = stepTime * steps; - float substepsToEnd = timeLeft / substepTime; - - // calculate time adjusted compliance - float compliance = parameters[i * 5] / (substepTime * substepTime); - - int p1 = deformableEdges[edgeIndex * 2]; - int p2 = deformableEdges[edgeIndex * 2 + 1]; - - // calculate projection on current edge: - float mix = edgeMus[i]; - float4 particlePosition1 = math.lerp(prevPositions[p1], positions[p1], substepsToEnd); - float4 particlePosition2 = math.lerp(prevPositions[p2], positions[p2], substepsToEnd); - float4 projection = math.lerp(particlePosition1, particlePosition2, mix); - - // express pin offset in world space: - float4 worldPinOffset = transforms[colliderIndex].TransformPoint(offsets[i]); - float4 predictedPinOffset = worldPinOffset; - - float rigidbodyLinearW = 0; - float rigidbodyAngularW = 0; - - int rigidbodyIndex = shapes[colliderIndex].rigidbodyIndex; - if (rigidbodyIndex >= 0) - { - var rigidbody = rigidbodies[rigidbodyIndex]; - - // predict offset point position using rb velocity at that point (can't integrate transform since position != center of mass) - float4 pointVelocity = BurstMath.GetRigidbodyVelocityAtPoint(rigidbodyIndex, inertialFrame.frame.InverseTransformPoint(worldPinOffset), rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame); - predictedPinOffset = BurstIntegration.IntegrateLinear(predictedPinOffset, inertialFrame.frame.TransformVector(pointVelocity), frameEnd); - - // calculate linear and angular rigidbody effective masses (mass splitting: multiply by constraint count) - rigidbodyLinearW = rigidbody.inverseMass * rigidbody.constraintCount; - rigidbodyAngularW = BurstMath.RotationalInvMass(rigidbody.inverseInertiaTensor, - worldPinOffset - rigidbody.com, - math.normalizesafe(inertialFrame.frame.TransformPoint(projection) - predictedPinOffset)) * rigidbody.constraintCount; - } - - // Transform pinhole position to solver space for constraint solving: - predictedPinOffset = inertialFrame.frame.InverseTransformPoint(predictedPinOffset); - - float4 gradient = projection - predictedPinOffset; - float constraint = math.length(gradient); - float4 gradientDir = gradient / (constraint + BurstMath.epsilon); - - float lambda = (-constraint - compliance * lambdas[i]) / (math.lerp(invMasses[p1], invMasses[p2], mix) + rigidbodyLinearW + rigidbodyAngularW + compliance + BurstMath.epsilon); - lambdas[i] += lambda; - float4 correction = lambda * gradientDir; - - float baryScale = BurstMath.BaryScale(new float4(1 - mix, mix, 0, 0)); - - deltas[p1] += correction * baryScale * invMasses[p1] * (1 - mix) / substepsToEnd; - counts[p1]++; - - deltas[p2] += correction * baryScale * invMasses[p2] * mix / substepsToEnd; - counts[p2]++; - - if (rigidbodyIndex >= 0) - { - BurstMath.ApplyImpulse(rigidbodyIndex, - -correction / frameEnd, - inertialFrame.frame.InverseTransformPoint(worldPinOffset), - rigidbodies, rigidbodyLinearDeltas, rigidbodyAngularDeltas, inertialFrame.frame); - } - } - } - - [BurstCompile] - public struct ApplyPinholeConstraintsBatchJob : IJob - { - [ReadOnly] public NativeArray particleIndices; - [ReadOnly] public float sorFactor; - - [ReadOnly] public NativeArray deformableEdges; - - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray positions; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray deltas; - [NativeDisableContainerSafetyRestriction] [NativeDisableParallelForRestriction] public NativeArray counts; - - [ReadOnly] public int activeConstraintCount; - - public void Execute() - { - for (int i = 0; i < activeConstraintCount; ++i) - { - int edgeIndex = particleIndices[i]; - if (edgeIndex < 0) continue; - - int p1 = deformableEdges[edgeIndex * 2]; - int p2 = deformableEdges[edgeIndex * 2 + 1]; - - if (counts[p1] > 0) - { - positions[p1] += deltas[p1] * sorFactor / counts[p1]; - deltas[p1] = float4.zero; - counts[p1] = 0; - } - - if (counts[p2] > 0) - { - positions[p2] += deltas[p2] * sorFactor / counts[p2]; - deltas[p2] = float4.zero; - counts[p2] = 0; - } - } - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraintsBatch.cs.meta deleted file mode 100644 index a62fb0bef..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Pinhole/BurstPinholeConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7c3a800919e2e435785c5beca1029b70 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching.meta deleted file mode 100644 index 63ebf86ac..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: bf9959ac1dc214a0799c42583ae2cbdb -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraints.cs deleted file mode 100644 index 562da3ad8..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraints.cs +++ /dev/null @@ -1,26 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraints.cs.meta deleted file mode 100644 index 4827c585b..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: cf31f7a95aadc4c85a69a3400ba30608 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraintsBatch.cs deleted file mode 100644 index bb7f43537..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraintsBatch.cs +++ /dev/null @@ -1,472 +0,0 @@ -#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 stepTime, float substepTime, int steps, float timeLeft) - { - 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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraintsBatch.cs.meta deleted file mode 100644 index aedc56273..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/ShapeMatching/BurstShapeMatchingConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5a532b712a8e34bf8a610d420174d9b9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin.meta deleted file mode 100644 index b8d49053d..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: da67648eb6cfe43fbb5574da14d23dc6 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraints.cs deleted file mode 100644 index e823e01cc..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraints.cs +++ /dev/null @@ -1,26 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraints.cs.meta deleted file mode 100644 index 65f8d7486..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f501f9a4acdd34395a31db88db413cb7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraintsBatch.cs deleted file mode 100644 index 85d1a9796..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraintsBatch.cs +++ /dev/null @@ -1,151 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraintsBatch.cs.meta deleted file mode 100644 index 8bb9f7646..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Skin/BurstSkinConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b78797a70a67646fe84c09d533a1bba9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch.meta deleted file mode 100644 index 902647464..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5d27732f644a64569a0e8a1595d1f2a7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraints.cs deleted file mode 100644 index 2856d1303..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraints.cs +++ /dev/null @@ -1,26 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraints.cs.meta deleted file mode 100644 index 8282ae031..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c0e33ed168e3c497b96274c765a12550 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraintsBatch.cs deleted file mode 100644 index 934e06c45..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraintsBatch.cs +++ /dev/null @@ -1,152 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraintsBatch.cs.meta deleted file mode 100644 index fbecad961..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Stitch/BurstStitchConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: cfc801159b76b4cc1a2a7593113d6935 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear.meta deleted file mode 100644 index 06639848b..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 67eda103405cc476bbd356a301fdc499 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraints.cs deleted file mode 100644 index be5283ecd..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraints.cs +++ /dev/null @@ -1,26 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraints.cs.meta deleted file mode 100644 index 8e0f8f779..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a79c4e863802e4ca19939ab6766329e8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraintsBatch.cs deleted file mode 100644 index 006153e1a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraintsBatch.cs +++ /dev/null @@ -1,206 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraintsBatch.cs.meta deleted file mode 100644 index fd4594af8..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/StretchShear/BurstStretchShearConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0f505342239d5443fbd06fb4e610b240 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether.meta deleted file mode 100644 index edc510757..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c77d80d2f6a7b4136bfdc684b23b91f3 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraints.cs deleted file mode 100644 index ad12a2d49..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraints.cs +++ /dev/null @@ -1,26 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraints.cs.meta deleted file mode 100644 index 0a7fa83a9..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0c12658b3bc614f3c921a54dc2489881 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraintsBatch.cs deleted file mode 100644 index eb1a4ee28..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraintsBatch.cs +++ /dev/null @@ -1,141 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraintsBatch.cs.meta deleted file mode 100644 index ef9db3d30..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Tether/BurstTetherConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0333dee6dab0c40a9abc35796d0fd99a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume.meta deleted file mode 100644 index 40b34b228..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0b17a4f4853654722be7ce3458a4ce7a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraints.cs deleted file mode 100644 index aae0fa86f..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraints.cs +++ /dev/null @@ -1,26 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraints.cs.meta deleted file mode 100644 index 9aceba9bd..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 54b3de3345cef43db9f6b37df8cafabb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraintsBatch.cs deleted file mode 100644 index f813744dc..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraintsBatch.cs +++ /dev/null @@ -1,232 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraintsBatch.cs.meta deleted file mode 100644 index cff4f91be..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Constraints/Volume/BurstVolumeConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7074d2203034e432a8b88a3b3018283a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures.meta deleted file mode 100644 index 0c37e0436..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7d7a8ea58f9a3403e9147d6d8874db86 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAabb.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAabb.cs deleted file mode 100644 index 5fea22d30..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAabb.cs +++ /dev/null @@ -1,156 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAabb.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAabb.cs.meta deleted file mode 100644 index e9a0ee4e2..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAabb.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2766a51cbde7a4fe490989456f737d23 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAffineTransform.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAffineTransform.cs deleted file mode 100644 index f601191d2..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAffineTransform.cs +++ /dev/null @@ -1,95 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAffineTransform.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAffineTransform.cs.meta deleted file mode 100644 index f5c311f19..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstAffineTransform.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 42d935e53ff25405bb572c630431a08e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCellSpan.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCellSpan.cs deleted file mode 100644 index beadf1007..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCellSpan.cs +++ /dev/null @@ -1,60 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCellSpan.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCellSpan.cs.meta deleted file mode 100644 index a574d71c4..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCellSpan.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9612a967e340a428ba9353b922a881be -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCollisionMaterial.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCollisionMaterial.cs deleted file mode 100644 index a93368131..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCollisionMaterial.cs +++ /dev/null @@ -1,78 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCollisionMaterial.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCollisionMaterial.cs.meta deleted file mode 100644 index 0adfc9556..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstCollisionMaterial.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: de388c94a975a489a8093d110d42af2a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstInertialFrame.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstInertialFrame.cs deleted file mode 100644 index a1e7b5513..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstInertialFrame.cs +++ /dev/null @@ -1,65 +0,0 @@ -#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 float4 VelocityAtPoint(float4 point) - { - return velocity + new float4(math.cross(angularVelocity.xyz, (point - prevFrame.translation).xyz), 0); - } - - public void Update(float4 position, float4 scale, quaternion rotation, float dt) - { - prevFrame = frame; - 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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstInertialFrame.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstInertialFrame.cs.meta deleted file mode 100644 index f48cd9ee5..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstInertialFrame.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e3c3b9a94006d4984a94f040e6d2c737 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstPrefixSum.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstPrefixSum.cs deleted file mode 100644 index c214ce9e9..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstPrefixSum.cs +++ /dev/null @@ -1,128 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using System.Collections.Generic; -using Unity.Burst; -using Unity.Collections; -using Unity.Collections.LowLevel.Unsafe; -using Unity.Jobs; -using Unity.Mathematics; - -namespace Obi -{ - public class BurstPrefixSum - { - private int inputSize; - private const int numBlocks = 8; - - private NativeArray blockSums; - - public BurstPrefixSum(int inputSize) - { - this.inputSize = inputSize; - blockSums = new NativeArray(numBlocks, Allocator.Persistent); - } - - public void Dispose() - { - if (blockSums.IsCreated) - blockSums.Dispose(); - } - - public unsafe JobHandle Sum(NativeArray input, NativeArray result, int* count, JobHandle inputDeps) - { - - // calculate partial prefix sums, one per block: - var job = new BlockSumJob - { - input = input, - output = result, - blocks = blockSums, - count = count - }; - inputDeps = job.Schedule(numBlocks, 1, inputDeps); - - var job3 = new BlockSum - { - blocks = blockSums - }; - inputDeps = job3.Schedule(inputDeps); - - // add the scanned partial block sums to the result: - var job2 = new PrefixSumJob - { - prefixBlocks = blockSums, - output = result, - count = count - }; - return job2.Schedule(numBlocks, 1, inputDeps); - } - - [BurstCompile] - unsafe struct BlockSumJob : IJobParallelFor - { - [ReadOnly] public NativeArray input; - [NativeDisableParallelForRestriction] public NativeArray output; - public NativeArray blocks; - - [ReadOnly] [NativeDisableUnsafePtrRestriction] public int* count; - - public void Execute(int block) - { - int length = *count + 1; // add 1 to get total sum in last element+1 - int blockSize = (int)math.ceil(length / (float)numBlocks); - - int start = block * blockSize; - int end = math.min(start + blockSize, length); - - output[start] = 0; - - if (blockSize == 0) { blocks[block] = 0; return; } - - for (int i = start + 1; i < end; ++i) - output[i] = output[i - 1] + input[i - 1]; - - blocks[block] = output[end - 1] + input[end - 1]; - } - } - - [BurstCompile] - struct BlockSum : IJob - { - public NativeArray blocks; - - public void Execute() - { - int aux = blocks[0]; - blocks[0] = 0; - - for (int i = 1; i < blocks.Length; ++i) - { - int a = blocks[i]; - blocks[i] = blocks[i - 1] + aux; - aux = a; - } - } - } - - [BurstCompile] - unsafe struct PrefixSumJob : IJobParallelFor - { - [ReadOnly] public NativeArray prefixBlocks; - [NativeDisableParallelForRestriction] public NativeArray output; - - [ReadOnly] [NativeDisableUnsafePtrRestriction] public int* count; - - public void Execute(int block) - { - int length = *count + 1; // add 1 to get total sum in last element+1 - int blockSize = (int)math.ceil(length / (float)numBlocks); - - int start = block * blockSize; - int end = math.min(start + blockSize, length); - - for (int i = start; i < end; ++i) - output[i] += prefixBlocks[block]; - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstPrefixSum.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstPrefixSum.cs.meta deleted file mode 100644 index 3cd7558fd..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstPrefixSum.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7fa11563c202445279d5e04b0eb1631b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstQueryShape.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstQueryShape.cs deleted file mode 100644 index b56880310..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstQueryShape.cs +++ /dev/null @@ -1,16 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstQueryShape.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstQueryShape.cs.meta deleted file mode 100644 index 538a4ca17..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstQueryShape.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1407a04be79f44be6a770255e8e89195 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstRigidbody.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstRigidbody.cs deleted file mode 100644 index 7df6296a1..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstRigidbody.cs +++ /dev/null @@ -1,23 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstRigidbody.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstRigidbody.cs.meta deleted file mode 100644 index 9487b1865..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/BurstRigidbody.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f72992ee9e3174e89b3c0e5b6da57a17 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher.meta deleted file mode 100644 index 528067dd2..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 20b822fd4fe494009afa17025c273ec8 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/BatchLUT.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/BatchLUT.cs deleted file mode 100644 index 509d7fe8a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/BatchLUT.cs +++ /dev/null @@ -1,49 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/BatchLUT.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/BatchLUT.cs.meta deleted file mode 100644 index 60a9f235c..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/BatchLUT.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0ba613bda78be4a71be94b90f92fbde5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintBatcher.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintBatcher.cs deleted file mode 100644 index 5f2c182bc..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintBatcher.cs +++ /dev/null @@ -1,216 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintBatcher.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintBatcher.cs.meta deleted file mode 100644 index 7b2143c67..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintBatcher.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5f15c420c952f4f689684489a7de8920 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintSorter.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintSorter.cs deleted file mode 100644 index 3b3bf9ee9..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintSorter.cs +++ /dev/null @@ -1,160 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintSorter.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintSorter.cs.meta deleted file mode 100644 index f96538a00..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ConstraintSorter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4cb7051d5b32442d79da18c47c1fbcc2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ContactProvider.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ContactProvider.cs deleted file mode 100644 index 011fecd08..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ContactProvider.cs +++ /dev/null @@ -1,41 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ContactProvider.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ContactProvider.cs.meta deleted file mode 100644 index 307657ae4..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/ContactProvider.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fec3d78324058457cb723a60fb4858a7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/FluidInteractionProvider.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/FluidInteractionProvider.cs deleted file mode 100644 index f6bf87f5f..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/FluidInteractionProvider.cs +++ /dev/null @@ -1,32 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/FluidInteractionProvider.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/FluidInteractionProvider.cs.meta deleted file mode 100644 index 1567c7444..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/FluidInteractionProvider.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 66b0d6e3db3c14b929541a23187c393b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraint.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraint.cs deleted file mode 100644 index 2015869be..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraint.cs +++ /dev/null @@ -1,10 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraint.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraint.cs.meta deleted file mode 100644 index 7c631bab9..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraint.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 49760f68f387c45b8b1e5482a6d0dabe -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraintProvider.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraintProvider.cs deleted file mode 100644 index 44cf18600..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraintProvider.cs +++ /dev/null @@ -1,12 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraintProvider.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraintProvider.cs.meta deleted file mode 100644 index 26f478400..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ConstraintBatcher/IConstraintProvider.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2f9cbc3295db8411ba4ac8c9a75291ec -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/FluidInteraction.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/FluidInteraction.cs deleted file mode 100644 index f79ea05b3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/FluidInteraction.cs +++ /dev/null @@ -1,19 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/FluidInteraction.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/FluidInteraction.cs.meta deleted file mode 100644 index 12b840183..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/FluidInteraction.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 98e6b7036ee4a4806b75d155a753b769 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/GridHash.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/GridHash.cs deleted file mode 100644 index fe57581a0..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/GridHash.cs +++ /dev/null @@ -1,76 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/GridHash.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/GridHash.cs.meta deleted file mode 100644 index 8a077a2ed..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/GridHash.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 87666fac08214420abefb36a9166df43 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/NativeMultilevelGrid.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/NativeMultilevelGrid.cs deleted file mode 100644 index aa210c062..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/NativeMultilevelGrid.cs +++ /dev/null @@ -1,282 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/NativeMultilevelGrid.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/NativeMultilevelGrid.cs.meta deleted file mode 100644 index c1d785721..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/NativeMultilevelGrid.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2745cdd0ade4f4ac0a7ca952c1ad5dd8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ParticleGrid.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ParticleGrid.cs deleted file mode 100644 index b2c8ccdae..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ParticleGrid.cs +++ /dev/null @@ -1,473 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using System; -using Unity.Collections; -using Unity.Jobs; -using Unity.Mathematics; -using Unity.Burst; -using UnityEngine; - -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) + collisionMargin; - 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, normalA = float4.zero, normalB = float4.zero; - float invMassA = 0, invMassB = 0; - - for (int j = 0; j < simplexSizeA; ++j) - { - int particleIndex = simplices[simplexStartA + j]; - simplexRadiusA += radii[particleIndex].x * simplexBary[j]; - velocityA += velocities[particleIndex] * simplexBary[j]; - normalA += (normals[particleIndex].w < 0 ? new float4(math.rotate(orientations[particleIndex],normals[particleIndex].xyz), normals[particleIndex].w) : normals[particleIndex]) * simplexBary[j]; - invMassA += invMasses[particleIndex] * simplexBary[j]; - } - - for (int j = 0; j < simplexSizeB; ++j) - { - int particleIndex = simplices[simplexStartB + j]; - simplexRadiusB += radii[particleIndex].x * surfacePoint.bary[j]; - velocityB += velocities[particleIndex] * surfacePoint.bary[j]; - normalB += (normals[particleIndex].w < 0 ? new float4(math.rotate(orientations[particleIndex], normals[particleIndex].xyz), normals[particleIndex].w) : normals[particleIndex]) * surfacePoint.bary[j]; - invMassB += invMasses[particleIndex] * simplexBary[j]; - } - - // no contact between fixed simplices: - //if (!(invMassA > 0 || invMassB > 0)) - // return; - - float dAB = math.dot(simplexPoint - surfacePoint.point, surfacePoint.normal); - float vel = math.dot(velocityA - velocityB, surfacePoint.normal); - - // 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); - - // during inter-collision, if either particle contains SDF data and they overlap: - if (groupA != groupB && (normalB.w < 0 || normalA.w < 0) && dAB * 1.05f <= simplexRadiusA + simplexRadiusB) - { - // as normal, pick SDF gradient belonging to least penetration distance: - float4 nij = normalB; - if (normalB.w >= 0 || (normalA.w < 0 && normalB.w < normalA.w)) - nij = new float4(-normalA.xyz, normalA.w); - - // for boundary particles, use one sided sphere normal: - if (math.abs(nij.w) <= math.max(simplexRadiusA, simplexRadiusB) * 1.5f) - BurstMath.OneSidedNormal(nij, ref surfacePoint.normal); - else - surfacePoint.normal = nij; - } - - surfacePoint.normal.w = 0; - contactsQueue.Enqueue(new BurstContact - { - bodyA = A, - bodyB = B, - pointA = simplexBary, - pointB = surfacePoint.bary, - normal = surfacePoint.normal - }); - } - } - } - } - - 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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ParticleGrid.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ParticleGrid.cs.meta deleted file mode 100644 index 9b1ea3104..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/ParticleGrid.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 581337416adb545a388c356940ae38be -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries.meta deleted file mode 100644 index e9f48027f..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3c5f4522f2a394ac0a5017b7de9a31d5 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstContact.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstContact.cs deleted file mode 100644 index 483053074..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstContact.cs +++ /dev/null @@ -1,163 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstContact.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstContact.cs.meta deleted file mode 100644 index 78667f132..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstContact.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 70486b82a23044fccaf324d309757b8f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstQueryResult.cs b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstQueryResult.cs deleted file mode 100644 index 5306e2cd6..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstQueryResult.cs +++ /dev/null @@ -1,18 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstQueryResult.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstQueryResult.cs.meta deleted file mode 100644 index 11928dd14..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/DataStructures/Queries/BurstQueryResult.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a3a82674a4b3b432ebcddfc108bb44c7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Queries.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Queries.meta deleted file mode 100644 index ce25ade9d..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Queries.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0a89041802caf45b3bb46e192cc3c220 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstBoxQuery.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstBoxQuery.cs deleted file mode 100644 index b56f3e35b..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstBoxQuery.cs +++ /dev/null @@ -1,98 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstBoxQuery.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstBoxQuery.cs.meta deleted file mode 100644 index 0e33279c3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstBoxQuery.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d6b3a07d6f9da432ea6e8e0dd3eea022 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstRay.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstRay.cs deleted file mode 100644 index b89248af2..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstRay.cs +++ /dev/null @@ -1,92 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstRay.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstRay.cs.meta deleted file mode 100644 index 8d62f282a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstRay.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 57b77d0143f8a4af18df103368d328f6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstSphereQuery.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstSphereQuery.cs deleted file mode 100644 index 82cf497eb..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstSphereQuery.cs +++ /dev/null @@ -1,69 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstSphereQuery.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstSphereQuery.cs.meta deleted file mode 100644 index 50b176c88..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Queries/BurstSphereQuery.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e3c36e77eab954f2e9b12e7fd5c63a6f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Queries/SpatialQueryJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Queries/SpatialQueryJob.cs deleted file mode 100644 index 1059408e3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Queries/SpatialQueryJob.cs +++ /dev/null @@ -1,129 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Queries/SpatialQueryJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Queries/SpatialQueryJob.cs.meta deleted file mode 100644 index e44e250e7..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Queries/SpatialQueryJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5f8bb8e6f2de74ab3b2ab294100629a4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering.meta deleted file mode 100644 index 5085057bd..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e6af4953b3f22459ab04c6e64cd948ab -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common.meta deleted file mode 100644 index 632682d7c..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3595afed529f346669fbe538323cd7d2 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BuildParticleMeshDataJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BuildParticleMeshDataJob.cs deleted file mode 100644 index bcb706819..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BuildParticleMeshDataJob.cs +++ /dev/null @@ -1,62 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; -using UnityEngine; - -namespace Obi -{ - [BurstCompile] - struct BuildParticleMeshDataJob : IJobParallelFor - { - [ReadOnly] public NativeArray particleIndices; - [ReadOnly] public NativeArray rendererIndices; - [ReadOnly] public NativeArray rendererData; - - [ReadOnly] public NativeArray renderablePositions; - [ReadOnly] public NativeArray renderableOrientations; - [ReadOnly] public NativeArray renderableRadii; - [ReadOnly] public NativeArray colors; - - [NativeDisableParallelForRestriction] public NativeArray vertices; - [NativeDisableParallelForRestriction] public NativeArray indices; - - [ReadOnly] public int firstParticle; - - public void Execute(int i) - { - int p = particleIndices[firstParticle + i]; - int r = rendererIndices[firstParticle + i]; - - ParticleVertex v = new ParticleVertex(); - - v.pos = new float4(renderablePositions[p].xyz, 1); - v.color = colors[p] * (Vector4)rendererData[r].color; - v.b1 = new float4(math.mul(renderableOrientations[p], new float3(1, 0, 0)), renderableRadii[p][0] * renderableRadii[p][3] * rendererData[r].radiusScale); - v.b2 = new float4(math.mul(renderableOrientations[p], new float3(0, 1, 0)), renderableRadii[p][1] * renderableRadii[p][3] * rendererData[r].radiusScale); - v.b3 = new float4(math.mul(renderableOrientations[p], new float3(0, 0, 1)), renderableRadii[p][2] * renderableRadii[p][3] * rendererData[r].radiusScale); - - v.offset = new float3(1, 1, 0); - vertices[i * 4] = v; - - v.offset = new float3(-1, 1, 0); - vertices[i * 4 + 1] = v; - - v.offset = new float3(-1, -1, 0); - vertices[i * 4 + 2] = v; - - v.offset = new float3(1, -1, 0); - vertices[i * 4 + 3] = v; - - indices[i * 6] = (i * 4 + 2); - indices[i * 6 + 1] = (i * 4 + 1); - indices[i * 6 + 2] = (i * 4); - - indices[i * 6 + 3] = (i * 4 + 3); - indices[i * 6 + 4] = (i * 4 + 2); - indices[i * 6 + 5] = (i * 4); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BuildParticleMeshDataJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BuildParticleMeshDataJob.cs.meta deleted file mode 100644 index c205bf0f6..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BuildParticleMeshDataJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: cacb4a3597ee245a6b40358728c300e9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstFoamRenderSystem.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstFoamRenderSystem.cs deleted file mode 100644 index 0b369f2a2..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstFoamRenderSystem.cs +++ /dev/null @@ -1,247 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using UnityEngine.Rendering; -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; -using Unity.Collections.LowLevel.Unsafe; -using System.Collections.Generic; - -#if (SRP_UNIVERSAL) -using UnityEngine.Rendering.Universal; -#endif - -namespace Obi -{ - - public class BurstFoamRenderSystem : ObiFoamRenderSystem - { - protected NativeArray sortHandles; - - protected struct SortHandleComparer : IComparer - { - public int Compare(float2 a, float2 b) - { - return b.y.CompareTo(a.y); - } - } - - protected SortHandleComparer comparer = new SortHandleComparer(); - - public BurstFoamRenderSystem(ObiSolver solver) : base(solver) - { -#if (SRP_UNIVERSAL) - if (GraphicsSettings.currentRenderPipeline is UniversalRenderPipelineAsset) - renderBatch = new ProceduralRenderBatch(0, Resources.Load("ObiMaterials/URP/Fluid/FoamParticlesURP"), new RenderBatchParams(true)); - else -#endif - renderBatch = new ProceduralRenderBatch(0, Resources.Load("ObiMaterials/Fluid/FoamParticles"), new RenderBatchParams(true)); - ReallocateRenderBatch(); - } - - public override void Dispose() - { - base.Dispose(); - - if (sortHandles.IsCreated) - sortHandles.Dispose(); - } - - private void ReallocateRenderBatch() - { - // in case the amount of particles allocated does not match - // the amount requested by the solver, reallocate - if (!sortHandles.IsCreated || m_Solver.foamPositions.count * 4 != renderBatch.vertexCount) - { - renderBatch.Dispose(); - renderBatch.vertexCount = m_Solver.foamPositions.count * 4; - renderBatch.triangleCount = m_Solver.foamPositions.count * 2; - renderBatch.Initialize(layout); - - if (sortHandles.IsCreated) - sortHandles.Dispose(); - sortHandles = new NativeArray(m_Solver.foamPositions.count, Allocator.Persistent); - } - } - - public override void Setup() - { - } - - public override void Step() - { - } - - public override unsafe void Render() - { - if (!Application.isPlaying) - return; - - var solver = m_Solver.implementation as BurstSolverImpl; - - ReallocateRenderBatch(); - - foreach (Camera camera in cameras) - { - if (camera == null) - continue; - - JobHandle inputDeps = new JobHandle(); - var sortJob = sortHandles.Slice(0, m_Solver.foamCount[3]).SortJob(comparer); - - //Clear all triangle indices to zero: - UnsafeUtility.MemClear( - NativeArrayUnsafeUtility.GetUnsafeBufferPointerWithoutChecks(renderBatch.triangles), - UnsafeUtility.SizeOf() * renderBatch.triangles.Length); - - var projectJob = new ProjectOnSortAxisJob - { - inputPositions = solver.abstraction.foamPositions.AsNativeArray(), - sortHandles = sortHandles, - sortAxis = solver.abstraction.transform.InverseTransformDirection(camera.transform.forward) - }; - - inputDeps = projectJob.Schedule(m_Solver.foamCount[3], 256, inputDeps); - - inputDeps = sortJob.Schedule(inputDeps); - - var sortParticlesJob = new SortParticles - { - sortHandles = sortHandles, - inputPositions = solver.abstraction.foamPositions.AsNativeArray(), - inputVelocities = solver.abstraction.foamVelocities.AsNativeArray(), - inputColors = solver.abstraction.foamColors.AsNativeArray(), - inputAttributes = solver.abstraction.foamAttributes.AsNativeArray(), - - outputPositions = solver.auxPositions, - outputVelocities = solver.auxVelocities, - outputColors = solver.auxColors, - outputAttributes = solver.auxAttributes - }; - - inputDeps = sortParticlesJob.Schedule(m_Solver.foamCount[3], 256, inputDeps); - - var meshJob = new BuildFoamMeshDataJob - { - inputPositions = solver.auxPositions, - inputVelocities = solver.auxVelocities, - inputColors = solver.auxColors, - inputAttributes = solver.auxAttributes, - - vertices = renderBatch.vertices, - indices = renderBatch.triangles, - }; - - inputDeps = meshJob.Schedule(m_Solver.foamCount[3], 128, inputDeps); - - inputDeps.Complete(); - - renderBatch.mesh.SetVertexBufferData(renderBatch.vertices, 0, 0, renderBatch.vertexCount, 0, MeshUpdateFlags.DontValidateIndices | MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontResetBoneBounds | MeshUpdateFlags.DontNotifyMeshUsers); - renderBatch.mesh.SetIndexBufferData(renderBatch.triangles, 0, 0, renderBatch.triangleCount * 3, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); - - matProps.SetFloat("_FadeDepth", 0); - matProps.SetFloat("_VelocityStretching", m_Solver.maxFoamVelocityStretch); - matProps.SetFloat("_RadiusScale", m_Solver.foamRadiusScale); - matProps.SetFloat("_FadeIn", m_Solver.foamFade.x); - matProps.SetFloat("_FadeOut", m_Solver.foamFade.y); - matProps.SetFloat("_ScatterDensity", m_Solver.foamVolumeDensity); - matProps.SetFloat("_AmbientDensity", m_Solver.foamAmbientDensity); - matProps.SetColor("_ScatterColor", m_Solver.foamScatterColor); - matProps.SetColor("_AmbientColor", m_Solver.foamAmbientColor); - - var rp = renderBatch.renderParams; - rp.worldBounds = m_Solver.bounds; - rp.camera = camera; - rp.matProps = matProps; - - Graphics.RenderMesh(rp, renderBatch.mesh, 0, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); - } - } - - - - [BurstCompile] - unsafe struct ProjectOnSortAxisJob : IJobParallelFor - { - [ReadOnly] public NativeArray inputPositions; - [NativeDisableParallelForRestriction] public NativeArray sortHandles; - - public float3 sortAxis; - - public void Execute(int i) - { - sortHandles[i] = new float2(i, math.dot(inputPositions[i].xyz, sortAxis)); - } - } - - [BurstCompile] - unsafe struct SortParticles : IJobParallelFor - { - [ReadOnly] public NativeArray sortHandles; - - [ReadOnly] public NativeArray inputPositions; - [ReadOnly] public NativeArray inputVelocities; - [ReadOnly] public NativeArray inputColors; - [ReadOnly] public NativeArray inputAttributes; - - [NativeDisableParallelForRestriction] public NativeArray outputPositions; - [NativeDisableParallelForRestriction] public NativeArray outputVelocities; - [NativeDisableParallelForRestriction] public NativeArray outputColors; - [NativeDisableParallelForRestriction] public NativeArray outputAttributes; - - public void Execute(int i) - { - int o = (int)sortHandles[i].x; - outputPositions[i] = inputPositions[o]; - outputVelocities[i] = inputVelocities[o]; - outputColors[i] = inputColors[o]; - outputAttributes[i] = inputAttributes[o]; - } - } - - [BurstCompile] - struct BuildFoamMeshDataJob : IJobParallelFor - { - [ReadOnly] public NativeArray inputPositions; - [ReadOnly] public NativeArray inputVelocities; - [ReadOnly] public NativeArray inputColors; - [ReadOnly] public NativeArray inputAttributes; - - [NativeDisableParallelForRestriction] public NativeArray vertices; - [NativeDisableParallelForRestriction] public NativeArray indices; - - public void Execute(int i) - { - DiffuseParticleVertex v = new DiffuseParticleVertex(); - - v.pos = new float4(inputPositions[i].xyz, 1); - v.color = inputColors[i]; - v.velocity = inputVelocities[i]; - v.attributes = inputAttributes[i]; - - v.offset = new float3(1, 1, 0); - vertices[i * 4] = v; - - v.offset = new float3(-1, 1, 0); - vertices[i * 4 + 1] = v; - - v.offset = new float3(-1, -1, 0); - vertices[i * 4 + 2] = v; - - v.offset = new float3(1, -1, 0); - vertices[i * 4 + 3] = v; - - indices[i * 6] = (i * 4 + 2); - indices[i * 6 + 1] = (i * 4 + 1); - indices[i * 6 + 2] = (i * 4); - - indices[i * 6 + 3] = (i * 4 + 3); - indices[i * 6 + 4] = (i * 4 + 2); - indices[i * 6 + 5] = (i * 4); - } - } - - } -} -#endif diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstFoamRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstFoamRenderSystem.cs.meta deleted file mode 100644 index 5f9e611de..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstFoamRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 555e1cc2122984a93afc0f6f31fa173b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstInstancedParticleRenderSystem.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstInstancedParticleRenderSystem.cs deleted file mode 100644 index 3441e2db0..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstInstancedParticleRenderSystem.cs +++ /dev/null @@ -1,100 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; - -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; - -namespace Obi -{ - - public class BurstInstancedParticleRenderSystem : ObiInstancedParticleRenderSystem - { - - public BurstInstancedParticleRenderSystem(ObiSolver solver) : base(solver) - { - } - - public override void Render() - { - using (m_RenderMarker.Auto()) - { - var instanceTransformsJob = new InstancedParticleTransforms - { - activeParticles = activeParticles.AsNativeArray(), - rendererData = rendererData.AsNativeArray(), - rendererIndex = rendererIndex.AsNativeArray(), - instanceTransforms = instanceTransforms.AsNativeArray(), - instanceColors = instanceColors.AsNativeArray(), - - renderablePositions = m_Solver.renderablePositions.AsNativeArray(), - renderableOrientations = m_Solver.renderableOrientations.AsNativeArray(), - renderableRadii = m_Solver.renderableRadii.AsNativeArray(), - colors = m_Solver.colors.AsNativeArray(), - solverToWorld = m_Solver.transform.localToWorldMatrix - }; - - instanceTransformsJob.Schedule(activeParticles.count, 32).Complete(); - - var mpb = new MaterialPropertyBlock(); - - //Draw instances: - for (int i = 0; i < batchList.Count; i++) - { - var batch = batchList[i]; - - if (batch.instanceCount > 0) - { - // workaround for RenderMeshInstanced bug - // (https://forum.unity.com/threads/gpu-instanced-custom-properties-dont-take-unity_baseinstanceid-into-account.1520602/) - // also, no NativeArray<> overload :( - mpb.SetVectorArray("_Colors", instanceColors.AsNativeArray().Slice(batch.firstInstance, batch.instanceCount).ToArray()); - - var rp = batch.renderParams; - rp.material = batch.material; - rp.worldBounds = m_Solver.bounds; - rp.matProps = mpb; - - // TODO: use generic overload to pass matrix + instance color. - Graphics.RenderMeshInstanced(rp, batch.mesh, 0, instanceTransforms.AsNativeArray(), batch.instanceCount, batch.firstInstance); - } - } - - } - } - - [BurstCompile] - struct InstancedParticleTransforms : IJobParallelFor - { - [ReadOnly] public NativeArray activeParticles; - [ReadOnly] public NativeArray rendererData; - [ReadOnly] public NativeArray rendererIndex; - - [ReadOnly] public NativeArray renderablePositions; - [ReadOnly] public NativeArray renderableOrientations; - [ReadOnly] public NativeArray renderableRadii; - [ReadOnly] public NativeArray colors; - [ReadOnly] public float4x4 solverToWorld; - - [NativeDisableParallelForRestriction] public NativeArray instanceTransforms; - [NativeDisableParallelForRestriction] public NativeArray instanceColors; - - public void Execute(int i) - { - int p = activeParticles[i]; - - Matrix4x4 tfrm = float4x4.TRS(renderablePositions[p].xyz, - renderableOrientations[p], - renderableRadii[p].xyz * renderableRadii[p][3] * rendererData[rendererIndex[i]].radiusScale); - - instanceTransforms[i] = math.mul(solverToWorld, tfrm); - - instanceColors[i] = colors[p] * (Vector4)rendererData[rendererIndex[i]].color; - } - - } - } -} -#endif - diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstInstancedParticleRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstInstancedParticleRenderSystem.cs.meta deleted file mode 100644 index 2910089fc..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstInstancedParticleRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b3896a2253db543bcaa92126d83a7ba0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstParticleRenderSystem.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstParticleRenderSystem.cs deleted file mode 100644 index 7b1460a3e..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstParticleRenderSystem.cs +++ /dev/null @@ -1,58 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using UnityEngine.Rendering; - -using Unity.Jobs; -using Unity.Mathematics; - -namespace Obi -{ - public class BurstParticleRenderSystem : ObiParticleRenderSystem - { - public BurstParticleRenderSystem(ObiSolver solver) : base(solver) - { - m_Solver = solver; - } - - public override void Render() - { - using (m_RenderMarker.Auto()) - { - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - - var buildArraysJob = new BuildParticleMeshDataJob - { - particleIndices = activeParticles.AsNativeArray(), - rendererIndices = rendererIndex.AsNativeArray(), - rendererData = rendererData.AsNativeArray(), - - renderablePositions = m_Solver.renderablePositions.AsNativeArray(), - renderableOrientations = m_Solver.renderableOrientations.AsNativeArray(), - renderableRadii = m_Solver.renderableRadii.AsNativeArray(), - colors = m_Solver.colors.AsNativeArray(), - - vertices = batch.vertices, - indices = batch.triangles, - - firstParticle = batch.firstParticle, - }; - - buildArraysJob.Schedule(batch.vertexCount / 4, 32).Complete(); - - batch.mesh.SetVertexBufferData(batch.vertices, 0, 0, batch.vertexCount, 0, MeshUpdateFlags.DontValidateIndices | MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontResetBoneBounds | MeshUpdateFlags.DontNotifyMeshUsers); - batch.mesh.SetIndexBufferData(batch.triangles, 0, 0, batch.triangleCount * 3, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); - - var rp = batch.renderParams; - rp.worldBounds = m_Solver.bounds; - - Graphics.RenderMesh(rp, batch.mesh, 0, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); - } - - } - } - } -} -#endif - diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstParticleRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstParticleRenderSystem.cs.meta deleted file mode 100644 index 89d3acbbf..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/Common/BurstParticleRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d1d1ddc20ab7148e3ac806e3559ba2b8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod.meta deleted file mode 100644 index 0222329ff..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 68fb3be53914247609d4e6da4f249e52 -labels: -- ObiRope -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstChainRopeRenderSystem.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstChainRopeRenderSystem.cs deleted file mode 100644 index 2fefee058..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstChainRopeRenderSystem.cs +++ /dev/null @@ -1,139 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; - -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; -using Unity.Collections.LowLevel.Unsafe; - -namespace Obi -{ - - public class BurstChainRopeRenderSystem : ObiChainRopeRenderSystem - { - protected Matrix4x4[] transformsArray = new Matrix4x4[1023]; - - public BurstChainRopeRenderSystem(ObiSolver solver) : base(solver) - { - } - - public override void Setup() - { - base.Setup(); - } - - public override void Render() - { - using (m_RenderMarker.Auto()) - { - // generate raw frames using parallel transport - var instanceTransformsJob = new InstanceTransforms() - { - rendererData = rendererData.AsNativeArray(), - chunkData = chunkData.AsNativeArray(), - modifiers = modifiers.AsNativeArray(), - elements = elements.AsNativeArray(), - - instanceTransforms = instanceTransforms.AsNativeArray(), - instanceColors = instanceColors.AsNativeArray(), - - renderablePositions = m_Solver.renderablePositions.AsNativeArray(), - renderableOrientations = m_Solver.renderableOrientations.AsNativeArray(), - principalRadii = m_Solver.principalRadii.AsNativeArray(), - colors = m_Solver.colors.AsNativeArray(), - solverToWorld = m_Solver.transform.localToWorldMatrix, - }; - - instanceTransformsJob.Schedule(chunkData.count, 8).Complete(); - - //Draw instances: - for (int i = 0; i < batchList.Count; i++) - { - var batch = batchList[i]; - - var rp = batch.renderParams; - rp.material = batch.material; - rp.worldBounds = m_Solver.bounds; - - Graphics.RenderMeshInstanced(rp, batch.mesh, 0, instanceTransforms.AsNativeArray(), batch.instanceCount, batch.firstInstance); - } - - } - } - - [BurstCompile] - struct InstanceTransforms : IJobParallelFor - { - [ReadOnly] public NativeArray rendererData; - [ReadOnly] public NativeArray chunkData; - [ReadOnly] public NativeArray modifiers; - [ReadOnly] public NativeArray elements; - - [ReadOnly] public NativeArray renderablePositions; - [ReadOnly] public NativeArray renderableOrientations; - [ReadOnly] public NativeArray principalRadii; - [ReadOnly] public NativeArray colors; - [ReadOnly] public float4x4 solverToWorld; - - [NativeDisableParallelForRestriction] public NativeArray instanceTransforms; - [NativeDisableParallelForRestriction] public NativeArray instanceColors; - - public void Execute(int i) - { - int firstIndex = i > 0 ? chunkData[i - 1].offset : 0; - int elementCount = chunkData[i].offset - firstIndex; - - var rendererIndex = chunkData[i].rendererIndex; - var renderer = rendererData[rendererIndex]; - - float3 rendScale = ((float4)renderer.scale).xyz; - - int firstModifier = rendererIndex > 0 ? rendererData[rendererIndex - 1].modifierOffset : 0; - int modifierCount = renderer.modifierOffset - firstModifier; - - var modifier = new ObiRopeChainRenderer.LinkModifier(); - modifier.Clear(); - - BurstPathFrame frame = new BurstPathFrame(); - frame.Reset(); - - float twist = -renderer.twist * elementCount * renderer.twistAnchor; - frame.SetTwist(twist); - - // parallel transport: - for (int m = 0; m < elementCount; ++m) - { - if (modifierCount > 0) - modifier = modifiers[firstModifier + m % modifierCount]; - - int index = firstIndex + m; - float4 pos = renderablePositions[elements[index].x]; - float4 nextPos = renderablePositions[elements[index].y]; - float4 vector = nextPos - pos; - float3 tangent = math.normalizesafe(vector.xyz); - - if (renderer.usesOrientedParticles == 1) - { - frame.Transport(nextPos.xyz, tangent, math.rotate(renderableOrientations[elements[index].x], new float3(0, 1, 0)), twist); - twist += renderer.twist; - } - else - frame.Transport(nextPos.xyz, tangent, renderer.twist); - - var rotation = quaternion.LookRotationSafe(frame.tangent, frame.normal); - var position = (pos + vector * 0.5f).xyz + math.mul(rotation, modifier.translation); - var scale = principalRadii[elements[index].x].x * 2 * rendScale * modifier.scale; - - rotation = math.mul(rotation, quaternion.Euler(math.radians(modifier.rotation))); - - instanceTransforms[index] = math.mul(solverToWorld,float4x4.TRS(position,rotation,scale)); - instanceColors[index] = (colors[elements[index].x] + colors[elements[index].y]) * 0.5f; - } - } - - } - } -} -#endif - diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstChainRopeRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstChainRopeRenderSystem.cs.meta deleted file mode 100644 index ce727dba7..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstChainRopeRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3c63ccd17bfc14b40a403c1c9a0be2c0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstExtrudedRopeRenderSystem.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstExtrudedRopeRenderSystem.cs deleted file mode 100644 index c133f40bb..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstExtrudedRopeRenderSystem.cs +++ /dev/null @@ -1,215 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using UnityEngine.Rendering; - -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; - -namespace Obi -{ - public class BurstExtrudedRopeRenderSystem : ObiExtrudedRopeRenderSystem - { - public BurstExtrudedRopeRenderSystem(ObiSolver solver) : base(solver) - { - } - - public override void Setup() - { - base.Setup(); - - // Initialize each batch: - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Initialize(layout, false); - } - - public override void Render() - { - if (pathSmootherSystem == null) - return; - - using (m_RenderMarker.Auto()) - { - var handles = new NativeArray(batchList.Count, Allocator.Temp); - - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - - var meshJob = new BuildExtrudedMesh - { - pathSmootherIndices = pathSmootherIndices.AsNativeArray(), - chunkOffsets = pathSmootherSystem.chunkOffsets.AsNativeArray(), - - frames = pathSmootherSystem.smoothFrames.AsNativeArray(), - frameOffsets = pathSmootherSystem.smoothFrameOffsets.AsNativeArray(), - frameCounts = pathSmootherSystem.smoothFrameCounts.AsNativeArray(), - - sectionData = sectionData.AsNativeArray(), - sectionOffsets = sectionOffsets.AsNativeArray(), - sectionIndices = sectionIndices.AsNativeArray(), - - vertexOffsets = vertexOffsets.AsNativeArray(), - triangleOffsets = triangleOffsets.AsNativeArray(), - triangleCounts = triangleCounts.AsNativeArray(), - - pathData = pathSmootherSystem.pathData.AsNativeArray(), - rendererData = rendererData.AsNativeArray(), - - vertices = batch.vertices, - tris = batch.triangles, - - firstRenderer = batch.firstRenderer - }; - handles[i] = meshJob.Schedule(batch.rendererCount, 1); - } - - JobHandle.CombineDependencies(handles).Complete(); - handles.Dispose(); - - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - - batch.mesh.SetVertexBufferData(batch.vertices, 0, 0, batch.vertexCount, 0, MeshUpdateFlags.DontValidateIndices | MeshUpdateFlags.DontRecalculateBounds); - batch.mesh.SetIndexBufferData(batch.triangles, 0, 0, batch.triangleCount * 3, MeshUpdateFlags.DontValidateIndices | MeshUpdateFlags.DontRecalculateBounds); - - var rp = batch.renderParams; - rp.worldBounds = m_Solver.bounds; - - Graphics.RenderMesh(rp, batch.mesh, 0, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); - } - } - } - - [BurstCompile] - struct BuildExtrudedMesh : IJobParallelFor - { - [ReadOnly] public NativeArray pathSmootherIndices; - [ReadOnly] public NativeArray chunkOffsets; - - [ReadOnly] public NativeArray frames; - [ReadOnly] public NativeArray frameOffsets; - [ReadOnly] public NativeArray frameCounts; - - [ReadOnly] public NativeArray sectionData; - [ReadOnly] public NativeArray sectionOffsets; - [ReadOnly] public NativeArray sectionIndices; - - [ReadOnly] public NativeArray vertexOffsets; - [ReadOnly] public NativeArray triangleOffsets; - [ReadOnly] public NativeArray triangleCounts; - - [ReadOnly] public NativeArray rendererData; - [ReadOnly] public NativeArray pathData; - - [NativeDisableParallelForRestriction] public NativeArray vertices; - [NativeDisableParallelForRestriction] public NativeArray tris; - - [ReadOnly] public int firstRenderer; - - public void Execute(int u) - { - int k = firstRenderer + u; - int s = pathSmootherIndices[k]; - - float3 vertex = float3.zero; - float3 normal = float3.zero; - float4 texTangent = float4.zero; - - int tri = 0; - int sectionIndex = 0; - int sectionStart = sectionOffsets[sectionIndices[k]]; - int sectionSegments = (sectionOffsets[sectionIndices[k] + 1] - sectionStart) - 1; - int verticesPerSection = sectionSegments + 1; // the last vertex in each section must be duplicated, due to uv wraparound. - - float smoothLength = 0; - for (int i = chunkOffsets[s]; i < chunkOffsets[s + 1]; ++i) - smoothLength += pathData[i].smoothLength; - - float vCoord = -rendererData[k].uvScale.y * pathData[chunkOffsets[s]].restLength * rendererData[k].uvAnchor; - float actualToRestLengthRatio = smoothLength / pathData[chunkOffsets[s]].restLength; - - int firstVertex = vertexOffsets[k]; - int firstTriangle = triangleOffsets[k]; - - // clear out triangle indices for this rope: - for (int i = firstTriangle; i < firstTriangle + triangleCounts[k]; ++i) - { - int offset = i * 3; - tris[offset] = 0; - tris[offset+1] = 0; - tris[offset+2] = 0; - } - - // for each chunk in the rope: - for (int i = chunkOffsets[s]; i < chunkOffsets[s + 1]; ++i) - { - int firstFrame = frameOffsets[i]; - int frameCount = frameCounts[i]; - - for (int f = 0; f < frameCount; ++f) - { - // Calculate previous and next curve indices: - int prevIndex = firstFrame + math.max(f - 1, 0); - int index = firstFrame + f; - - // advance v texcoord: - vCoord += rendererData[k].uvScale.y * (math.distance(frames[index].position, frames[prevIndex].position) / - (rendererData[k].normalizeV == 1 ? smoothLength : actualToRestLengthRatio)); - - // calculate section thickness and scale the basis vectors by it: - float sectionThickness = frames[index].thickness * rendererData[k].thicknessScale; - - // Loop around each segment: - int nextSectionIndex = sectionIndex + 1; - for (int j = 0; j <= sectionSegments; ++j) - { - // make just one copy of the section vertex: - float2 sectionVertex = sectionData[sectionStart + j]; - - // calculate normal using section vertex, curve normal and binormal: - normal.x = (sectionVertex.x * frames[index].normal.x + sectionVertex.y * frames[index].binormal.x) * sectionThickness; - normal.y = (sectionVertex.x * frames[index].normal.y + sectionVertex.y * frames[index].binormal.y) * sectionThickness; - normal.z = (sectionVertex.x * frames[index].normal.z + sectionVertex.y * frames[index].binormal.z) * sectionThickness; - - // offset curve position by normal: - vertex.x = frames[index].position.x + normal.x; - vertex.y = frames[index].position.y + normal.y; - vertex.z = frames[index].position.z + normal.z; - - // cross(normal, curve tangent) - texTangent.xyz = math.cross(normal, frames[index].tangent); - texTangent.w = -1; - - vertices[firstVertex + sectionIndex * verticesPerSection + j] = new ProceduralRopeVertex - { - pos = vertex, - normal = normal, - tangent = texTangent, - color = frames[index].color, - uv = new float2(j / (float)sectionSegments * rendererData[k].uvScale.x, vCoord) - }; - - if (j < sectionSegments && f < frameCount - 1) - { - int offset = firstTriangle * 3; - tris[offset + tri++] = (firstVertex + sectionIndex * verticesPerSection + j); - tris[offset + tri++] = (firstVertex + nextSectionIndex * verticesPerSection + j); - tris[offset + tri++] = (firstVertex + sectionIndex * verticesPerSection + (j + 1)); - - tris[offset + tri++] = (firstVertex + sectionIndex * verticesPerSection + (j + 1)); - tris[offset + tri++] = (firstVertex + nextSectionIndex * verticesPerSection + j); - tris[offset + tri++] = (firstVertex + nextSectionIndex * verticesPerSection + (j + 1)); - } - } - sectionIndex++; - } - } - } - } - } -} -#endif - diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstExtrudedRopeRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstExtrudedRopeRenderSystem.cs.meta deleted file mode 100644 index 0fced1ff8..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstExtrudedRopeRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 10b89fddf68724bc9ad3305774d86ee1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstLineRopeRenderSystem.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstLineRopeRenderSystem.cs deleted file mode 100644 index 80dbaf029..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstLineRopeRenderSystem.cs +++ /dev/null @@ -1,215 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using UnityEngine.Rendering; - -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; - -namespace Obi -{ - public class BurstLineRopeRenderSystem : ObiLineRopeRenderSystem - { - public BurstLineRopeRenderSystem(ObiSolver solver) : base(solver) - { - } - - public override void Setup() - { - base.Setup(); - - // Initialize each batch: - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Initialize(layout, false); - } - - public override void Render(){} - - public override void RenderFromCamera(Camera camera) - { - if (pathSmootherSystem == null) - return; - - using (m_RenderMarker.Auto()) - { - var handles = new NativeArray(batchList.Count, Allocator.Temp); - - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - - var meshJob = new BuildLineMesh - { - pathSmootherIndices = pathSmootherIndices.AsNativeArray(), - chunkOffsets = pathSmootherSystem.chunkOffsets.AsNativeArray(), - - frames = pathSmootherSystem.smoothFrames.AsNativeArray(), - frameOffsets = pathSmootherSystem.smoothFrameOffsets.AsNativeArray(), - frameCounts = pathSmootherSystem.smoothFrameCounts.AsNativeArray(), - - vertexOffsets = vertexOffsets.AsNativeArray(), - triangleOffsets = triangleOffsets.AsNativeArray(), - triangleCounts = triangleCounts.AsNativeArray(), - - pathData = pathSmootherSystem.pathData.AsNativeArray(), - rendererData = rendererData.AsNativeArray(), - - vertices = batch.vertices, - tris = batch.triangles, - - firstRenderer = batch.firstRenderer, - localSpaceCamera = m_Solver.transform.InverseTransformPoint(camera.transform.position) - }; - handles[i] = meshJob.Schedule(batch.rendererCount, 1); - } - - JobHandle.CombineDependencies(handles).Complete(); - handles.Dispose(); - - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - - batch.mesh.SetVertexBufferData(batch.vertices, 0, 0, batch.vertexCount, 0, MeshUpdateFlags.DontValidateIndices | MeshUpdateFlags.DontRecalculateBounds); - batch.mesh.SetIndexBufferData(batch.triangles, 0, 0, batch.triangleCount * 3, MeshUpdateFlags.DontValidateIndices | MeshUpdateFlags.DontRecalculateBounds); - - var rp = batch.renderParams; - rp.worldBounds = m_Solver.bounds; - - Graphics.RenderMesh(rp, batch.mesh, 0, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); - } - } - } - - [BurstCompile] - struct BuildLineMesh : IJobParallelFor - { - [ReadOnly] public NativeArray pathSmootherIndices; - [ReadOnly] public NativeArray chunkOffsets; - - [ReadOnly] public NativeArray frames; - [ReadOnly] public NativeArray frameOffsets; - [ReadOnly] public NativeArray frameCounts; - - [ReadOnly] public NativeArray vertexOffsets; - [ReadOnly] public NativeArray triangleOffsets; - [ReadOnly] public NativeArray triangleCounts; - - [ReadOnly] public NativeArray rendererData; - [ReadOnly] public NativeArray pathData; - - [NativeDisableParallelForRestriction] public NativeArray vertices; - [NativeDisableParallelForRestriction] public NativeArray tris; - - [ReadOnly] public int firstRenderer; - - [ReadOnly] public float3 localSpaceCamera; - - public void Execute(int u) - { - int k = firstRenderer + u; - int s = pathSmootherIndices[k]; - - float3 vertex = float3.zero; - float3 normal = float3.zero; - float4 bitangent = float4.zero; - - int tri = 0; - int sectionIndex = 0; - int firstVertex = vertexOffsets[k]; - int firstTriangle = triangleOffsets[k]; - - float smoothLength = 0; - for (int i = chunkOffsets[s]; i < chunkOffsets[s + 1]; ++i) - smoothLength += pathData[i].smoothLength; - - float vCoord = -rendererData[k].uvScale.y * pathData[chunkOffsets[s]].restLength * rendererData[k].uvAnchor; - float actualToRestLengthRatio = smoothLength / pathData[chunkOffsets[s]].restLength; - - // clear out triangle indices for this rope: - for (int i = firstTriangle; i < firstTriangle + triangleCounts[k]; ++i) - { - int offset = i * 3; - tris[offset] = 0; - tris[offset+1] = 0; - tris[offset+2] = 0; - } - - // for each chunk in the rope: - for (int i = chunkOffsets[s]; i < chunkOffsets[s + 1]; ++i) - { - int firstFrame = frameOffsets[i]; - int frameCount = frameCounts[i]; - - for (int f = 0; f < frameCount; ++f) - { - // Calculate previous and next curve indices: - int prevIndex = firstFrame + math.max(f - 1, 0); - int index = firstFrame + f; - - // advance v texcoord: - vCoord += rendererData[k].uvScale.y * (math.distance(frames[index].position, frames[prevIndex].position) / - (rendererData[k].normalizeV == 1 ? smoothLength : actualToRestLengthRatio)); - - // calculate section thickness and scale the basis vectors by it: - float sectionThickness = frames[index].thickness * rendererData[k].thicknessScale; - - normal.x = frames[index].position.x - localSpaceCamera.x; - normal.y = frames[index].position.y - localSpaceCamera.y; - normal.z = frames[index].position.z - localSpaceCamera.z; - normal = math.normalize(normal); - - bitangent.x = -(normal.y * frames[index].tangent.z - normal.z * frames[index].tangent.y); - bitangent.y = -(normal.z * frames[index].tangent.x - normal.x * frames[index].tangent.z); - bitangent.z = -(normal.x * frames[index].tangent.y - normal.y * frames[index].tangent.x); - bitangent.xyz = math.normalize(bitangent.xyz); - bitangent.w = 1; - - vertex.x = frames[index].position.x - bitangent.x * sectionThickness; - vertex.y = frames[index].position.y - bitangent.y * sectionThickness; - vertex.z = frames[index].position.z - bitangent.z * sectionThickness; - - vertices[firstVertex + sectionIndex * 2] = new ProceduralRopeVertex - { - pos = vertex, - normal = -normal, - tangent = bitangent, - color = frames[index].color, - uv = new float2(0, vCoord) - }; - - vertex.x = frames[index].position.x + bitangent.x * sectionThickness; - vertex.y = frames[index].position.y + bitangent.y * sectionThickness; - vertex.z = frames[index].position.z + bitangent.z * sectionThickness; - - vertices[firstVertex + sectionIndex * 2 + 1] = new ProceduralRopeVertex - { - pos = vertex, - normal = -normal, - tangent = bitangent, - color = frames[index].color, - uv = new float2(1, vCoord) - }; - - if (f < frameCount - 1) - { - int offset = firstTriangle * 3; - tris[offset + tri++] = firstVertex + sectionIndex * 2; - tris[offset + tri++] = firstVertex + (sectionIndex + 1) * 2; - tris[offset + tri++] = firstVertex + sectionIndex * 2 + 1; - - tris[offset + tri++] = firstVertex + sectionIndex * 2 + 1; - tris[offset + tri++] = firstVertex + (sectionIndex + 1) * 2; - tris[offset + tri++] = firstVertex + (sectionIndex + 1) * 2 + 1; - } - - sectionIndex++; - } - } - } - } - } -} -#endif - diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstLineRopeRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstLineRopeRenderSystem.cs.meta deleted file mode 100644 index 7ab2fc4ea..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstLineRopeRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5f950cc46a13e4273856e2ec96c59eb9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstMeshRopeRenderSystem.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstMeshRopeRenderSystem.cs deleted file mode 100644 index 3a78845b1..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstMeshRopeRenderSystem.cs +++ /dev/null @@ -1,272 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; - -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; -using UnityEngine.Rendering; - -namespace Obi -{ - public class BurstMeshRopeRenderSystem : ObiMeshRopeRenderSystem - { - public BurstMeshRopeRenderSystem(ObiSolver solver) : base(solver) - { - } - - protected override void CloseBatches() - { - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Initialize(sortedRenderers, meshData, meshIndices, layout, false); - - base.CloseBatches(); - } - - public override void Render() - { - if (pathSmootherSystem == null) - return; - - using (m_RenderMarker.Auto()) - { - var handles = new NativeArray(batchList.Count, Allocator.Temp); - - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - - var meshJob = new BuildRopeMeshJob - { - chunkOffsets = pathSmootherSystem.chunkOffsets.AsNativeArray(), - pathSmootherIndices = pathSmootherIndices.AsNativeArray(), - - frames = pathSmootherSystem.smoothFrames.AsNativeArray(), - frameOffsets = pathSmootherSystem.smoothFrameOffsets.AsNativeArray(), - frameCounts = pathSmootherSystem.smoothFrameCounts.AsNativeArray(), - - vertexOffsets = vertexOffsets.AsNativeArray(), - - meshIndices = meshIndices.AsNativeArray(), - meshData = meshData.meshData.AsNativeArray(), - - rendererData = rendererData.AsNativeArray(), - pathData = pathSmootherSystem.pathData.AsNativeArray(), - - sortedIndices = sortedIndices.AsNativeArray(), - sortedOffsets = sortedOffsets.AsNativeArray(), - - positions = meshData.restPositions.AsNativeArray(), - normals = meshData.restNormals.AsNativeArray(), - tangents = meshData.restTangents.AsNativeArray(), - colors = meshData.restColors.AsNativeArray(), - - vertices = batch.dynamicVertexData.AsNativeArray(), - - firstRenderer = batch.firstRenderer - - }; - handles[i] = meshJob.Schedule(batch.rendererCount, 1); - } - - JobHandle.CombineDependencies(handles).Complete(); - handles.Dispose(); - - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - - batch.mesh.SetVertexBufferData(batch.dynamicVertexData.AsNativeArray(), 0, 0, batch.vertexCount, 0, MeshUpdateFlags.DontValidateIndices | MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontResetBoneBounds | MeshUpdateFlags.DontNotifyMeshUsers); - - var rp = batch.renderParams; - rp.worldBounds = m_Solver.bounds; - - for (int m = 0; m < batch.materials.Length; ++m) - { - rp.material = batch.materials[m]; - Graphics.RenderMesh(rp, batch.mesh, m, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); - - // Unity bug: Graphics.RenderMesh consistently crashes when existing play mode (seems fixed in 2021.3.4f1) - // https://issuetracker.unity3d.com/issues/the-editor-crashes-on-exit-when-using-graphics-dot-rendermesh - //renderParams.material = batch.materials[m]; - //renderParams.camera = null; - //Graphics.RenderMesh(renderParams, batch.mesh, m, m_Solver.transform.localToWorldMatrix); - } - } - } - } - - [BurstCompile] - struct BuildRopeMeshJob : IJobParallelFor - { - [ReadOnly] public NativeArray pathSmootherIndices; - [ReadOnly] public NativeArray chunkOffsets; - [ReadOnly] public NativeArray frames; - [ReadOnly] public NativeArray frameOffsets; - [ReadOnly] public NativeArray frameCounts; - - [ReadOnly] public NativeArray vertexOffsets; - - [ReadOnly] public NativeArray meshIndices; - [ReadOnly] public NativeArray meshData; - - [ReadOnly] public NativeArray rendererData; - [ReadOnly] public NativeArray pathData; - - [ReadOnly] public NativeArray sortedIndices; - [ReadOnly] public NativeArray sortedOffsets; - - [ReadOnly] public NativeArray positions; - [ReadOnly] public NativeArray normals; - [ReadOnly] public NativeArray tangents; - [ReadOnly] public NativeArray colors; - - [NativeDisableParallelForRestriction] public NativeArray vertices; - - [ReadOnly] public int firstRenderer; - - public void Execute(int i) - { - int rendererIndex = firstRenderer + i; - int pathIndex = pathSmootherIndices[rendererIndex]; - var renderer = rendererData[rendererIndex]; - - // get mesh data: - var mesh = meshData[meshIndices[rendererIndex]]; - var sortedOffset = sortedOffsets[rendererIndex]; - - // get index of first output vertex: - int firstOutputVertex = vertexOffsets[rendererIndex]; - - // get index of first chunk, ignore others (no support for tearing): - int chunkIndex = chunkOffsets[pathIndex]; - - // get first frame and frame count: - int firstFrame = frameOffsets[chunkIndex]; - int lastFrame = firstFrame + frameCounts[chunkIndex] - 1; - - // get mesh deform axis: - int axis = (int)renderer.axis; - - // initialize scale vector: - float3 actualScale = (Vector3)renderer.scale; - - // calculate stretch ratio: - float stretchRatio = renderer.stretchWithRope == 1 ? pathData[chunkIndex].smoothLength / pathData[chunkIndex].restLength : 1; - - // squashing factor, makes mesh thinner when stretched and thicker when compresssed. - float squashing = math.clamp(1 + renderer.volumeScaling * (1 / math.max(stretchRatio, 0.01f) - 1), 0.01f, 2); - - // calculate scale along swept axis so that the mesh spans the entire lenght of the rope if required. - if (renderer.spanEntireLength == 1) - { - float totalMeshLength = renderer.meshSizeAlongAxis * renderer.instances; - float totalSpacing = renderer.instanceSpacing * (renderer.instances - 1); - actualScale[axis] = pathData[chunkIndex].restLength / (totalMeshLength + totalSpacing); - } - - // adjust axis lenght by stretch ratio: - actualScale[axis] *= stretchRatio; - - // init loop variables: - float lengthAlongAxis = renderer.offset; - int index = firstFrame; - int nextIndex = firstFrame + 1; - int prevIndex = firstFrame; - float nextMagnitude = math.distance(frames[index].position, frames[nextIndex].position); - float prevMagnitude = nextMagnitude; - - for (int k = 0; k < renderer.instances; ++k) - { - for (int j = 0; j < mesh.vertexCount; ++j) - { - int currVIndex = mesh.firstVertex + sortedIndices[sortedOffset + j]; - int prevVIndex = mesh.firstVertex + sortedIndices[sortedOffset + math.max(0,j - 1)]; - - // calculate how much we've advanced in the sort axis since the last vertex: - lengthAlongAxis += (positions[currVIndex][axis] - positions[prevVIndex][axis]) * actualScale[axis]; - - // check if we have moved to a new section of the curve: - BurstPathFrame frame; - if (lengthAlongAxis < 0) - { - while (-lengthAlongAxis > prevMagnitude && index > firstFrame) - { - lengthAlongAxis += prevMagnitude; - index = math.max(index - 1, firstFrame); - nextIndex = math.min(index + 1, lastFrame); - prevIndex = math.max(index - 1, firstFrame); - nextMagnitude = math.distance(frames[index].position, frames[nextIndex].position); - prevMagnitude = math.distance(frames[index].position, frames[prevIndex].position); - } - - var offset = float3.zero; - if (index == prevIndex) - { - offset = frames[index].position - frames[nextIndex].position; - prevMagnitude = math.length(offset); - } - - frame = InterpolateFrames(frames[index], frames[prevIndex], offset, -lengthAlongAxis / prevMagnitude); - } - else - { - while (lengthAlongAxis > nextMagnitude && index < lastFrame) - { - lengthAlongAxis -= nextMagnitude; - index = math.min(index + 1, lastFrame); - nextIndex = math.min(index + 1, lastFrame); - prevIndex = math.max(index - 1, firstFrame); - nextMagnitude = math.distance(frames[index].position, frames[nextIndex].position); - prevMagnitude = math.distance(frames[index].position, frames[prevIndex].position); - } - - var offset = float3.zero; - if (index == nextIndex) - { - offset = frames[index].position - frames[prevIndex].position; - nextMagnitude = math.length(offset); - } - - frame = InterpolateFrames(frames[index], frames[nextIndex], offset, lengthAlongAxis / nextMagnitude); - } - - // update basis matrix: - var basis = frame.ToMatrix(axis); - - // calculate vertex offset from curve: - float3 offsetFromCurve = positions[currVIndex] * actualScale * frame.thickness * squashing; - offsetFromCurve[axis] = 0; - - // write modified vertex data: - vertices[firstOutputVertex + sortedIndices[sortedOffset + j]] = new RopeMeshVertex - { - pos = frame.position + math.mul(basis, offsetFromCurve), - normal = math.mul(basis, normals[currVIndex]), - tangent = new float4(math.mul(basis, tangents[currVIndex].xyz), tangents[currVIndex].w), - color = colors[currVIndex] * frame.color, - }; - } - - firstOutputVertex += mesh.vertexCount; - lengthAlongAxis += renderer.instanceSpacing * actualScale[axis]; - } - } - - BurstPathFrame InterpolateFrames(BurstPathFrame a, BurstPathFrame b, float3 bOffset, float t) - { - // this offset is used to displace a copy of the first and last frames of the path, - // to ensure meshes extrude correctly prior to the first or past the last frame. - b.position += bOffset; - var interp = (1 - t) * a + t * b; - - // (no need to renormalize tangent, since offsetFromCurve[axis] = 0) - interp.normal = math.normalize(interp.normal); - interp.binormal = math.normalize(interp.binormal); - return interp; - } - } - } -} -#endif - diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstMeshRopeRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstMeshRopeRenderSystem.cs.meta deleted file mode 100644 index a4927d494..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstMeshRopeRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1578f081848d045dba76cd147f835e7c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathFrame.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathFrame.cs deleted file mode 100644 index cbf52794a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathFrame.cs +++ /dev/null @@ -1,170 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using System.Runtime.InteropServices; -using UnityEngine; -using Unity.Mathematics; - -namespace Obi -{ - [StructLayout(LayoutKind.Sequential)] - public struct BurstPathFrame - { - public enum Axis - { - X = 0, - Y = 1, - Z = 2 - } - - public float3 position; - public float3 tangent; - public float3 normal; - public float3 binormal; - public float4 color; - public float thickness; - - public BurstPathFrame(float3 position, float3 tangent, float3 normal, float3 binormal, float4 color, float thickness) - { - this.position = position; - this.normal = normal; - this.tangent = tangent; - this.binormal = binormal; - this.color = color; - this.thickness = thickness; - } - - public void Reset() - { - position = float3.zero; - tangent = new float3(0, 0, 1); - normal = new float3(0, 1, 0); - binormal = new float3(1, 0, 0); - color = new float4(1, 1, 1, 1); - thickness = 0; - } - - public static BurstPathFrame operator +(BurstPathFrame c1, BurstPathFrame c2) - { - return new BurstPathFrame(c1.position + c2.position, c1.tangent + c2.tangent, c1.normal + c2.normal, c1.binormal + c2.binormal, c1.color + c2.color, c1.thickness + c2.thickness); - } - - public static BurstPathFrame operator *(float f, BurstPathFrame c) - { - return new BurstPathFrame(c.position * f, c.tangent * f, c.normal * f, c.binormal * f, c.color * f, c.thickness * f); - } - - public static void WeightedSum(float w1, float w2, float w3, in BurstPathFrame c1, in BurstPathFrame c2, in BurstPathFrame c3, ref BurstPathFrame sum) - { - sum.position.x = c1.position.x * w1 + c2.position.x * w2 + c3.position.x * w3; - sum.position.y = c1.position.y * w1 + c2.position.y * w2 + c3.position.y * w3; - sum.position.z = c1.position.z * w1 + c2.position.z * w2 + c3.position.z * w3; - - sum.tangent.x = c1.tangent.x * w1 + c2.tangent.x * w2 + c3.tangent.x * w3; - sum.tangent.y = c1.tangent.y * w1 + c2.tangent.y * w2 + c3.tangent.y * w3; - sum.tangent.z = c1.tangent.z * w1 + c2.tangent.z * w2 + c3.tangent.z * w3; - - sum.normal.x = c1.normal.x * w1 + c2.normal.x * w2 + c3.normal.x * w3; - sum.normal.y = c1.normal.y * w1 + c2.normal.y * w2 + c3.normal.y * w3; - sum.normal.z = c1.normal.z * w1 + c2.normal.z * w2 + c3.normal.z * w3; - - sum.binormal.x = c1.binormal.x * w1 + c2.binormal.x * w2 + c3.binormal.x * w3; - sum.binormal.y = c1.binormal.y * w1 + c2.binormal.y * w2 + c3.binormal.y * w3; - sum.binormal.z = c1.binormal.z * w1 + c2.binormal.z * w2 + c3.binormal.z * w3; - - sum.color.x = c1.color.x * w1 + c2.color.x * w2 + c3.color.x * w3; - sum.color.y = c1.color.y * w1 + c2.color.y * w2 + c3.color.y * w3; - sum.color.z = c1.color.z * w1 + c2.color.z * w2 + c3.color.z * w3; - sum.color.w = c1.color.w * w1 + c2.color.w * w2 + c3.color.w * w3; - - sum.thickness = c1.thickness * w1 + c2.thickness * w2 + c3.thickness * w3; - } - - public void SetTwist(float twist) - { - quaternion twistQ = quaternion.AxisAngle(tangent, math.radians(twist)); - normal = math.mul(twistQ, normal); - binormal = math.mul(twistQ, binormal); - } - - public static quaternion FromToRotation(float3 aFrom, float3 aTo) - { - float3 axis = math.cross(aFrom, aTo); - float angle = math.acos(math.clamp(math.dot(math.normalize(aFrom), math.normalize(aTo)), -1f, 1f)); - return quaternion.AxisAngle(math.normalize(axis), angle); - } - - public void SetTwistAndTangent(float twist, float3 tangent) - { - this.tangent = tangent; - normal = math.normalize(new float3(tangent.y, tangent.x, 0)); - binormal = math.cross(normal, tangent); - - quaternion twistQ = quaternion.AxisAngle(tangent, math.radians(twist)); - normal = math.mul(twistQ, normal); - binormal = math.mul(twistQ, binormal); - } - - public void Transport(in BurstPathFrame frame, float twist) - { - // Calculate delta rotation: - quaternion rotQ = Quaternion.FromToRotation(tangent, frame.tangent); - quaternion twistQ = quaternion.AxisAngle(frame.tangent, math.radians(twist)); - quaternion finalQ = math.mul(twistQ, rotQ); - - // Rotate previous frame axes to obtain the new ones: - normal = math.mul(finalQ, normal); - binormal = math.mul(finalQ, binormal); - tangent = frame.tangent; - position = frame.position; - thickness = frame.thickness; - color = frame.color; - } - - public void Transport(float3 newPosition, float3 newTangent, float twist) - { - // Calculate delta rotation: - quaternion rotQ = Quaternion.FromToRotation(tangent, newTangent); - quaternion twistQ = quaternion.AxisAngle(newTangent, math.radians(twist)); - quaternion finalQ = math.mul(twistQ, rotQ); - - // Rotate previous frame axes to obtain the new ones: - normal = math.mul(finalQ, normal); - binormal = math.mul(finalQ, binormal); - tangent = newTangent; - position = newPosition; - - } - - // Transport, hinting the normal. - public void Transport(float3 newPosition, float3 newTangent, float3 newNormal, float twist) - { - normal = math.mul(quaternion.AxisAngle(newTangent, math.radians(twist)), newNormal); - tangent = newTangent; - binormal = math.cross(normal, tangent); - position = newPosition; - } - - public float3x3 ToMatrix(int mainAxis) - { - float3x3 basis = new float3x3(); - - int xo = (mainAxis) % 3; - int yo = (mainAxis + 1) % 3; - int zo = (mainAxis + 2) % 3; - - basis[xo] = tangent; - basis[yo] = binormal; - basis[zo] = normal; - - return basis; - } - - public void DebugDraw(float size) - { - Debug.DrawRay(position, binormal * size, Color.red); - Debug.DrawRay(position, normal * size, Color.green); - Debug.DrawRay(position, tangent * size, Color.blue); - } - } -} -#endif - diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathFrame.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathFrame.cs.meta deleted file mode 100644 index 284880b92..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathFrame.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4827bd4bd4feb46bfbe458174871b8ee -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathSmootherRenderSystem.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathSmootherRenderSystem.cs deleted file mode 100644 index 3d1136240..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathSmootherRenderSystem.cs +++ /dev/null @@ -1,63 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using Unity.Jobs; -using Unity.Mathematics; - -namespace Obi -{ - public class BurstPathSmootherRenderSystem : ObiPathSmootherRenderSystem - { - public BurstPathSmootherRenderSystem(ObiSolver solver) : base(solver) - { - } - - public override void Render() - { - using (m_RenderMarker.Auto()) - { - base.Render(); - - // generate raw frames using parallel transport - var parallelTransportJob = new ParallelTransportJob - { - pathFrames = rawFrames.AsNativeArray(), - frameOffsets = rawFrameOffsets.AsNativeArray(), - particleIndices = particleIndices.AsNativeArray(), - renderablePositions = m_Solver.renderablePositions.AsNativeArray(), - renderableOrientations = m_Solver.renderableOrientations.AsNativeArray(), - principalRadii = m_Solver.principalRadii.AsNativeArray(), - colors = m_Solver.colors.AsNativeArray(), - pathData = pathData.AsNativeArray() - }; - - var handle = parallelTransportJob.Schedule(rawFrameOffsets.count, 4); - - // throw away unneeded frames using decimation - var decimationJob = new DecimateChunksJob - { - inputFrames = rawFrames.AsNativeArray(), - inputFrameOffsets = rawFrameOffsets.AsNativeArray(), - outputFrameCounts = decimatedFrameCounts.AsNativeArray(), - pathData = pathData.AsNativeArray() - }; - - handle = decimationJob.Schedule(rawFrameOffsets.count, 4, handle); - - // smooth chunks: - var chaikinJob = new ChaikinSmoothChunksJob() - { - inputFrames = rawFrames.AsNativeArray(), - inputFrameOffsets = rawFrameOffsets.AsNativeArray(), - inputFrameCounts = decimatedFrameCounts.AsNativeArray(), - outputFrames = smoothFrames.AsNativeArray(), - outputFrameOffsets = smoothFrameOffsets.AsNativeArray(), - outputFrameCounts = smoothFrameCounts.AsNativeArray(), - pathData = pathData.AsNativeArray() - }; - - chaikinJob.Schedule(rawFrameOffsets.count, 4, handle).Complete(); - } - } - } -} -#endif - diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathSmootherRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathSmootherRenderSystem.cs.meta deleted file mode 100644 index 7cf39ab54..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/BurstPathSmootherRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: be61f37ff31ff43ebb9bc8a55bd3edc7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ChaikinSmoothChunksJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ChaikinSmoothChunksJob.cs deleted file mode 100644 index 9a7587f81..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ChaikinSmoothChunksJob.cs +++ /dev/null @@ -1,93 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using Unity.Burst; -using Unity.Collections; -using Unity.Collections.LowLevel.Unsafe; -using Unity.Jobs; -using Unity.Mathematics; - -namespace Obi -{ - [BurstCompile] - struct ChaikinSmoothChunksJob : IJobParallelFor - { - [NativeDisableParallelForRestriction] public NativeArray inputFrames; - [ReadOnly] public NativeArray inputFrameOffsets; - [ReadOnly] public NativeArray inputFrameCounts; - - [NativeDisableParallelForRestriction] public NativeArray outputFrames; - [ReadOnly] public NativeArray outputFrameOffsets; - [NativeDisableParallelForRestriction] public NativeArray outputFrameCounts; - - [NativeDisableParallelForRestriction] public NativeArray pathData; - - public void Execute(int i) - { - int firstInputIndex = i > 0 ? inputFrameOffsets[i - 1] : 0; - int inputFrameCount = inputFrameCounts[i]; - - int firstOutputIndex = outputFrameOffsets[i]; - - int k = (int)pathData[i].smoothing; - - // No work to do. just copy the input to the output: - if (k == 0) - { - outputFrameCounts[i] = inputFrameCount; - for (int j = 0; j < inputFrameCount; ++j) - outputFrames[firstOutputIndex + j] = inputFrames[firstInputIndex + j]; - } - else - { - // precalculate some quantities: - int pCount = (int)math.pow(2, k); - int n0 = inputFrameCount - 1; - float twoRaisedToMinusKPlus1 = math.pow(2, -(k + 1)); - float twoRaisedToMinusK = math.pow(2, -k); - float twoRaisedToMinus2K = math.pow(2, -2 * k); - float twoRaisedToMinus2KMinus1 = math.pow(2, -2 * k - 1); - - outputFrameCounts[i] = (inputFrameCount - 2) * pCount + 2; - - // calculate initial curve points: - outputFrames[firstOutputIndex] = (0.5f + twoRaisedToMinusKPlus1) * inputFrames[firstInputIndex] + (0.5f - twoRaisedToMinusKPlus1) * inputFrames[firstInputIndex + 1]; - outputFrames[firstOutputIndex + pCount * n0 - pCount + 1] = (0.5f - twoRaisedToMinusKPlus1) * inputFrames[firstInputIndex + n0 - 1] + (0.5f + twoRaisedToMinusKPlus1) * inputFrames[firstInputIndex + n0]; - - // calculate internal points: - for (int j = 1; j <= pCount; ++j) - { - // precalculate coefficients: - float F = 0.5f - twoRaisedToMinusKPlus1 - (j - 1) * (twoRaisedToMinusK - j * twoRaisedToMinus2KMinus1); - float G = 0.5f + twoRaisedToMinusKPlus1 + (j - 1) * (twoRaisedToMinusK - j * twoRaisedToMinus2K); - float H = (j - 1) * j * twoRaisedToMinus2KMinus1; - - for (int l = 1; l < n0; ++l) - { - BurstPathFrame.WeightedSum(F, G, H, - in GetElementAsRef(inputFrames, firstInputIndex + l - 1), - in GetElementAsRef(inputFrames, firstInputIndex + l), - in GetElementAsRef(inputFrames, firstInputIndex + l + 1), - ref GetElementAsRef(outputFrames, firstOutputIndex + (l - 1) * pCount + j)); - } - } - - // make first and last curve points coincide with original points: - outputFrames[firstOutputIndex] = inputFrames[firstInputIndex]; - outputFrames[firstOutputIndex + outputFrameCounts[i] - 1] = inputFrames[firstInputIndex + inputFrameCount - 1]; - } - - var data = pathData[i]; - data.smoothLength = 0; - for (int j = firstOutputIndex + 1; j < firstOutputIndex + outputFrameCounts[i]; ++j) - data.smoothLength += math.distance(outputFrames[j - 1].position, outputFrames[j].position); - - pathData[i] = data; - - } - - private static unsafe ref T GetElementAsRef(NativeArray array, int index) where T : unmanaged - { - return ref UnsafeUtility.ArrayElementAsRef(array.GetUnsafePtr(), index); - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ChaikinSmoothChunksJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ChaikinSmoothChunksJob.cs.meta deleted file mode 100644 index 450b2cf70..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ChaikinSmoothChunksJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0b479f3e1bd184363a9259c4d737b611 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/DecimateChunksJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/DecimateChunksJob.cs deleted file mode 100644 index 6129c63b1..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/DecimateChunksJob.cs +++ /dev/null @@ -1,79 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using Unity.Burst; -using Unity.Collections; -using Unity.Jobs; -using Unity.Mathematics; - -namespace Obi -{ - [BurstCompile] - struct DecimateChunksJob : IJobParallelFor - { - [ReadOnly] public NativeArray inputFrameOffsets; - [NativeDisableParallelForRestriction] public NativeArray inputFrames; - [NativeDisableParallelForRestriction] public NativeArray outputFrameCounts; - - [ReadOnly] public NativeArray pathData; - - public void Execute(int i) - { - - int firstInputIndex = i > 0 ? inputFrameOffsets[i - 1] : 0; - int inputFrameCount = inputFrameOffsets[i] - firstInputIndex; - - // no decimation, no work to do, just return: - if (pathData[i].decimation < 0.00001f || inputFrameCount < 3) - { - outputFrameCounts[i] = inputFrameCount; - return; - } - - float scaledThreshold = pathData[i].decimation * pathData[i].decimation * 0.01f; - - int start = 0; - int end = inputFrameCount - 1; - outputFrameCounts[i] = 0; - - while (start < end) - { - // add starting point: - inputFrames[firstInputIndex + outputFrameCounts[i]++] = inputFrames[firstInputIndex + start]; - - var newEnd = end; - - while (true) - { - int maxDistanceIndex = 0; - float maxDistance = 0; - - // find the point that's furthest away from the current segment: - for (int k = start + 1; k < newEnd; k++) - { - var nearest = BurstMath.NearestPointOnEdge(inputFrames[firstInputIndex + start].position, - inputFrames[firstInputIndex + newEnd].position, - inputFrames[firstInputIndex + k].position, out _); - float d = math.lengthsq(nearest - inputFrames[firstInputIndex + k].position); - - if (d > maxDistance) - { - maxDistanceIndex = k; - maxDistance = d; - } - } - - if (maxDistance <= scaledThreshold) - break; - - newEnd = maxDistanceIndex; - } - - start = newEnd; - } - - // add the last point: - inputFrames[firstInputIndex + outputFrameCounts[i]++] = inputFrames[firstInputIndex + end]; - - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/DecimateChunksJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/DecimateChunksJob.cs.meta deleted file mode 100644 index 2fdbac832..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/DecimateChunksJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6e3177e6c6643442db096e939f5d7109 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ParallelTransportJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ParallelTransportJob.cs deleted file mode 100644 index bd8390adf..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ParallelTransportJob.cs +++ /dev/null @@ -1,89 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using Unity.Burst; -using Unity.Collections; -using Unity.Jobs; -using Unity.Mathematics; - -namespace Obi -{ - [BurstCompile] - struct ParallelTransportJob : IJobParallelFor - { - [NativeDisableParallelForRestriction] public NativeArray pathFrames; - [ReadOnly] public NativeArray frameOffsets; - [ReadOnly] public NativeArray particleIndices; - - [ReadOnly] public NativeArray renderablePositions; - [ReadOnly] public NativeArray renderableOrientations; - [ReadOnly] public NativeArray principalRadii; - [ReadOnly] public NativeArray colors; - [ReadOnly] public NativeArray pathData; - - public void Execute(int i) - { - BurstPathFrame nextFrame = new BurstPathFrame(); - BurstPathFrame currFrame = new BurstPathFrame(); - BurstPathFrame prevFrame = new BurstPathFrame(); - - nextFrame.Reset(); - currFrame.Reset(); - prevFrame.Reset(); - - int firstIndex = i > 0 ? frameOffsets[i - 1] : 0; - int frameCount = frameOffsets[i] - firstIndex; - - // initialize current and previous frame: - PathFrameFromParticle(ref currFrame, particleIndices[firstIndex], pathData[i].usesOrientedParticles == 1, false); - prevFrame = currFrame; - - // parallel transport: - for (int m = 1; m <= frameCount; ++m) - { - int index = firstIndex + math.min(m, frameCount - 1); - int pIndex = particleIndices[index]; - - // generate curve frame from particle: - PathFrameFromParticle(ref nextFrame, pIndex, pathData[i].usesOrientedParticles == 1); - - if (pathData[i].usesOrientedParticles == 1) - { - // copy frame directly. - prevFrame = currFrame; - } - else - { - // perform parallel transport, using forward / backward average to calculate tangent. - // if the average is too small, reuse the previous frame tangent. - currFrame.tangent = math.normalizesafe((currFrame.position - prevFrame.position) + - (nextFrame.position - currFrame.position), prevFrame.tangent); - prevFrame.Transport(currFrame, pathData[i].twist); - } - - // advance current frame: - currFrame = nextFrame; - pathFrames[firstIndex + m - 1] = prevFrame; - } - - } - - private void PathFrameFromParticle(ref BurstPathFrame frame, int particleIndex, bool useOrientedParticles, bool interpolateOrientation = false) - { - // Update current frame values from particles: - frame.position = renderablePositions[particleIndex].xyz; - frame.thickness = principalRadii[particleIndex][0]; - frame.color = colors[particleIndex]; - - // Use particle orientation if possible: - if (useOrientedParticles) - { - quaternion current = renderableOrientations[particleIndex]; - quaternion previous = renderableOrientations[math.max(0, particleIndex - 1)]; - float4x4 average = (interpolateOrientation ? math.slerp(current, previous, 0.5f) : current).toMatrix(); - frame.normal = average.c1.xyz; - frame.binormal = average.c0.xyz; - frame.tangent = average.c2.xyz; - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ParallelTransportJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ParallelTransportJob.cs.meta deleted file mode 100644 index b07ca0faf..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Rendering/RopeAndRod/ParallelTransportJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7c4018fb5d53646be9ef6c91f07c7eb6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Solver.meta deleted file mode 100644 index 98abee022..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b6251e5c85abf48ee822588eb5da9aa2 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/ApplyInertialForcesJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/ApplyInertialForcesJob.cs deleted file mode 100644 index ab3d68e66..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/ApplyInertialForcesJob.cs +++ /dev/null @@ -1,58 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; -using System; -using System.Collections; - -namespace Obi -{ - [BurstCompile] - struct 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; - [NativeDisableParallelForRestriction] public NativeArray wind; - - [ReadOnly] public float deltaTime; - [ReadOnly] public float4 ambientWind; - [ReadOnly] public BurstInertialFrame inertialFrame; - [ReadOnly] public bool inertialWind; - - public void Execute(int index) - { - 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; - } - - wind[i] = ambientWind; - - if (inertialWind) - { - float4 wsPos = inertialFrame.frame.TransformPoint(positions[i]); - wind[i] -= inertialFrame.frame.InverseTransformVector(inertialFrame.VelocityAtPoint(wsPos)); - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/ApplyInertialForcesJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/ApplyInertialForcesJob.cs.meta deleted file mode 100644 index ffb53be3c..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/ApplyInertialForcesJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9583eea8cf2234362a59c97e3f908a85 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BoundsReductionJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BoundsReductionJob.cs deleted file mode 100644 index f6ec1072b..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BoundsReductionJob.cs +++ /dev/null @@ -1,87 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; -using System; -using System.Collections; - -namespace Obi -{ - [BurstCompile] - struct 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 + (m >= 0 ? collisionMaterials[m].stickDistance : 0); - - // Expand simplex bounds, using both the particle's original position and its velocity. - // Add collision margin for both fluid neighborhood too (prevents explosions at high pressures due to neighborhood deficiency) - sxBounds.EncapsulateParticle(positions[p], - BurstIntegration.IntegrateLinear(positions[p], velocities[p], dt * parameters.particleCCD), - math.max(solidRadius, fluidMaterials[p].x * 0.5f) + parameters.collisionMargin); - - soBounds.EncapsulateParticle(positions[p], - BurstIntegration.IntegrateLinear(positions[p], velocities[p], dt), - solidRadius); - } - - simplexBounds[i] = sxBounds; - reducedBounds[i] = soBounds; - } - } - - [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/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BoundsReductionJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BoundsReductionJob.cs.meta deleted file mode 100644 index e630da171..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BoundsReductionJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 31e84cee4b2444511a44d1c8ff0c8cd1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BurstSolverImpl.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BurstSolverImpl.cs deleted file mode 100644 index 3a3f2766a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BurstSolverImpl.cs +++ /dev/null @@ -1,339 +0,0 @@ -#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 deadParticles; public NativeArray positions; public NativeArray restPositions; public NativeArray prevPositions; public NativeArray renderablePositions; public NativeArray orientations; public NativeArray restOrientations; public NativeArray prevOrientations; public NativeArray renderableOrientations; public NativeArray velocities; public NativeArray angularVelocities; public NativeArray invMasses; public NativeArray invRotationalMasses; public NativeArray externalForces; public NativeArray externalTorques; public NativeArray wind; public NativeArray positionDeltas; public NativeArray orientationDeltas; public NativeArray positionConstraintCounts; public NativeArray orientationConstraintCounts; public NativeArray colors; public NativeArray collisionMaterials; public NativeArray phases; public NativeArray filters; public NativeArray renderableRadii; public NativeArray principalRadii; public NativeArray normals; private NativeArray tangents; public NativeArray life; public NativeArray fluidData; public NativeArray userData; public NativeArray fluidInterface; public NativeArray fluidMaterials; - public NativeArray fluidMaterials2; - public NativeArray anisotropies; - - // 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); constraints[(int)Oni.ConstraintType.Pinhole] = new BurstPinholeConstraints(this); var c = constraints[(int)Oni.ConstraintType.Collision] as BurstColliderCollisionConstraints; c.CreateConstraintsBatch(); var f = constraints[(int)Oni.ConstraintType.Friction] as BurstColliderFrictionConstraints; f.CreateConstraintsBatch(); } public void Destroy() { for (int i = 0; i < constraints.Length; ++i) if (constraints[i] != null) constraints[i].Dispose(); // Get rid of particle and collider grids: particleGrid.Dispose(); if (colliderGrid != null) colliderGrid.DecreaseReferenceCount(); collisionConstraintBatcher.Dispose(); fluidConstraintBatcher.Dispose(); if (simplexBounds.IsCreated) simplexBounds.Dispose(); if (reducedBounds.IsCreated) reducedBounds.Dispose(); if (tangents.IsCreated) tangents.Dispose(); if (particleBatchData.IsCreated) particleBatchData.Dispose(); if (fluidInteractions.IsCreated) fluidInteractions.Dispose(); if (fluidBatchData.IsCreated) fluidBatchData.Dispose(); if (auxPositions.IsCreated) auxPositions.Dispose(); if (auxVelocities.IsCreated) auxVelocities.Dispose(); if (auxColors.IsCreated) auxColors.Dispose(); if (auxAttributes.IsCreated) auxAttributes.Dispose(); } // Utility function to count scheduled jobs. Call it once per job. // Will JobHandle.ScheduleBatchedJobs once there's a good bunch of scheduled jobs. public void ScheduleBatchedJobsIfNeeded() { if (scheduledJobCounter++ > 16) { scheduledJobCounter = 0; JobHandle.ScheduleBatchedJobs(); } } private void GetOrCreateColliderWorld() { colliderGrid = GameObject.FindObjectOfType(); if (colliderGrid == null) { var world = new GameObject("BurstCollisionWorld", typeof(BurstColliderWorld)); colliderGrid = world.GetComponent(); } } public void InitializeFrame(Vector4 translation, Vector4 scale, Quaternion rotation) { m_InertialFrame = new BurstInertialFrame(translation, scale, rotation); } public void UpdateFrame(Vector4 translation, Vector4 scale, Quaternion rotation, float deltaTime) { m_InertialFrame.Update(translation, scale, rotation, deltaTime); } public IObiJobHandle ApplyFrame(float worldLinearInertiaScale, float worldAngularInertiaScale, float deltaTime) { // inverse linear part: float4x4 linear = float4x4.TRS(float3.zero, inertialFrame.frame.rotation, math.rcp(inertialFrame.frame.scale.xyz)); float4x4 linearInv = math.transpose(linear); // non-inertial frame accelerations: float4 angularVel = math.mul(linearInv, math.mul(float4x4.Scale(inertialFrame.angularVelocity.xyz), linear)).diagonal(); float4 eulerAccel = math.mul(linearInv, math.mul(float4x4.Scale(inertialFrame.angularAcceleration.xyz), linear)).diagonal(); float4 inertialAccel = math.mul(linearInv, inertialFrame.acceleration); var applyInertialForces = new ApplyInertialForcesJob { activeParticles = activeParticles, positions = positions, velocities = velocities, invMasses = invMasses, angularVel = angularVel, inertialAccel = inertialAccel, eulerAccel = eulerAccel, worldLinearInertiaScale = worldLinearInertiaScale, worldAngularInertiaScale = worldAngularInertiaScale, wind = wind, ambientWind = new float4(abstraction.parameters.ambientWind, 0), inertialFrame = inertialFrame, deltaTime = deltaTime, inertialWind = abstraction.windSpace == Space.World }; jobHandle.jobHandle = applyInertialForces.Schedule(activeParticleCount, 64); return jobHandle; } public void SetDeformableTriangles(ObiNativeIntList indices, ObiNativeVector2List uvs) { deformableTriangles = indices.AsNativeArray(); deformableUVs = uvs.AsNativeArray(); } public void SetDeformableEdges(ObiNativeIntList indices) { deformableEdges = indices.AsNativeArray(); } public void SetSimplices(ObiNativeIntList simplices, SimplexCounts counts) { this.simplices = simplices.AsNativeArray(); this.simplexCounts = counts; - - 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; } - - var countRef = abstraction.deadParticles.GetCountReference(Allocator.TempJob); - var lifetimeJob = new UpdateParticleLifetimesJob - { - activeParticles = activeParticles, - life = life, - deadParticles = deadParticles, - deadParticleCount = countRef, - dt = stepTime, - }; - - burstHandle.jobHandle = lifetimeJob.Schedule(activeParticleCount, 64, burstHandle.jobHandle); - burstHandle.jobHandle.Complete(); - - abstraction.deadParticles.count = countRef.Value; - countRef.Dispose(); return burstHandle; } public void GetBounds(ref Vector3 min, ref Vector3 max) - { - // update solver bounds struct: - if (reducedBounds.IsCreated && reducedBounds.Length > 0) - { - solverBounds.min = reducedBounds[0].min; - solverBounds.max = reducedBounds[0].max; - } - - min = solverBounds.min.xyz; - max = solverBounds.max.xyz; - } public int GetConstraintCount(Oni.ConstraintType type) { if ((int)type > 0 && (int)type < constraints.Length) return constraints[(int)type].GetConstraintCount(); return 0; } public void SetParameters(Oni.SolverParameters parameters) { - } public void SetConstraintGroupParameters(Oni.ConstraintType type, ref Oni.ConstraintParameters parameters) { // No need to implement. This backend grabs parameters from the abstraction when it needs them. } public void ParticleCountChanged(ObiSolver solver) { deadParticles = abstraction.deadParticles.AsNativeArray(abstraction.deadParticles.capacity); positions = abstraction.positions.AsNativeArray(); restPositions = abstraction.restPositions.AsNativeArray(); prevPositions = abstraction.prevPositions.AsNativeArray(); renderablePositions = abstraction.renderablePositions.AsNativeArray(); orientations = abstraction.orientations.AsNativeArray(); restOrientations = abstraction.restOrientations.AsNativeArray(); prevOrientations = abstraction.prevOrientations.AsNativeArray(); renderableOrientations = abstraction.renderableOrientations.AsNativeArray(); colors = abstraction.colors.AsNativeArray(); velocities = abstraction.velocities.AsNativeArray(); angularVelocities = abstraction.angularVelocities.AsNativeArray(); invMasses = abstraction.invMasses.AsNativeArray(); invRotationalMasses = abstraction.invRotationalMasses.AsNativeArray(); externalForces = abstraction.externalForces.AsNativeArray(); externalTorques = abstraction.externalTorques.AsNativeArray(); wind = abstraction.wind.AsNativeArray(); positionDeltas = abstraction.positionDeltas.AsNativeArray(); orientationDeltas = abstraction.orientationDeltas.AsNativeArray(); positionConstraintCounts = abstraction.positionConstraintCounts.AsNativeArray(); orientationConstraintCounts = abstraction.orientationConstraintCounts.AsNativeArray(); collisionMaterials = abstraction.collisionMaterials.AsNativeArray(); phases = abstraction.phases.AsNativeArray(); filters = abstraction.filters.AsNativeArray(); renderableRadii = abstraction.renderableRadii.AsNativeArray(); principalRadii = abstraction.principalRadii.AsNativeArray(); normals = abstraction.normals.AsNativeArray(); life = abstraction.life.AsNativeArray(); fluidData = abstraction.fluidData.AsNativeArray(); userData = abstraction.userData.AsNativeArray(); fluidInterface = abstraction.fluidInterface.AsNativeArray(); fluidMaterials = abstraction.fluidMaterials.AsNativeArray(); - fluidMaterials2 = abstraction.fluidMaterials2.AsNativeArray(); anisotropies = abstraction.anisotropies.AsNativeArray(); cellCoords = abstraction.cellCoords.AsNativeArray(); if (tangents.IsCreated) tangents.Dispose(); tangents = new NativeArray(normals.Length, Allocator.Persistent, NativeArrayOptions.UninitializedMemory); } public void MaxFoamParticleCountChanged(ObiSolver solver) - { - if (auxPositions.IsCreated) - auxPositions.Dispose(); - if (auxVelocities.IsCreated) - auxVelocities.Dispose(); - if (auxColors.IsCreated) - auxColors.Dispose(); - if (auxAttributes.IsCreated) - auxAttributes.Dispose(); - - auxPositions = new NativeArray((int)abstraction.maxFoamParticles, Allocator.Persistent); - auxVelocities = new NativeArray((int)abstraction.maxFoamParticles, Allocator.Persistent); - auxColors = new NativeArray((int)abstraction.maxFoamParticles, Allocator.Persistent); - auxAttributes = new NativeArray((int)abstraction.maxFoamParticles, Allocator.Persistent); - } public void SetRigidbodyArrays(ObiSolver solver) { // No need to implement. This backend grabs arrays from the abstraction when it needs them. } public IConstraintsBatchImpl CreateConstraintsBatch(Oni.ConstraintType type) { return constraints[(int)type].CreateConstraintsBatch(); } public void DestroyConstraintsBatch(IConstraintsBatchImpl batch) { if (batch != null) constraints[(int)batch.constraintType].RemoveBatch(batch); } public void FinishSimulation() { - // Wipe all forces to zero. However we can't wipe wind here, since we - // need wind values during interpolation to calculate rope normals. - abstraction.externalForces.WipeToZero(); - abstraction.externalTorques.WipeToZero(); - - // store current end positions as the start positions for the next step. - abstraction.startPositions.CopyFrom(abstraction.endPositions); - abstraction.startOrientations.CopyFrom(abstraction.endOrientations); - abstraction.endPositions.CopyFrom(abstraction.positions); abstraction.endOrientations.CopyFrom(abstraction.orientations); } - - public void PushData() - { - } - - public 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); - - // Enforce solver boundary limits: - burstHandle.jobHandle = EnforceLimits(burstHandle.jobHandle); // Update velocities: var updateVelocitiesJob = new UpdateVelocitiesJob { activeParticles = activeParticles, inverseMasses = invMasses, previousPositions = prevPositions, positions = positions, velocities = velocities, inverseRotationalMasses = invRotationalMasses, previousOrientations = prevOrientations, orientations = orientations, angularVelocities = angularVelocities, deltaTime = substepTime, is2D = abstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D }; burstHandle.jobHandle = updateVelocitiesJob.Schedule(activeParticles.Length, 128, burstHandle.jobHandle); - - // calculate particle velocity correction: - burstHandle.jobHandle = CalculateVelocityCorrections(burstHandle.jobHandle, substepTime); - - // 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); - - // correct particle velocities: - burstHandle.jobHandle = ApplyVelocityCorrections(burstHandle.jobHandle, substepTime); // update particle positions: var updatePositionsJob = new UpdatePositionsJob { activeParticles = activeParticles, positions = positions, previousPositions = prevPositions, velocities = velocities, orientations = orientations, previousOrientations = prevOrientations, angularVelocities = angularVelocities, velocityScale = math.pow(1 - math.saturate(abstraction.parameters.damping), substepTime), sleepThreshold = abstraction.parameters.sleepThreshold, maxVelocity = abstraction.parameters.maxVelocity, maxAngularVelocity = abstraction.parameters.maxAngularVelocity }; burstHandle.jobHandle = updatePositionsJob.Schedule(activeParticles.Length, 128, burstHandle.jobHandle); return burstHandle; } private JobHandle CalculateVelocityCorrections(JobHandle inputDeps, float deltaTime) { var densityParameters = abstraction.GetConstraintParameters(Oni.ConstraintType.Density); if (densityParameters.enabled) { var d = constraints[(int)Oni.ConstraintType.Density] as BurstDensityConstraints; if (d != null) { return d.CalculateVelocityCorrections(inputDeps, deltaTime); } } return inputDeps; } private JobHandle ApplyVelocityCorrections(JobHandle inputDeps, float deltaTime) { var densityParameters = abstraction.GetConstraintParameters(Oni.ConstraintType.Density); if (densityParameters.enabled) { var d = constraints[(int)Oni.ConstraintType.Density] as BurstDensityConstraints; if (d != null) { return d.ApplyVelocityCorrections(inputDeps, deltaTime); } } return inputDeps; } private JobHandle ApplyConstraints(JobHandle inputDeps, float stepTime, float substepTime, int steps, float timeLeft) { // calculate max amount of iterations required, and initialize constraints.. int maxIterations = 0; for (int i = 0; i < Oni.ConstraintTypeCount; ++i) { var parameters = abstraction.GetConstraintParameters((Oni.ConstraintType)i); if (parameters.enabled) { maxIterations = math.max(maxIterations, parameters.iterations); inputDeps = constraints[i].Initialize(inputDeps, stepTime, substepTime, steps, timeLeft); } } // calculate iteration paddings: for (int i = 0; i < Oni.ConstraintTypeCount; ++i) { var parameters = abstraction.GetConstraintParameters((Oni.ConstraintType)i); if (parameters.enabled && parameters.iterations > 0) padding[i] = (int)math.ceil(maxIterations / (float)parameters.iterations); else padding[i] = maxIterations; } // perform projection iterations: for (int i = 1; i < maxIterations; ++i) { for (int j = 0; j < Oni.ConstraintTypeCount; ++j) { if (j != (int)Oni.ConstraintType.Aerodynamics) { var parameters = abstraction.GetConstraintParameters((Oni.ConstraintType)j); if (parameters.enabled && i % padding[j] == 0) inputDeps = constraints[j].Project(inputDeps, stepTime, substepTime, steps, timeLeft); } } } // final iteration, all groups together: for (int i = 0; i < Oni.ConstraintTypeCount; ++i) { if (i != (int)Oni.ConstraintType.Aerodynamics) { var parameters = abstraction.GetConstraintParameters((Oni.ConstraintType)i); if (parameters.enabled && parameters.iterations > 0) inputDeps = constraints[i].Project(inputDeps, stepTime, substepTime, steps, timeLeft); } } // Despite friction constraints being applied after collision (since coulomb friction depends on normal impulse) // we perform a collision iteration right at the end to ensure the final state meets the Signorini-Fichera conditions. var param = abstraction.GetConstraintParameters(Oni.ConstraintType.ParticleCollision); if (param.enabled && param.iterations > 0) inputDeps = constraints[(int)Oni.ConstraintType.ParticleCollision].Project(inputDeps, stepTime, substepTime, steps, timeLeft); param = abstraction.GetConstraintParameters(Oni.ConstraintType.Collision); if (param.enabled && param.iterations > 0) inputDeps = constraints[(int)Oni.ConstraintType.Collision].Project(inputDeps, stepTime, substepTime, steps, timeLeft); return inputDeps; } private JobHandle EnforceLimits(JobHandle inputDeps) - { - if (!abstraction.useLimits) return inputDeps; - - var boundaryLimits = new EnforceLimitsJob { activeParticles = activeParticles, positions = positions, prevPositions = prevPositions, life = life, phases = phases, boundaryLimits = new BurstAabb(new float4(abstraction.boundaryLimits.min, 0), new float4(abstraction.boundaryLimits.max, 0)), killOffLimits = abstraction.killOffLimitsParticles }; return boundaryLimits.Schedule(activeParticleCount, 64, inputDeps); - } public IObiJobHandle ApplyInterpolation(IObiJobHandle inputDeps, ObiNativeVector4List startPositions, ObiNativeQuaternionList startOrientations, float stepTime, float unsimulatedTime) { if (inputDeps == null) inputDeps = new BurstJobHandle(); BurstJobHandle burstHandle = inputDeps as BurstJobHandle; if (burstHandle == null) return inputDeps; // Interpolate particle positions and orientations. var interpolate = new InterpolationJob { positions = positions, endPositions = abstraction.endPositions.AsNativeArray(), startPositions = startPositions.AsNativeArray(), renderablePositions = renderablePositions, orientations = orientations, endOrientations = abstraction.endOrientations.AsNativeArray(), startOrientations = startOrientations.AsNativeArray(), renderableOrientations = renderableOrientations, principalRadii = principalRadii, renderableRadii = renderableRadii, - - blendFactor = stepTime > 0 ? unsimulatedTime / stepTime : 0, interpolationMode = abstraction.parameters.interpolation }; burstHandle.jobHandle = interpolate.Schedule(abstraction.positions.count, 128, burstHandle.jobHandle); // Update deformable triangle normals var resetNormals = new ResetNormals() { phases = phases, normals = normals, tangents = tangents }; burstHandle.jobHandle = resetNormals.Schedule(normals.Length, 128, burstHandle.jobHandle); // Update deformable triangle normals var updateTriNormals = new UpdateTriangleNormalsJob() { renderPositions = renderablePositions, deformableTriangles = deformableTriangles, deformableTriangleUVs = deformableUVs, normals = normals, tangents = tangents }; burstHandle.jobHandle = updateTriNormals.Schedule(deformableTriangles.Length / 3, 1, burstHandle.jobHandle); - - // Update deformable edge normals - var updateEdgeNormals = new UpdateEdgeNormalsJob() { renderPositions = renderablePositions, velocities = velocities, deformableEdges = deformableEdges, wind = wind, normals = normals, }; burstHandle.jobHandle = updateEdgeNormals.Schedule(deformableEdges.Length / 2, 1, burstHandle.jobHandle); - - // Update deformable triangle orientations - var updateOrientations = new RenderableOrientationFromNormals() { phases = phases, normals = normals, tangents = tangents, renderableOrientations = renderableOrientations }; burstHandle.jobHandle = updateOrientations.Schedule(normals.Length, 128, burstHandle.jobHandle); - - // project renderable position/orientation of pinned particles: - var pinparam = abstraction.GetConstraintParameters(Oni.ConstraintType.Pin); if (pinparam.enabled && pinparam.iterations > 0) - { - var d = constraints[(int)Oni.ConstraintType.Pin] as BurstPinConstraints; - if (Application.isPlaying && d != null) - burstHandle.jobHandle = d.ProjectRenderablePositions(burstHandle.jobHandle); } - - //make sure density constraints are enabled, otherwise particles have no neighbors and neighbor lists will be uninitialized. - var param = abstraction.GetConstraintParameters(Oni.ConstraintType.Density); if (param.enabled && param.iterations > 0) - { - // Fluid laplacian/anisotropy (only if we're in play mode, in-editor we have no particlegrid/sorted data). - var d = constraints[(int)Oni.ConstraintType.Density] as BurstDensityConstraints; - if (Application.isPlaying && d != null) - burstHandle.jobHandle = d.CalculateAnisotropyLaplacianSmoothing(burstHandle.jobHandle); } return burstHandle; } private unsafe JobHandle UpdateDiffuseParticles(JobHandle inputDeps, float deltaTime) - { - 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) - { - float seed = Time.frameCount % 16535 + UnityEngine.Random.value; - - if (system.renderers[i] is ObiFoamEmitter) - { - var emitter = system.renderers[i] as ObiFoamEmitter; - int particlesToEmit = emitter.GetParticleNumberToEmit(deltaTime); - - var emitJob = new EmitParticlesJob - { - outputPositions = abstraction.foamPositions.AsNativeArray(), - outputVelocities = abstraction.foamVelocities.AsNativeArray(), - outputColors = abstraction.foamColors.AsNativeArray(), - outputAttributes = abstraction.foamAttributes.AsNativeArray(), - - dispatchBuffer = abstraction.foamCount.AsNativeArray(), - - emitterShape = (uint)emitter.shape, - emitterPosition = new float4(emitter.shapeTransform != null ? abstraction.transform.InverseTransformPoint(emitter.shapeTransform.position) : Vector3.zero,0), - emitterRotation = emitter.shapeTransform != null ? emitter.shapeTransform.rotation * Quaternion.Inverse(abstraction.transform.rotation) : Quaternion.identity, - emitterSize = new float4(emitter.shapeSize,0), - - randomSeed = seed, - buoyancy = system.renderers[i].buoyancy, - drag = system.renderers[i].drag, - airdrag = math.pow(1 - math.saturate(system.renderers[i].atmosphericDrag), deltaTime), - airAging = system.renderers[i].airAging, - particleSize = system.renderers[i].size, - sizeRandom = system.renderers[i].sizeRandom, - lifetime = system.renderers[i].lifetime, - lifetimeRandom = system.renderers[i].lifetimeRandom, - foamColor = (Vector4)system.renderers[i].color, - - deltaTime = deltaTime - }; - - inputDeps = emitJob.Schedule(particlesToEmit, 128, inputDeps); - } - else - { - var emitJob = new GenerateParticlesJob - { - // when the actor gets removed from solver, solverIndices is destroyed and - // this job may still be running. As a solution, create a temporary copy of the array. - activeParticles = new NativeArray(system.renderers[i].actor.solverIndices.AsNativeArray(), Allocator.TempJob), - positions = positions, - velocities = velocities, - angularVelocities = angularVelocities, - principalRadii = principalRadii, - fluidData = fluidData, - - outputPositions = abstraction.foamPositions.AsNativeArray(), - outputVelocities = abstraction.foamVelocities.AsNativeArray(), - outputColors = abstraction.foamColors.AsNativeArray(), - outputAttributes = abstraction.foamAttributes.AsNativeArray(), - - dispatchBuffer = abstraction.foamCount.AsNativeArray(), - - randomSeed = seed, - vorticityRange = system.renderers[i].vorticityRange, - velocityRange = system.renderers[i].velocityRange, - foamGenerationRate = system.renderers[i].foamGenerationRate, - potentialIncrease = system.renderers[i].foamPotential, - potentialDiffusion = math.pow(1 - math.saturate(system.renderers[i].foamPotentialDiffusion), deltaTime), - buoyancy = system.renderers[i].buoyancy, - drag = system.renderers[i].drag, - airdrag = math.pow(1 - math.saturate(system.renderers[i].atmosphericDrag), deltaTime), - isosurface = system.renderers[i].isosurface, - airAging = system.renderers[i].airAging, - particleSize = system.renderers[i].size, - sizeRandom = system.renderers[i].sizeRandom, - lifetime = system.renderers[i].lifetime, - lifetimeRandom = system.renderers[i].lifetimeRandom, - foamColor = (Vector4)system.renderers[i].color, - - deltaTime = deltaTime - }; - - inputDeps = emitJob.Schedule(system.renderers[i].actor.activeParticleCount, 128, inputDeps); - } - } - - var updateJob = new UpdateParticlesJob - { - positions = positions, - orientations = renderableOrientations, - principalRadii = renderableRadii, - velocities = velocities, - angularVelocities = angularVelocities, - fluidData = fluidData, - fluidMaterial = fluidMaterials, - - simplices = simplices, - simplexCounts = simplexCounts, - - grid = particleGrid.grid, - gridLevels = particleGrid.grid.populatedLevels.GetKeyArray(Allocator.TempJob), - - densityKernel = new Poly6Kernel(abstraction.parameters.mode == Oni.SolverParameters.Mode.Mode2D), - - inputPositions = abstraction.foamPositions.AsNativeArray(), - inputVelocities = abstraction.foamVelocities.AsNativeArray(), - inputColors = abstraction.foamColors.AsNativeArray(), - inputAttributes = abstraction.foamAttributes.AsNativeArray(), - - outputPositions = auxPositions, - outputVelocities = auxVelocities, - outputColors = auxColors, - outputAttributes = auxAttributes, - - dispatchBuffer = abstraction.foamCount.AsNativeArray(), - - parameters = abstraction.parameters, - - agingOverPopulation = new Vector3(abstraction.foamAccelAgingRange.x, abstraction.foamAccelAgingRange.y, abstraction.foamAccelAging), - minFluidNeighbors = abstraction.foamMinNeighbors, - currentAliveParticles = dispatchPtr[3], - deltaTime = deltaTime - }; - - inputDeps = IJobParallelForDeferExtensions.Schedule(updateJob, &dispatchPtr[3], 64, inputDeps); - - var copyJob = new CopyJob - { - inputPositions = auxPositions, - inputVelocities = auxVelocities, - inputColors = auxColors, - inputAttributes = auxAttributes, - - outputPositions = abstraction.foamPositions.AsNativeArray(), - outputVelocities = abstraction.foamVelocities.AsNativeArray(), - outputColors = abstraction.foamColors.AsNativeArray(), - outputAttributes = abstraction.foamAttributes.AsNativeArray(), - - dispatchBuffer = abstraction.foamCount.AsNativeArray() - }; - - inputDeps = IJobParallelForDeferExtensions.Schedule(copyJob, &dispatchPtr[7], 256, inputDeps); - - activeFoamParticleCount = (uint)dispatchPtr[3]; - } - 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/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BurstSolverImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BurstSolverImpl.cs.meta deleted file mode 100644 index 597b2b50b..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/BurstSolverImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d37e8b7fe851346debbbd28e17c1e593 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/DequeueIntoArrayJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/DequeueIntoArrayJob.cs deleted file mode 100644 index 43a5066eb..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/DequeueIntoArrayJob.cs +++ /dev/null @@ -1,26 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Solver/DequeueIntoArrayJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/DequeueIntoArrayJob.cs.meta deleted file mode 100644 index a62baf189..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/DequeueIntoArrayJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8e9889084567047d389e79cf39fc3391 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/EnforceLimitsJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/EnforceLimitsJob.cs deleted file mode 100644 index b1b57c39a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/EnforceLimitsJob.cs +++ /dev/null @@ -1,42 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; - -namespace Obi -{ - [BurstCompile] - struct EnforceLimitsJob : IJobParallelFor - { - [NativeDisableParallelForRestriction] public NativeArray positions; - [NativeDisableParallelForRestriction] public NativeArray prevPositions; - [NativeDisableParallelForRestriction] public NativeArray life; - [ReadOnly] public NativeArray phases; - - [ReadOnly] public NativeArray activeParticles; - [ReadOnly] public bool killOffLimits; - - [ReadOnly] public BurstAabb boundaryLimits; - - public void Execute(int index) - { - int i = activeParticles[index]; - - float4 pos = positions[i]; - float4 prevPos = prevPositions[i]; - - bool outside = math.any(math.step(pos, boundaryLimits.min).xyz + math.step(boundaryLimits.max, pos).xyz); - - if ((phases[i] & (int)ObiUtils.ParticleFlags.Isolated) != 0) - life[i] = outside && killOffLimits ? 0 : life[i]; - - pos.xyz = math.clamp(pos, boundaryLimits.min, boundaryLimits.max).xyz; - prevPos.xyz = math.clamp(prevPos, boundaryLimits.min, boundaryLimits.max).xyz; - - positions[i] = pos; - prevPositions[i] = prevPos; - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/EnforceLimitsJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/EnforceLimitsJob.cs.meta deleted file mode 100644 index 5e27e1ea8..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/EnforceLimitsJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 354e2117ba6e94ad8afbfe95160a553b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FindFluidParticlesJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FindFluidParticlesJob.cs deleted file mode 100644 index f7bb2dac4..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FindFluidParticlesJob.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; -using System; -using System.Collections; - -namespace Obi -{ - [BurstCompile] - struct 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/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FindFluidParticlesJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FindFluidParticlesJob.cs.meta deleted file mode 100644 index b146b7347..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FindFluidParticlesJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 58485b95b70f24a809a8f9509faabdad -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FoamParticlesJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FoamParticlesJob.cs deleted file mode 100644 index aeb42e47d..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FoamParticlesJob.cs +++ /dev/null @@ -1,361 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; -using Unity.Collections.LowLevel.Unsafe; -using System.Threading; - -namespace Obi -{ - [BurstCompile] - unsafe struct EmitParticlesJob : IJobParallelFor - { - [NativeDisableParallelForRestriction] public NativeArray outputPositions; - [NativeDisableParallelForRestriction] public NativeArray outputVelocities; - [NativeDisableParallelForRestriction] public NativeArray outputColors; - [NativeDisableParallelForRestriction] public NativeArray outputAttributes; - - [NativeDisableParallelForRestriction] public NativeArray dispatchBuffer; - - public uint emitterShape; - public float4 emitterPosition; - public quaternion emitterRotation; - public float4 emitterSize; - - public float lifetime; - public float lifetimeRandom; - public float particleSize; - public float sizeRandom; - public float buoyancy; - public float drag; - public float airdrag; - public float airAging; - public float isosurface; - public float4 foamColor; - - public float randomSeed; - public float deltaTime; - - public void Execute(int i) - { - int* dispatch = (int*)dispatchBuffer.GetUnsafePtr(); - - // atomically increment alive particle counter: - int count = Interlocked.Add(ref dispatch[3], 1) - 1; - - if (count < outputPositions.Length) - { - // initialize foam particle in a random position inside the cylinder spawned by fluid particle: - float3 radialVelocity; - float4 pos; - - if (emitterShape == 0) - BurstMath.RandomInCylinder(randomSeed + i, -new float4(0, 1, 0, 0) * emitterSize.y * 0.5f, new float4(0, 1, 0, 0), emitterSize.y, math.max(emitterSize.x, emitterSize.z) * 0.5f, out pos, out radialVelocity); - else - BurstMath.RandomInBox(randomSeed + i, float4.zero, emitterSize, out pos, out radialVelocity); - - float2 random = BurstMath.Hash21(randomSeed - i); - - // calculate initial life/size/color: - float initialLife = math.max (0, lifetime - lifetime * random.x * lifetimeRandom); - float initialSize = particleSize - particleSize * random.y * sizeRandom; - - outputPositions[count] = new float4(emitterPosition.xyz + math.rotate(emitterRotation, pos.xyz), 0); - outputVelocities[count] = new float4(0,0,0, buoyancy); - outputColors[count] = foamColor; - outputAttributes[count] = new float4(1, 1 / initialLife, initialSize, BurstMath.PackFloatRGBA(new float4(airAging / 50.0f, airdrag, drag, isosurface))); - } - } - } - - [BurstCompile] - unsafe struct GenerateParticlesJob : IJobParallelFor - { - [ReadOnly] [DeallocateOnJobCompletion] public NativeArray activeParticles; - [ReadOnly] public NativeArray positions; - [ReadOnly] public NativeArray velocities; - [ReadOnly] public NativeArray principalRadii; - [ReadOnly] public NativeArray fluidData; - [NativeDisableParallelForRestriction] public NativeArray angularVelocities; - - [NativeDisableParallelForRestriction] public NativeArray outputPositions; - [NativeDisableParallelForRestriction] public NativeArray outputVelocities; - [NativeDisableParallelForRestriction] public NativeArray outputColors; - [NativeDisableParallelForRestriction] public NativeArray outputAttributes; - - [NativeDisableParallelForRestriction] public NativeArray dispatchBuffer; - - public float2 vorticityRange; - public float2 velocityRange; - public float potentialIncrease; - public float potentialDiffusion; - public float foamGenerationRate; - - public float lifetime; - public float lifetimeRandom; - public float particleSize; - public float sizeRandom; - public float buoyancy; - public float drag; - public float airdrag; - public float airAging; - public float isosurface; - public float4 foamColor; - - public float randomSeed; - public float deltaTime; - - public void Execute(int i) - { - int* dispatch = (int*)dispatchBuffer.GetUnsafePtr(); - - int p = activeParticles[i]; - - float4 angVel = angularVelocities[p]; - float2 potential = BurstMath.UnpackFloatRG(angVel.w); - - // calculate foam potential increase: - float vorticityPotential = BurstMath.Remap01(fluidData[p].z, vorticityRange.x, vorticityRange.y); - float velocityPotential = BurstMath.Remap01(math.length(velocities[p].xyz), velocityRange.x, velocityRange.y); - float potentialDelta = velocityPotential * vorticityPotential * deltaTime * potentialIncrease; - - // update foam potential: - potential.y = math.saturate(potential.y * potentialDiffusion + potentialDelta); - - // calculate amount of emitted particles - potential.x += foamGenerationRate * potential.y * deltaTime; - int emitCount = (int)potential.x; - potential.x -= emitCount; - - for (int j = 0; j < emitCount; ++j) - { - // atomically increment alive particle counter: - int count = Interlocked.Add(ref dispatch[3], 1) - 1; - - if (count < outputPositions.Length) - { - // initialize foam particle in a random position inside the cylinder spawned by fluid particle: - float3 radialVelocity; - float4 pos; - BurstMath.RandomInCylinder(randomSeed + p + j, positions[p], math.normalizesafe(velocities[p]), math.length(velocities[p]) * deltaTime, principalRadii[p].x, out pos, out radialVelocity); - - float2 random = BurstMath.Hash21(randomSeed - p - j); - - // calculate initial life/size/color: - float initialLife = velocityPotential * (lifetime - lifetime * random.x * lifetimeRandom); - float initialSize = particleSize - particleSize * random.y * sizeRandom; - - outputPositions[count] = pos; - outputVelocities[count] = velocities[p] + new float4(radialVelocity, buoyancy); - outputColors[count] = foamColor; - outputAttributes[count] = new float4(1, 1/initialLife, initialSize, BurstMath.PackFloatRGBA(new float4(airAging/50.0f, airdrag, drag, isosurface))); - } - } - - angVel.w = BurstMath.PackFloatRG(potential); - angularVelocities[p] = angVel; - } - } - - [BurstCompile] - unsafe struct UpdateParticlesJob : IJobParallelForDefer - { - [ReadOnly] public NativeArray positions; - [ReadOnly] public NativeArray orientations; - [ReadOnly] public NativeArray velocities; - [ReadOnly] public NativeArray angularVelocities; - [ReadOnly] public NativeArray principalRadii; - [ReadOnly] public NativeArray fluidData; - [ReadOnly] public NativeArray fluidMaterial; - - [ReadOnly] public NativeArray simplices; - [ReadOnly] public SimplexCounts simplexCounts; - - [ReadOnly] public NativeMultilevelGrid grid; - [DeallocateOnJobCompletion] - [ReadOnly] public NativeArray gridLevels; - - [ReadOnly] public Poly6Kernel densityKernel; - - [ReadOnly] public NativeArray inputPositions; - [ReadOnly] public NativeArray inputVelocities; - [ReadOnly] public NativeArray inputColors; - [ReadOnly] public NativeArray inputAttributes; - - [NativeDisableParallelForRestriction] public NativeArray outputPositions; - [NativeDisableParallelForRestriction] public NativeArray outputVelocities; - [NativeDisableParallelForRestriction] public NativeArray outputColors; - [NativeDisableParallelForRestriction] public NativeArray outputAttributes; - - [NativeDisableParallelForRestriction] public NativeArray dispatchBuffer; - - [ReadOnly] public Oni.SolverParameters parameters; - - public float3 agingOverPopulation; - public int minFluidNeighbors; - public float deltaTime; - public int currentAliveParticles; - - static readonly int4[] offsets = - { - new int4(0, 0, 0, 1), - new int4(1, 0, 0, 1), - new int4(0, 1, 0, 1), - new int4(1, 1, 0, 1), - new int4(0, 0, 1, 1), - new int4(1, 0, 1, 1), - new int4(0, 1, 1, 1), - new int4(1, 1, 1, 1) - }; - - public void Execute(int i) - { - int* dispatch = (int*)dispatchBuffer.GetUnsafePtr(); - int count = Interlocked.Add(ref dispatch[3], -1); - - if (count < inputPositions.Length && inputAttributes[count].x > 0) - { - int aliveCount = Interlocked.Add(ref dispatch[7], 1) - 1; - - float4 attributes = inputAttributes[count]; - float4 packedData = BurstMath.UnpackFloatRGBA(attributes.w); - - int offsetCount = ((int)parameters.mode == 1) ? 4 : 8; - float4 advectedVelocity = float4.zero; - float4 advectedAngVelocity = float4.zero; - float kernelSum = -packedData.w; - uint neighbourCount = 0; - - float4 diffusePos = inputPositions[count]; - - for (int k = 0; k < gridLevels.Length; ++k) - { - int l = gridLevels[k]; - float radius = NativeMultilevelGrid.CellSizeOfLevel(l); - float interactionDist = radius * 0.5f; - - float4 cellCoords = math.floor(diffusePos / radius); - - cellCoords[3] = 0; - if ((int)parameters.mode == 1) - cellCoords[2] = 0; - - float4 posInCell = diffusePos - (cellCoords * radius + new float4(interactionDist)); - int4 quadrant = (int4)math.sign(posInCell); - - quadrant[3] = l; - - for (int o = 0; o < offsetCount; ++o) - { - int cellIndex; - if (grid.TryGetCellIndex((int4)cellCoords + offsets[o] * quadrant, out cellIndex)) - { - var cell = grid.usedCells[cellIndex]; - for (int n = 0; n < cell.Length; ++n) - { - int simplexStart = simplexCounts.GetSimplexStartAndSize(cell[n], out int simplexSize); - - for (int a = 0; a < simplexSize; ++a) - { - int p = simplices[simplexStart + a]; - float4 normal = diffusePos - positions[p]; - - normal[3] = 0; - if ((int)parameters.mode == 1) - normal[2] = 0; - - float d = math.length(normal); - if (d <= interactionDist) - { - float3 radii = fluidMaterial[p].x * (principalRadii[p].xyz / principalRadii[p].x); - - float4 angVel = new float4(math.cross(angularVelocities[p].xyz, normal.xyz), 0); - advectedAngVelocity += angVel * densityKernel.W(d, radii.x) / densityKernel.W(0, radii.x); - - normal.xyz = math.mul(math.conjugate(orientations[p]), normal.xyz) / radii; - d = math.length(normal) * radii.x; - - // scale by volume (* 1 / normalized density) - float w = densityKernel.W(d, radii.x) / fluidData[p].x; - - kernelSum += w; - advectedVelocity += velocities[p] * w; - neighbourCount++; - } - } - } - } - } - } - - float4 forces = float4.zero; - float velocityScale = 1; - float agingScale = 1 + BurstMath.Remap01(currentAliveParticles / (float)inputPositions.Length, agingOverPopulation.x, agingOverPopulation.y) * (agingOverPopulation.z - 1); - - // foam/bubble particle: - if (kernelSum > BurstMath.epsilon && neighbourCount >= minFluidNeighbors) - { - // advection: - forces = packedData.z / deltaTime * (advectedVelocity / (kernelSum + packedData.w) + advectedAngVelocity - inputVelocities[count]); - - // buoyancy: - forces -= new float4(parameters.gravity * parameters.foamGravityScale * inputVelocities[count].w * math.saturate(kernelSum), 0); - - } - else // ballistic: - { - // gravity: - forces += new float4(parameters.gravity * parameters.foamGravityScale, 0); - - // atmospheric drag/aging: - velocityScale = packedData.y; - agingScale *= packedData.x * 50; - } - - // don't change 4th component, as its used to store buoyancy control parameter. - forces[3] = 0; - - // update particle data: - attributes.x -= attributes.y * deltaTime * agingScale; - outputAttributes[aliveCount] = attributes; - outputColors[aliveCount] = inputColors[count]; - - // integrate: - outputVelocities[aliveCount] = (inputVelocities[count] + forces * deltaTime) * velocityScale; - outputPositions[aliveCount] = new float4((inputPositions[count] + outputVelocities[aliveCount] * deltaTime).xyz,neighbourCount); - } - } - } - - [BurstCompile] - unsafe struct CopyJob : IJobParallelForDefer - { - [ReadOnly] public NativeArray inputPositions; - [ReadOnly] public NativeArray inputVelocities; - [ReadOnly] public NativeArray inputColors; - [ReadOnly] public NativeArray inputAttributes; - - [NativeDisableParallelForRestriction] public NativeArray outputPositions; - [NativeDisableParallelForRestriction] public NativeArray outputVelocities; - [NativeDisableParallelForRestriction] public NativeArray outputColors; - [NativeDisableParallelForRestriction] public NativeArray outputAttributes; - - [NativeDisableParallelForRestriction] public NativeArray dispatchBuffer; - - public void Execute(int i) - { - if (i == 0) - { - dispatchBuffer[3] = dispatchBuffer[7]; - dispatchBuffer[7] = 0; - } - - outputPositions[i] = inputPositions[i]; - outputVelocities[i] = inputVelocities[i]; - outputColors[i] = inputColors[i]; - outputAttributes[i] = inputAttributes[i]; - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FoamParticlesJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FoamParticlesJob.cs.meta deleted file mode 100644 index bdd0b48ee..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/FoamParticlesJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 54f132d8cdea34935be3c33b0d1ca4d1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/InterpolationJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/InterpolationJob.cs deleted file mode 100644 index 63fdcd543..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/InterpolationJob.cs +++ /dev/null @@ -1,53 +0,0 @@ -#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/Assets/Obi/Scripts/Common/Backends/Burst/Solver/InterpolationJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/InterpolationJob.cs.meta deleted file mode 100644 index 6516fdb71..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/InterpolationJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8928e13e186424d31a319347de871c16 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/PredictPositionsJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/PredictPositionsJob.cs deleted file mode 100644 index 106fa3877..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/PredictPositionsJob.cs +++ /dev/null @@ -1,82 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; -using System; -using System.Collections; - -namespace Obi -{ - [BurstCompile] - struct 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/Assets/Obi/Scripts/Common/Backends/Burst/Solver/PredictPositionsJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/PredictPositionsJob.cs.meta deleted file mode 100644 index ea542bbe6..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/PredictPositionsJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fcd4a6f15c3844229a95fa41f283d408 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateNormalsJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateNormalsJob.cs deleted file mode 100644 index 5b568c508..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateNormalsJob.cs +++ /dev/null @@ -1,122 +0,0 @@ -#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; - public NativeArray normals; - [WriteOnly] public NativeArray tangents; - - public void Execute(int i) - { - // leave fluid and softbody normals intact. - if ((phases[i] & (int)ObiUtils.ParticleFlags.Fluid) == 0 && normals[i].w >= 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 velocities; - [ReadOnly] public NativeArray wind; - [ReadOnly] public NativeArray renderPositions; - - [NativeDisableParallelForRestriction] public NativeArray normals; - - public void Execute(int i) - { - int p1 = deformableEdges[i * 2]; - int p2 = deformableEdges[i * 2 + 1]; - - float4 edge = renderPositions[p2] - renderPositions[p1]; - float4 avgWind = (velocities[p1] + velocities[p2]) * 0.5f - (wind[p1] + wind[p2]) * 0.5f; - float4 normal = avgWind - math.projectsafe(avgWind, edge); - - BurstMath.AtomicAdd(normals, p1, normal); - BurstMath.AtomicAdd(normals, p2, normal); - } - } - - [BurstCompile] - struct RenderableOrientationFromNormals : IJobParallelFor - { - [ReadOnly] public NativeArray phases; - - public NativeArray normals; - public NativeArray tangents; - - [WriteOnly] public NativeArray renderableOrientations; - - public void Execute(int i) - { - if (((phases[i] & (int)ObiUtils.ParticleFlags.Fluid) == 0 && normals[i].w >= 0) && // not fluid or softbody (no SDF stored) - math.lengthsq(normals[i]) > BurstMath.epsilon && - math.lengthsq(tangents[i]) > BurstMath.epsilon) - { - normals[i] = math.normalizesafe(normals[i]); - tangents[i] = math.normalizesafe(tangents[i]); - - // particle orientation from normal/tangent: - renderableOrientations[i] = quaternion.LookRotation(normals[i].xyz, tangents[i].xyz); - } - } - } -} -#endif diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateNormalsJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateNormalsJob.cs.meta deleted file mode 100644 index 89f9e14c3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateNormalsJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c46e86e164afb414fbc171972a53eb91 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateParticleLifetimesJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateParticleLifetimesJob.cs deleted file mode 100644 index dd65527ab..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateParticleLifetimesJob.cs +++ /dev/null @@ -1,41 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using Unity.Jobs; -using Unity.Collections; -using Unity.Collections.LowLevel.Unsafe; -using Unity.Mathematics; -using Unity.Burst; -using System; -using System.Collections; -using System.Threading; - -namespace Obi -{ - [BurstCompile] - unsafe struct UpdateParticleLifetimesJob : IJobParallelFor - { - [ReadOnly] public NativeArray activeParticles; - [NativeDisableParallelForRestriction] public NativeArray life; - - [NativeDisableParallelForRestriction] public NativeArray deadParticles; - [NativeDisableContainerSafetyRestriction] public NativeReference deadParticleCount; - - [ReadOnly] public float dt; - - public void Execute(int i) - { - int p = activeParticles[i]; - - life[p] -= dt; - - if (life[p] <= 0) - { - int* countRef = (int*)deadParticleCount.GetUnsafePtr(); - int count = Interlocked.Increment(ref countRef[0]) - 1; - deadParticles[count] = p; - life[p] = 0; - } - } - } -} -#endif \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateParticleLifetimesJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateParticleLifetimesJob.cs.meta deleted file mode 100644 index 460f21027..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateParticleLifetimesJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e2ac6f480787440e7bd2610e4545bd9e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePositionsJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePositionsJob.cs deleted file mode 100644 index 9401d9bc9..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePositionsJob.cs +++ /dev/null @@ -1,68 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; -using System; -using System.Collections; - -namespace Obi -{ - [BurstCompile] - struct 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/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePositionsJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePositionsJob.cs.meta deleted file mode 100644 index 1bb7363ed..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdatePositionsJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a41d3897adb37457da8385a46e6f0bb6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateVelocitiesJob.cs b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateVelocitiesJob.cs deleted file mode 100644 index 32a189640..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateVelocitiesJob.cs +++ /dev/null @@ -1,58 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using UnityEngine; -using Unity.Jobs; -using Unity.Collections; -using Unity.Mathematics; -using Unity.Burst; -using System; -using System.Collections; - -namespace Obi -{ - [BurstCompile] - struct 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/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateVelocitiesJob.cs.meta b/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateVelocitiesJob.cs.meta deleted file mode 100644 index f437dcecc..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Burst/Solver/UpdateVelocitiesJob.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d10fd506f9f2645ecbf2d61a4634a5ba -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute.meta b/Assets/Obi/Scripts/Common/Backends/Compute.meta deleted file mode 100644 index 18db0ca74..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4e491460f88fa4ee49cdb796a0b8a923 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions.meta deleted file mode 100644 index bd5f862e3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 1816ef976b3b64da7bf7a71a91e97d0f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeBox.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeBox.cs deleted file mode 100644 index c79f40e3c..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeBox.cs +++ /dev/null @@ -1,42 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeBox - { - private ComputeShader shader; - private int kernel; - - public ComputeBox() - { - shader = GameObject.Instantiate(Resources.Load("Compute/BoxShape")); - kernel = shader.FindKernel("GenerateContacts"); - } - - public void GenerateContacts(ComputeSolverImpl solver, ComputeColliderWorld world) - { - shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); - shader.SetInt("pointCount", solver.simplexCounts.pointCount); - shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); - shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); - shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); - shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); - shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); - - shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); - shader.SetBuffer(kernel, "simplices", solver.simplices); - shader.SetBuffer(kernel, "positions", solver.positionsBuffer); - shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); - shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); - shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); - shader.SetBuffer(kernel, "transforms", world.transformsBuffer); - shader.SetBuffer(kernel, "shapes", world.shapesBuffer); - shader.SetBuffer(kernel, "contactPairs", world.contactPairs); - shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); - shader.SetBuffer(kernel, "contacts", solver.abstraction.colliderContacts.computeBuffer); - shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); - shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)Oni.ShapeType.Box); - } - - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeBox.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeBox.cs.meta deleted file mode 100644 index d5d5809e7..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeBox.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 669f5cb47192b4a08864250bd4ba3872 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeCapsule.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeCapsule.cs deleted file mode 100644 index 576fe40e6..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeCapsule.cs +++ /dev/null @@ -1,42 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeCapsule - { - private ComputeShader shader; - private int kernel; - - public ComputeCapsule() - { - shader = GameObject.Instantiate(Resources.Load("Compute/CapsuleShape")); - kernel = shader.FindKernel("GenerateContacts"); - } - - public void GenerateContacts(ComputeSolverImpl solver, ComputeColliderWorld world) - { - shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); - shader.SetInt("pointCount", solver.simplexCounts.pointCount); - shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); - shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); - shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); - shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); - shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); - - shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); - shader.SetBuffer(kernel, "simplices", solver.simplices); - shader.SetBuffer(kernel, "positions", solver.positionsBuffer); - shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); - shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); - shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); - shader.SetBuffer(kernel, "transforms", world.transformsBuffer); - shader.SetBuffer(kernel, "shapes", world.shapesBuffer); - shader.SetBuffer(kernel, "contactPairs", world.contactPairs); - shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); - shader.SetBuffer(kernel, "contacts", solver.abstraction.colliderContacts.computeBuffer); - shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); - shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)Oni.ShapeType.Capsule); - } - - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeCapsule.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeCapsule.cs.meta deleted file mode 100644 index 13e33af82..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeCapsule.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b8577fc7696f14a5bad666ce7bdbd424 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeColliderWorld.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeColliderWorld.cs deleted file mode 100644 index 96b57bd12..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeColliderWorld.cs +++ /dev/null @@ -1,479 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi -{ - public class ComputeColliderWorld : MonoBehaviour, IColliderWorldImpl - { - public int referenceCount { get; private set; } = 0; - - public int colliderCount { get; private set; } = 0; - public int rigidbodyCount { get; private set; } = -1; // make sure the buffer is created even if there's 0. - public int forceZoneCount { get; private set; } = -1; // make sure the buffer is created even if there's 0. - public int materialCount { get; private set; } = -1; // make sure the buffer is created even if there's 0. - - public int triangleMeshCount { get; private set; } = -1; - public int edgeMeshCount { get; private set; } = -1; - public int distanceFieldCount { get; private set; } = -1; - public int heightFieldCount { get; private set; } = -1; - - private ComputePrefixSum prefixSum; - - private ComputeShader gridShader; - private int buildKernel; - private int gridPopulationKernel; - private int sortKernel; - private int contactsKernel; - private int clearKernel; - private int prefixSumPairsKernel; - private int sortPairsKernel; - private int applyForceZonesKernel; - private int writeForceZoneResultsKernel; - - public GraphicsBuffer materialsBuffer; - public GraphicsBuffer aabbsBuffer; - public GraphicsBuffer transformsBuffer; - public GraphicsBuffer shapesBuffer; - public GraphicsBuffer forceZonesBuffer; - public GraphicsBuffer rigidbodiesBuffer; - public GraphicsBuffer sortedColliderIndicesBuffer; - - public GraphicsBuffer cellIndicesBuffer; //for each collider, the IDs of the 8 cells it covers. - public GraphicsBuffer cellOffsetsBuffer; //for each cell, start offset in the sorted span indices buffer. - - public GraphicsBuffer cellCountsBuffer; // for each cell, how many colliders in it. - public GraphicsBuffer offsetInCells; // for each collider, its offset in each of the 8 cells. - public GraphicsBuffer levelPopulation; // buffer storing amount of entries in each grid level - - private GraphicsBuffer colliderTypeCounts; // amount of contacts against each collider type. - public GraphicsBuffer unsortedContactPairs; // unsorted contact pairs. - public GraphicsBuffer contactPairs; // list of contact pairs. - public GraphicsBuffer contactOffsetsPerType; // offset in the contact pairs array for each collider type. - - public GraphicsBuffer dispatchBuffer; // dispatch info for iterating trough contacts. - - public GraphicsBuffer heightFieldHeaders; - public GraphicsBuffer heightFieldSamples; - - public GraphicsBuffer distanceFieldHeaders; - public GraphicsBuffer dfNodes; - - public GraphicsBuffer edgeMeshHeaders; - public GraphicsBuffer edgeBihNodes; - public GraphicsBuffer edges; - public GraphicsBuffer edgeVertices; - - public GraphicsBuffer triangleMeshHeaders; - public GraphicsBuffer bihNodes; - public GraphicsBuffer triangles; - public GraphicsBuffer vertices; - - public const int maxContacts = 512 * 512; - public const int maxCells = 512 * 512; - public const int cellsPerCollider = 8; - private const int maxGridLevels = 24; - private uint[] colliderCountClear = new uint[Oni.ColliderShapeTypeCount]; - private uint[] dispatchClear = { 0, 1, 1, 0, // contacts - 0, 1, 1, 0, // pairs - 0, 1, 1, 0, // spheres - 0, 1, 1, 0, // boxes - 0, 1, 1, 0, // capsules - 0, 1, 1, 0, // heighmaps - 0, 1, 1, 0, // tri mesh - 0, 1, 1, 0, // edge mesh - 0, 1, 1, 0, // distance field - }; - - private ComputeSphere spheres; - private ComputeBox boxes; - private ComputeCapsule capsules; - private ComputeTriangleMesh triangleMeshes; - private ComputeEdgeMesh edgeMeshes; - private ComputeDistanceField distanceFields; - private ComputeHeightField heightFields; - - // for each particle in parallel: - // determine its cell span in the collider grid. - // iterate over all of them, generating contacts. - - // we just need to get collider indices from each cell. - // sort by cell, store offset for each cell. - - // each collider keeps track of 8 uints: IDs of the cells it overlaps. unused are invalid. - // each collider must know offset within each cell: another 8 units per collider. - // we can keep using the same system as we did with particles. - - - public void Awake() - { - ObiColliderWorld.GetInstance().RegisterImplementation(this); - - prefixSum = new ComputePrefixSum(maxCells); - - gridShader = Resources.Load("Compute/ColliderGrid"); - buildKernel = gridShader.FindKernel("BuildUnsortedList"); - gridPopulationKernel = gridShader.FindKernel("FindPopulatedLevels"); - sortKernel = gridShader.FindKernel("SortList"); - contactsKernel = gridShader.FindKernel("BuildContactList"); - clearKernel = gridShader.FindKernel("Clear"); - prefixSumPairsKernel = gridShader.FindKernel("PrefixSumColliderCounts"); - sortPairsKernel = gridShader.FindKernel("SortContactPairs"); - applyForceZonesKernel = gridShader.FindKernel("ApplyForceZones"); - writeForceZoneResultsKernel = gridShader.FindKernel("WriteForceZoneResults"); - - gridShader.SetInt("shapeTypeCount", Oni.ColliderShapeTypeCount); - gridShader.SetInt("maxContacts", maxContacts); - gridShader.SetInt("colliderCount", colliderCount); - gridShader.SetInt("cellsPerCollider", cellsPerCollider); - gridShader.SetInt("maxCells", maxCells); - - cellOffsetsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxCells, 4); - cellCountsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxCells, 4); - - // first entry is amount of non-empty levels in the grid. - // next maxGridLevels entries hold the indices of the non-empty levels. - // final maxGridLevels entries hold the population of each level. - levelPopulation = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxGridLevels + 1, 4); - - colliderTypeCounts = new GraphicsBuffer(GraphicsBuffer.Target.Structured, Oni.ColliderShapeTypeCount, 4); - contactOffsetsPerType = new GraphicsBuffer(GraphicsBuffer.Target.Structured, Oni.ColliderShapeTypeCount + 1, 4); - unsortedContactPairs = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxContacts, 8); - - contactPairs = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxContacts, 8); - dispatchBuffer = new GraphicsBuffer(GraphicsBuffer.Target.IndirectArguments, dispatchClear.Length, sizeof(uint)); - - spheres = new ComputeSphere(); - boxes = new ComputeBox(); - capsules = new ComputeCapsule(); - triangleMeshes = new ComputeTriangleMesh(); - edgeMeshes = new ComputeEdgeMesh(); - distanceFields = new ComputeDistanceField(); - heightFields = new ComputeHeightField(); - } - - public void OnDestroy() - { - ObiColliderWorld.GetInstance().UnregisterImplementation(this); - - prefixSum.Dispose(); - - cellOffsetsBuffer.Dispose(); - cellCountsBuffer.Dispose(); - levelPopulation.Dispose(); - - contactPairs.Dispose(); - dispatchBuffer.Dispose(); - - colliderTypeCounts.Dispose(); - contactOffsetsPerType.Dispose(); - unsortedContactPairs.Dispose(); - - if (cellIndicesBuffer != null) - cellIndicesBuffer.Dispose(); - if (offsetInCells != null) - offsetInCells.Dispose(); - if (sortedColliderIndicesBuffer != null) - sortedColliderIndicesBuffer.Dispose(); - } - - public void IncreaseReferenceCount() - { - referenceCount++; - } - public void DecreaseReferenceCount() - { - if (--referenceCount <= 0 && gameObject != null) - DestroyImmediate(gameObject); - } - - public void SetColliders(ObiNativeColliderShapeList shapes, ObiNativeAabbList bounds, ObiNativeAffineTransformList transforms) - { - if (colliderCount != shapes.count || aabbsBuffer == null || !aabbsBuffer.IsValid()) - aabbsBuffer = bounds.AsComputeBuffer(); - else - bounds.Upload(); - - if (colliderCount != shapes.count || shapesBuffer == null || !shapesBuffer.IsValid()) - shapesBuffer = shapes.AsComputeBuffer(); - else - shapes.Upload(); - - if (colliderCount != shapes.count || transformsBuffer == null || !transformsBuffer.IsValid()) - transformsBuffer = transforms.AsComputeBuffer(); - else - transforms.Upload(); - - // Only update in case the amount of colliders has changed: - if (colliderCount != shapes.count) - { - colliderCount = shapes.count; - gridShader.SetInt("colliderCount", colliderCount); - - if (cellIndicesBuffer != null) - { - cellIndicesBuffer.Release(); - cellIndicesBuffer = null; - } - if (offsetInCells != null) - { - offsetInCells.Release(); - offsetInCells = null; - } - if (sortedColliderIndicesBuffer != null) - { - sortedColliderIndicesBuffer.Release(); - sortedColliderIndicesBuffer = null; - } - - if (colliderCount > 0) - { - cellIndicesBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, colliderCount * cellsPerCollider, 4); - offsetInCells = new GraphicsBuffer(GraphicsBuffer.Target.Structured, colliderCount * cellsPerCollider, 4); - sortedColliderIndicesBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, colliderCount * cellsPerCollider, 4); - } - } - } - - public void SetForceZones(ObiNativeForceZoneList forceZones) - { - // Changing the count of a NativeList should not invalidate compute buffer. Only need to invalidate if *capacity* changes, it's up to the user to - // regenerate the compute buffer in case it is needed, or Uplodad() the new data in case it is not (because our compute buffer maps full capacity, instead of only up to count) - if (forceZoneCount != forceZones.count || forceZonesBuffer == null || !forceZonesBuffer.IsValid()) - { - forceZoneCount = forceZones.count; - forceZonesBuffer = forceZones.SafeAsComputeBuffer(); - } - else - forceZones.Upload(); - } - - public void SetRigidbodies(ObiNativeRigidbodyList rigidbody) - { - if (rigidbodyCount != rigidbody.count || rigidbodiesBuffer == null || !rigidbodiesBuffer.IsValid()) - { - rigidbodyCount = rigidbody.count; - rigidbodiesBuffer = rigidbody.SafeAsComputeBuffer(); - } - else - rigidbody.Upload(); - } - - public void SetCollisionMaterials(ObiNativeCollisionMaterialList materials) - { - if (materialCount != materials.count || materialsBuffer == null || !materialsBuffer.IsValid()) - { - materialCount = materials.count; - materialsBuffer = materials.SafeAsComputeBuffer(); - } - else - materials.Upload(); - } - - public void SetTriangleMeshData(ObiNativeTriangleMeshHeaderList headers, ObiNativeBIHNodeList nodes, ObiNativeTriangleList triangles, ObiNativeVector3List vertices) - { - if (triangleMeshCount != headers.count || triangleMeshHeaders == null || !triangleMeshHeaders.IsValid()) - { - triangleMeshCount = headers.count; - triangleMeshHeaders = headers.SafeAsComputeBuffer(); - bihNodes = nodes.SafeAsComputeBuffer(); - this.triangles = triangles.SafeAsComputeBuffer(); - this.vertices = vertices.SafeAsComputeBuffer(); - } - } - - public void SetEdgeMeshData(ObiNativeEdgeMeshHeaderList headers, ObiNativeBIHNodeList nodes, ObiNativeEdgeList edges, ObiNativeVector2List vertices) - { - if (edgeMeshCount != headers.count || edgeMeshHeaders == null || !edgeMeshHeaders.IsValid()) - { - edgeMeshCount = headers.count; - edgeMeshHeaders = headers.SafeAsComputeBuffer(); - edgeBihNodes = nodes.SafeAsComputeBuffer(); - this.edges = edges.SafeAsComputeBuffer(); - edgeVertices = vertices.SafeAsComputeBuffer(); - } - } - - public void SetDistanceFieldData(ObiNativeDistanceFieldHeaderList headers, ObiNativeDFNodeList nodes) - { - if (distanceFieldCount != headers.count || distanceFieldHeaders == null || !distanceFieldHeaders.IsValid()) - { - distanceFieldCount = headers.count; - distanceFieldHeaders = headers.SafeAsComputeBuffer(); - dfNodes = nodes.SafeAsComputeBuffer(); - } - } - - public void SetHeightFieldData(ObiNativeHeightFieldHeaderList headers, ObiNativeFloatList samples) - { - if (heightFieldCount != headers.count || heightFieldHeaders == null || !heightFieldHeaders.IsValid()) - { - heightFieldCount = headers.count; - heightFieldHeaders = headers.SafeAsComputeBuffer(); - heightFieldSamples = samples.SafeAsComputeBuffer(); - } - } - - public void UpdateWorld(float deltaTime) - { - if (colliderCount > 0) - { - - int colliderThreadGroups = ComputeMath.ThreadGroupCount(colliderCount, 128); - int capacityThreadGroups = ComputeMath.ThreadGroupCount(colliderCount * 8, 128); - int cellThreadGroups = ComputeMath.ThreadGroupCount(maxCells, 128); - - // clear grid: - gridShader.SetBuffer(clearKernel, "cellOffsets", cellOffsetsBuffer); - gridShader.SetBuffer(clearKernel, "cellIndices", cellIndicesBuffer); - gridShader.SetBuffer(clearKernel, "cellCounts", cellCountsBuffer); - gridShader.SetBuffer(clearKernel, "levelPopulation", levelPopulation); - gridShader.Dispatch(clearKernel, Mathf.Max(cellThreadGroups, capacityThreadGroups), 1, 1); - - // build cell list: - gridShader.SetBuffer(buildKernel, "aabbs", aabbsBuffer); - gridShader.SetBuffer(buildKernel, "shapes", shapesBuffer); - gridShader.SetBuffer(buildKernel, "rigidbodies", rigidbodiesBuffer); - gridShader.SetBuffer(buildKernel, "collisionMaterials", materialsBuffer); - gridShader.SetBuffer(buildKernel, "cellIndices", cellIndicesBuffer); - gridShader.SetBuffer(buildKernel, "cellCounts", cellCountsBuffer); - gridShader.SetBuffer(buildKernel, "offsetInCells", offsetInCells); - gridShader.SetBuffer(buildKernel, "levelPopulation", levelPopulation); - gridShader.Dispatch(buildKernel, colliderThreadGroups, 1, 1); - - // find populated grid levels: - gridShader.SetBuffer(gridPopulationKernel, "levelPopulation", levelPopulation); - gridShader.Dispatch(gridPopulationKernel, 1, 1, 1); - - // prefix sum: - prefixSum.Sum(cellCountsBuffer, cellOffsetsBuffer); - - // sort particle indices: - gridShader.SetBuffer(sortKernel, "sortedColliderIndices", sortedColliderIndicesBuffer); - gridShader.SetBuffer(sortKernel, "offsetInCells", offsetInCells); - gridShader.SetBuffer(sortKernel, "cellIndices", cellIndicesBuffer); - gridShader.SetBuffer(sortKernel, "cellOffsets", cellOffsetsBuffer); - gridShader.Dispatch(sortKernel, capacityThreadGroups, 1, 1); - } - } - - public void ApplyForceZones(ComputeSolverImpl solver, float deltaTime) - { - if (colliderCount > 0) - { - if (solver.activeParticlesBuffer != null && solver.simplices != null && forceZonesBuffer != null) - { - gridShader.SetInt("pointCount", solver.simplexCounts.pointCount); - gridShader.SetInt("edgeCount", solver.simplexCounts.edgeCount); - gridShader.SetInt("triangleCount", solver.simplexCounts.triangleCount); - gridShader.SetFloat("deltaTime", deltaTime); - - gridShader.SetBuffer(applyForceZonesKernel, "contacts", solver.abstraction.colliderContacts.computeBuffer); - gridShader.SetBuffer(applyForceZonesKernel, "dispatchBuffer", dispatchBuffer); - - gridShader.SetBuffer(applyForceZonesKernel, "simplices", solver.simplices); - gridShader.SetBuffer(applyForceZonesKernel, "positions", solver.positionsBuffer); - gridShader.SetBuffer(applyForceZonesKernel, "velocities", solver.velocitiesBuffer); - gridShader.SetBuffer(applyForceZonesKernel, "colors", solver.colorsBuffer); - gridShader.SetBuffer(applyForceZonesKernel, "invMasses", solver.invMassesBuffer); - - gridShader.SetBuffer(applyForceZonesKernel, "transforms", transformsBuffer); - gridShader.SetBuffer(applyForceZonesKernel, "shapes", shapesBuffer); - gridShader.SetBuffer(applyForceZonesKernel, "forceZones", forceZonesBuffer); - gridShader.SetBuffer(applyForceZonesKernel, "deltasAsInt", solver.positionDeltasIntBuffer); - gridShader.SetBuffer(applyForceZonesKernel, "orientationDeltasAsInt", solver.orientationDeltasIntBuffer); - gridShader.SetBuffer(applyForceZonesKernel, "worldToSolver", solver.worldToSolverBuffer); - - gridShader.DispatchIndirect(applyForceZonesKernel, dispatchBuffer); - - int threadGroups = ComputeMath.ThreadGroupCount(solver.activeParticleCount, 128); - gridShader.SetInt("particleCount", solver.activeParticleCount); - - gridShader.SetBuffer(writeForceZoneResultsKernel, "activeParticles", solver.activeParticlesBuffer); - gridShader.SetBuffer(writeForceZoneResultsKernel, "externalForces", solver.externalForcesBuffer); - gridShader.SetBuffer(writeForceZoneResultsKernel, "life", solver.lifeBuffer); - gridShader.SetBuffer(writeForceZoneResultsKernel, "wind", solver.windBuffer); - gridShader.SetBuffer(writeForceZoneResultsKernel, "deltasAsInt", solver.positionDeltasIntBuffer); - gridShader.SetBuffer(writeForceZoneResultsKernel, "orientationDeltasAsInt", solver.orientationDeltasIntBuffer); - - gridShader.Dispatch(writeForceZoneResultsKernel, threadGroups, 1, 1); - } - } - } - - public void GenerateContacts(ComputeSolverImpl solver, float deltaTime) - { - if (colliderCount > 0) - { - int particleThreadGroups = ComputeMath.ThreadGroupCount(solver.simplexCounts.simplexCount, 128); - - colliderTypeCounts.SetData(colliderCountClear); - dispatchBuffer.SetData(dispatchClear); - - if (solver.activeParticlesBuffer != null && solver.simplices != null) - { - solver.abstraction.colliderContacts.computeBuffer.SetCounterValue(0); - - gridShader.SetInt("pointCount", solver.simplexCounts.pointCount); - gridShader.SetInt("edgeCount", solver.simplexCounts.edgeCount); - gridShader.SetInt("triangleCount", solver.simplexCounts.triangleCount); - - gridShader.SetFloat("colliderCCD", solver.abstraction.parameters.colliderCCD); - gridShader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); - gridShader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); - gridShader.SetInt("mode", (int)solver.abstraction.parameters.mode); - gridShader.SetFloat("deltaTime", deltaTime); - - gridShader.SetBuffer(contactsKernel, "simplices", solver.simplices); - gridShader.SetBuffer(contactsKernel, "simplexBounds", solver.simplexBounds); - gridShader.SetBuffer(contactsKernel, "positions", solver.positionsBuffer); - gridShader.SetBuffer(contactsKernel, "orientations", solver.orientationsBuffer); - gridShader.SetBuffer(contactsKernel, "principalRadii", solver.principalRadiiBuffer); - gridShader.SetBuffer(contactsKernel, "filters", solver.filtersBuffer); - gridShader.SetBuffer(contactsKernel, "sortedColliderIndices", sortedColliderIndicesBuffer); - gridShader.SetBuffer(contactsKernel, "aabbs", aabbsBuffer); - gridShader.SetBuffer(contactsKernel, "transforms", transformsBuffer); - gridShader.SetBuffer(contactsKernel, "shapes", shapesBuffer); - gridShader.SetBuffer(contactsKernel, "rigidbodies", rigidbodiesBuffer); - gridShader.SetBuffer(contactsKernel, "collisionMaterials", materialsBuffer); - gridShader.SetBuffer(contactsKernel, "collisionMaterialIndices", solver.collisionMaterialIndexBuffer); - gridShader.SetBuffer(contactsKernel, "cellIndices", cellIndicesBuffer); - gridShader.SetBuffer(contactsKernel, "cellOffsets", cellOffsetsBuffer); - gridShader.SetBuffer(contactsKernel, "cellCounts", cellCountsBuffer); - gridShader.SetBuffer(contactsKernel, "levelPopulation", levelPopulation); - - gridShader.SetBuffer(contactsKernel, "solverToWorld", solver.solverToWorldBuffer); - gridShader.SetBuffer(contactsKernel, "colliderTypeCounts", colliderTypeCounts); - gridShader.SetBuffer(contactsKernel, "unsortedContactPairs", unsortedContactPairs); - gridShader.SetBuffer(contactsKernel, "dispatchBuffer", dispatchBuffer); - - gridShader.Dispatch(contactsKernel, particleThreadGroups, 1, 1); - - gridShader.SetBuffer(prefixSumPairsKernel, "colliderTypeCounts", colliderTypeCounts); - gridShader.SetBuffer(prefixSumPairsKernel, "contactOffsetsPerType", contactOffsetsPerType); - gridShader.SetBuffer(prefixSumPairsKernel, "dispatchBuffer", dispatchBuffer); - - gridShader.Dispatch(prefixSumPairsKernel, 1, 1, 1); - - gridShader.SetBuffer(sortPairsKernel, "shapes", shapesBuffer); - gridShader.SetBuffer(sortPairsKernel, "unsortedContactPairs", unsortedContactPairs); - gridShader.SetBuffer(sortPairsKernel, "contactPairs", contactPairs); - gridShader.SetBuffer(sortPairsKernel, "colliderTypeCounts", colliderTypeCounts); - gridShader.SetBuffer(sortPairsKernel, "contactOffsetsPerType", contactOffsetsPerType); - gridShader.SetBuffer(sortPairsKernel, "dispatchBuffer", dispatchBuffer); - - gridShader.DispatchIndirect(sortPairsKernel, dispatchBuffer, 16); - - boxes.GenerateContacts(solver, this); - spheres.GenerateContacts(solver, this); - capsules.GenerateContacts(solver, this); - triangleMeshes.GenerateContacts(solver, this, deltaTime); - edgeMeshes.GenerateContacts(solver, this, deltaTime); - distanceFields.GenerateContacts(solver, this, deltaTime); - heightFields.GenerateContacts(solver, this, deltaTime); - } - } - } - - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeColliderWorld.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeColliderWorld.cs.meta deleted file mode 100644 index 54b57c22d..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeColliderWorld.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ce0ddc77554954cd78643d83b0505396 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeDistanceField.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeDistanceField.cs deleted file mode 100644 index 2c6214afa..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeDistanceField.cs +++ /dev/null @@ -1,50 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeDistanceField - { - private ComputeShader shader; - private int kernel; - - public ComputeDistanceField() - { - shader = GameObject.Instantiate(Resources.Load("Compute/DistanceFieldShape")); - kernel = shader.FindKernel("GenerateContacts"); - } - - public void GenerateContacts(ComputeSolverImpl solver, ComputeColliderWorld world, float deltaTime) - { - if (world.distanceFieldHeaders != null) - { - shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); - shader.SetInt("pointCount", solver.simplexCounts.pointCount); - shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); - shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); - shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); - shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); - shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); - shader.SetFloat("deltaTime", deltaTime); - - shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); - shader.SetBuffer(kernel, "simplices", solver.simplices); - shader.SetBuffer(kernel, "positions", solver.positionsBuffer); - shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); - shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); - shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); - shader.SetBuffer(kernel, "transforms", world.transformsBuffer); - shader.SetBuffer(kernel, "shapes", world.shapesBuffer); - shader.SetBuffer(kernel, "contactPairs", world.contactPairs); - shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); - shader.SetBuffer(kernel, "contacts", solver.abstraction.colliderContacts.computeBuffer); - shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); - - shader.SetBuffer(kernel, "distanceFieldHeaders", world.distanceFieldHeaders); - shader.SetBuffer(kernel, "dfNodes", world.dfNodes); - - shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)Oni.ShapeType.SignedDistanceField); - } - } - - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeDistanceField.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeDistanceField.cs.meta deleted file mode 100644 index 578a29d2d..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeDistanceField.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e43826d84a91b447c88f6d65a6e329ac -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeEdgeMesh.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeEdgeMesh.cs deleted file mode 100644 index c36045c54..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeEdgeMesh.cs +++ /dev/null @@ -1,53 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeEdgeMesh - { - private ComputeShader shader; - private int kernel; - - public ComputeEdgeMesh() - { - shader = GameObject.Instantiate(Resources.Load("Compute/EdgeMeshShape")); - kernel = shader.FindKernel("GenerateContacts"); - } - - public void GenerateContacts(ComputeSolverImpl solver, ComputeColliderWorld world, float deltaTime) - { - if (world.edgeMeshHeaders != null) - { - shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); - shader.SetInt("pointCount", solver.simplexCounts.pointCount); - shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); - shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); - shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); - shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); - shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); - shader.SetFloat("deltaTime", deltaTime); - - shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); - shader.SetBuffer(kernel, "simplices", solver.simplices); - shader.SetBuffer(kernel, "simplexBounds", solver.simplexBounds); - shader.SetBuffer(kernel, "positions", solver.positionsBuffer); - shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); - shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); - shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); - shader.SetBuffer(kernel, "transforms", world.transformsBuffer); - shader.SetBuffer(kernel, "shapes", world.shapesBuffer); - shader.SetBuffer(kernel, "contactPairs", world.contactPairs); - shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); - shader.SetBuffer(kernel, "contacts", solver.abstraction.colliderContacts.computeBuffer); - shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); - - shader.SetBuffer(kernel, "edgeMeshHeaders", world.edgeMeshHeaders); - shader.SetBuffer(kernel, "edgeBihNodes", world.edgeBihNodes); - shader.SetBuffer(kernel, "edges", world.edges); - shader.SetBuffer(kernel, "edgeVertices", world.edgeVertices); - - shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)Oni.ShapeType.EdgeMesh); - } - } - - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeEdgeMesh.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeEdgeMesh.cs.meta deleted file mode 100644 index a2552e67d..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeEdgeMesh.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6191dad6170694a7c8f9eca0cd733e7a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeHeightField.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeHeightField.cs deleted file mode 100644 index 2e8cd1442..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeHeightField.cs +++ /dev/null @@ -1,51 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeHeightField - { - private ComputeShader shader; - private int kernel; - - public ComputeHeightField() - { - shader = GameObject.Instantiate(Resources.Load("Compute/HeightfieldShape")); - kernel = shader.FindKernel("GenerateContacts"); - } - - public void GenerateContacts(ComputeSolverImpl solver, ComputeColliderWorld world, float deltaTime) - { - if (world.heightFieldHeaders != null) - { - shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); - shader.SetInt("pointCount", solver.simplexCounts.pointCount); - shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); - shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); - shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); - shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); - shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); - shader.SetFloat("deltaTime", deltaTime); - - shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); - shader.SetBuffer(kernel, "simplices", solver.simplices); - shader.SetBuffer(kernel, "simplexBounds", solver.simplexBounds); - shader.SetBuffer(kernel, "positions", solver.positionsBuffer); - shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); - shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); - shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); - shader.SetBuffer(kernel, "transforms", world.transformsBuffer); - shader.SetBuffer(kernel, "shapes", world.shapesBuffer); - shader.SetBuffer(kernel, "contactPairs", world.contactPairs); - shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); - shader.SetBuffer(kernel, "contacts", solver.abstraction.colliderContacts.computeBuffer); - shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); - - shader.SetBuffer(kernel, "heightFieldHeaders", world.heightFieldHeaders); - shader.SetBuffer(kernel, "heightFieldSamples", world.heightFieldSamples); - - shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)Oni.ShapeType.Heightmap); - } - } - - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeHeightField.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeHeightField.cs.meta deleted file mode 100644 index f97c873ae..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeHeightField.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c209374faec0f47adacedb911e8582fd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeSphere.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeSphere.cs deleted file mode 100644 index aa4a272ae..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeSphere.cs +++ /dev/null @@ -1,42 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeSphere - { - private ComputeShader shader; - private int kernel; - - public ComputeSphere() - { - shader = GameObject.Instantiate(Resources.Load("Compute/SphereShape")); - kernel = shader.FindKernel("GenerateContacts"); - } - - public void GenerateContacts(ComputeSolverImpl solver, ComputeColliderWorld world) - { - shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); - shader.SetInt("pointCount", solver.simplexCounts.pointCount); - shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); - shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); - shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); - shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); - shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); - - shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); - shader.SetBuffer(kernel, "simplices", solver.simplices); - shader.SetBuffer(kernel, "positions", solver.positionsBuffer); - shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); - shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); - shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); - shader.SetBuffer(kernel, "transforms", world.transformsBuffer); - shader.SetBuffer(kernel, "shapes", world.shapesBuffer); - shader.SetBuffer(kernel, "contactPairs", world.contactPairs); - shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); - shader.SetBuffer(kernel, "contacts", solver.abstraction.colliderContacts.computeBuffer); - shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); - shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)Oni.ShapeType.Sphere); - } - - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeSphere.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeSphere.cs.meta deleted file mode 100644 index 3a907d4a4..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeSphere.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8994093c1331f405b92c10a6401791d3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeTriangleMesh.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeTriangleMesh.cs deleted file mode 100644 index 5dd29a772..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeTriangleMesh.cs +++ /dev/null @@ -1,53 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeTriangleMesh - { - private ComputeShader shader; - private int kernel; - - public ComputeTriangleMesh() - { - shader = GameObject.Instantiate(Resources.Load("Compute/TriangleMeshShape")); - kernel = shader.FindKernel("GenerateContacts"); - } - - public void GenerateContacts(ComputeSolverImpl solver, ComputeColliderWorld world, float deltaTime) - { - if (world.triangleMeshHeaders != null) - { - shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); - shader.SetInt("pointCount", solver.simplexCounts.pointCount); - shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); - shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); - shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); - shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); - shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); - shader.SetFloat("deltaTime", deltaTime); - - shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); - shader.SetBuffer(kernel, "simplices", solver.simplices); - shader.SetBuffer(kernel, "simplexBounds", solver.simplexBounds); - shader.SetBuffer(kernel, "positions", solver.positionsBuffer); - shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); - shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); - shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); - shader.SetBuffer(kernel, "transforms", world.transformsBuffer); - shader.SetBuffer(kernel, "shapes", world.shapesBuffer); - shader.SetBuffer(kernel, "contactPairs", world.contactPairs); - shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); - shader.SetBuffer(kernel, "contacts", solver.abstraction.colliderContacts.computeBuffer); - shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); - - shader.SetBuffer(kernel, "triangleMeshHeaders", world.triangleMeshHeaders); - shader.SetBuffer(kernel, "bihNodes", world.bihNodes); - shader.SetBuffer(kernel, "triangles", world.triangles); - shader.SetBuffer(kernel, "vertices", world.vertices); - - shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)Oni.ShapeType.TriangleMesh); - } - } - - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeTriangleMesh.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeTriangleMesh.cs.meta deleted file mode 100644 index 5de323c83..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/ComputeTriangleMesh.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f52cda7e406964ef4bf980e6ff1f91ec -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/SpatialQueries.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/SpatialQueries.cs deleted file mode 100644 index 2f93cc574..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/SpatialQueries.cs +++ /dev/null @@ -1,245 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi -{ - - public class SpatialQueries - { - private ComputePrefixSum prefixSum; - - private ComputeShader gridShader; - private int buildKernel; - private int gridPopulationKernel; - private int sortKernel; - private int contactsKernel; - private int clearKernel; - private int prefixSumPairsKernel; - private int sortPairsKernel; - - public GraphicsBuffer sortedShapeIndicesBuffer; - - public GraphicsBuffer cellIndicesBuffer; //for each collider, the IDs of the 8 cells it covers. - public GraphicsBuffer cellOffsetsBuffer; //for each cell, start offset in the sorted span indices buffer. - - public GraphicsBuffer cellCountsBuffer; // for each cell, how many colliders in it. - public GraphicsBuffer offsetInCells; // for each collider, its offset in each of the 8 cells. - public GraphicsBuffer levelPopulation; // buffer storing the lowest and highest populated level. - - private GraphicsBuffer queryTypeCounts; // amount of contacts against each collider type. - public GraphicsBuffer unsortedContactPairs; // unsorted contact pairs. - public GraphicsBuffer contactPairs; // list of contact pairs. - public GraphicsBuffer contactOffsetsPerType; // offset in the contact pairs array for each collider type. - - public GraphicsBuffer dispatchBuffer; // dispatch info for iterating trough contacts. - - private const int maxCells = 512 * 512; - private const int cellsPerShape = 8; - private const int maxGridLevels = 24; - private uint[] queryCountClear = new uint[Oni.QueryTypeCount]; - private uint[] dispatchClear = { 0, 1, 1, 0, // contacts - 0, 1, 1, 0, // pairs - 0, 1, 1, 0, // spheres - 0, 1, 1, 0, // boxes - 0, 1, 1, 0 // rays - }; - - private ComputeSphereQuery spheres; - private ComputeBoxQuery boxes; - private ComputeRayQuery rays; - - public SpatialQueries(uint capacity) - { - gridShader = Resources.Load("Compute/SpatialQueries"); - buildKernel = gridShader.FindKernel("BuildUnsortedList"); - gridPopulationKernel = gridShader.FindKernel("FindPopulatedLevels"); - sortKernel = gridShader.FindKernel("SortList"); - contactsKernel = gridShader.FindKernel("BuildContactList"); - clearKernel = gridShader.FindKernel("Clear"); - prefixSumPairsKernel = gridShader.FindKernel("PrefixSumColliderCounts"); - sortPairsKernel = gridShader.FindKernel("SortContactPairs"); - - gridShader.SetInt("shapeTypeCount", Oni.QueryTypeCount); - gridShader.SetInt("cellsPerShape", cellsPerShape); - gridShader.SetInt("maxCells", (int)maxCells); - - cellOffsetsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxCells, 4); - cellCountsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxCells, 4); - levelPopulation = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxGridLevels + 1, 4); - dispatchBuffer = new GraphicsBuffer(GraphicsBuffer.Target.IndirectArguments, dispatchClear.Length, sizeof(uint)); - - queryTypeCounts = new GraphicsBuffer(GraphicsBuffer.Target.Structured, Oni.QueryTypeCount, 4); - contactOffsetsPerType = new GraphicsBuffer(GraphicsBuffer.Target.Structured, Oni.QueryTypeCount + 1, 4); - - prefixSum = new ComputePrefixSum(maxCells); - spheres = new ComputeSphereQuery(); - boxes = new ComputeBoxQuery(); - rays = new ComputeRayQuery(); - - SetCapacity(capacity); - } - - public void Dispose() - { - prefixSum?.Dispose(); - - cellOffsetsBuffer?.Dispose(); - cellCountsBuffer?.Dispose(); - levelPopulation?.Dispose(); - dispatchBuffer?.Dispose(); - - queryTypeCounts?.Dispose(); - contactOffsetsPerType?.Dispose(); - - DisposeOfResultsData(); - DisposeOfQueryData(); - } - - private void DisposeOfResultsData() - { - contactPairs?.Dispose(); - unsortedContactPairs?.Dispose(); - } - - private void DisposeOfQueryData() - { - cellIndicesBuffer?.Dispose(); - offsetInCells?.Dispose(); - sortedShapeIndicesBuffer?.Dispose(); - } - - private void SetCapacity(uint capacity) - { - DisposeOfResultsData(); - - gridShader.SetInt("maxResults", (int)capacity); - - if (capacity > 0) - { - unsortedContactPairs = new GraphicsBuffer(GraphicsBuffer.Target.Structured, (int)capacity, 8); - contactPairs = new GraphicsBuffer(GraphicsBuffer.Target.Structured, (int)capacity, 8); - } - } - - public void SpatialQuery(ComputeSolverImpl solver, - GraphicsBuffer shapes, - GraphicsBuffer transforms, - GraphicsBuffer results) - { - results.SetCounterValue(0); - - if (solver.activeParticlesBuffer == null || solver.simplices == null) - return; - - // If the maximum amount of query results has changed, set capacity: - if (contactPairs == null || !contactPairs.IsValid() || contactPairs.count != solver.abstraction.maxQueryResults) - SetCapacity(solver.abstraction.maxQueryResults); - - // In case we still have zero capacity, just bail out. - if (contactPairs == null || !contactPairs.IsValid()) - return; - - // Check whether we need to reallocate space for queries: - if (cellIndicesBuffer == null || !cellIndicesBuffer.IsValid() || shapes.count * cellsPerShape >= cellIndicesBuffer.count) - { - DisposeOfQueryData(); - - cellIndicesBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, shapes.count * cellsPerShape * 2, 4); - offsetInCells = new GraphicsBuffer(GraphicsBuffer.Target.Structured, shapes.count * cellsPerShape * 2, 4); - sortedShapeIndicesBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, shapes.count * cellsPerShape * 2, 4); - } - - gridShader.SetInt("queryCount", shapes.count); - - int particleThreadGroups = ComputeMath.ThreadGroupCount(solver.simplexCounts.simplexCount, 128); - int shapeThreadGroups = ComputeMath.ThreadGroupCount(shapes.count, 128); - int capacityThreadGroups = ComputeMath.ThreadGroupCount(shapes.count * 8, 128); - int cellThreadGroups = ComputeMath.ThreadGroupCount(maxCells, 128); - - queryTypeCounts.SetData(queryCountClear); - dispatchBuffer.SetData(dispatchClear); - - // clear grid: - gridShader.SetBuffer(clearKernel, "cellOffsets", cellOffsetsBuffer); - gridShader.SetBuffer(clearKernel, "cellIndices", cellIndicesBuffer); - gridShader.SetBuffer(clearKernel, "cellCounts", cellCountsBuffer); - gridShader.SetBuffer(clearKernel, "levelPopulation", levelPopulation); - gridShader.Dispatch(clearKernel, Mathf.Max(cellThreadGroups, capacityThreadGroups), 1, 1); - - // build cell list: - gridShader.SetBuffer(buildKernel, "shapes", shapes); - gridShader.SetBuffer(buildKernel, "transforms", transforms); - gridShader.SetBuffer(buildKernel, "cellIndices", cellIndicesBuffer); - gridShader.SetBuffer(buildKernel, "cellCounts", cellCountsBuffer); - gridShader.SetBuffer(buildKernel, "offsetInCells", offsetInCells); - gridShader.SetBuffer(buildKernel, "levelPopulation", levelPopulation); - gridShader.SetBuffer(buildKernel, "worldToSolver", solver.worldToSolverBuffer); - gridShader.Dispatch(buildKernel, shapeThreadGroups, 1, 1); - - // find populated grid levels: - gridShader.SetBuffer(gridPopulationKernel, "levelPopulation", levelPopulation); - gridShader.Dispatch(gridPopulationKernel, 1, 1, 1); - - // prefix sum: - prefixSum.Sum(cellCountsBuffer, cellOffsetsBuffer); - - // sort query indices: - gridShader.SetBuffer(sortKernel, "sortedColliderIndices", sortedShapeIndicesBuffer); - gridShader.SetBuffer(sortKernel, "offsetInCells", offsetInCells); - gridShader.SetBuffer(sortKernel, "cellIndices", cellIndicesBuffer); - gridShader.SetBuffer(sortKernel, "cellOffsets", cellOffsetsBuffer); - gridShader.Dispatch(sortKernel, capacityThreadGroups, 1, 1); - - - gridShader.SetInt("pointCount", solver.simplexCounts.pointCount); - gridShader.SetInt("edgeCount", solver.simplexCounts.edgeCount); - gridShader.SetInt("triangleCount", solver.simplexCounts.triangleCount); - gridShader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); - gridShader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); - gridShader.SetInt("mode", (int)solver.abstraction.parameters.mode); - - gridShader.SetBuffer(contactsKernel, "simplices", solver.simplices); - gridShader.SetBuffer(contactsKernel, "simplexBounds", solver.simplexBounds); - gridShader.SetBuffer(contactsKernel, "positions", solver.positionsBuffer); - gridShader.SetBuffer(contactsKernel, "orientations", solver.orientationsBuffer); - gridShader.SetBuffer(contactsKernel, "principalRadii", solver.principalRadiiBuffer); - gridShader.SetBuffer(contactsKernel, "filters", solver.filtersBuffer); - gridShader.SetBuffer(contactsKernel, "sortedColliderIndices", sortedShapeIndicesBuffer); - gridShader.SetBuffer(contactsKernel, "transforms", transforms); - gridShader.SetBuffer(contactsKernel, "shapes", shapes); - gridShader.SetBuffer(contactsKernel, "collisionMaterialIndices", solver.collisionMaterialIndexBuffer); - gridShader.SetBuffer(contactsKernel, "cellIndices", cellIndicesBuffer); - gridShader.SetBuffer(contactsKernel, "cellOffsets", cellOffsetsBuffer); - gridShader.SetBuffer(contactsKernel, "cellCounts", cellCountsBuffer); - gridShader.SetBuffer(contactsKernel, "levelPopulation", levelPopulation); - - gridShader.SetBuffer(contactsKernel, "solverToWorld", solver.solverToWorldBuffer); - gridShader.SetBuffer(contactsKernel, "worldToSolver", solver.worldToSolverBuffer); - gridShader.SetBuffer(contactsKernel, "colliderTypeCounts", queryTypeCounts); - gridShader.SetBuffer(contactsKernel, "unsortedContactPairs", unsortedContactPairs); - gridShader.SetBuffer(contactsKernel, "dispatchBuffer", dispatchBuffer); - - gridShader.Dispatch(contactsKernel, particleThreadGroups, 1, 1); - - gridShader.SetBuffer(prefixSumPairsKernel, "colliderTypeCounts", queryTypeCounts); - gridShader.SetBuffer(prefixSumPairsKernel, "contactOffsetsPerType", contactOffsetsPerType); - gridShader.SetBuffer(prefixSumPairsKernel, "dispatchBuffer", dispatchBuffer); - - gridShader.Dispatch(prefixSumPairsKernel, 1, 1, 1); - - gridShader.SetBuffer(sortPairsKernel, "shapes", shapes); - gridShader.SetBuffer(sortPairsKernel, "unsortedContactPairs", unsortedContactPairs); - gridShader.SetBuffer(sortPairsKernel, "contactPairs", contactPairs); - gridShader.SetBuffer(sortPairsKernel, "colliderTypeCounts", queryTypeCounts); - gridShader.SetBuffer(sortPairsKernel, "contactOffsetsPerType", contactOffsetsPerType); - gridShader.SetBuffer(sortPairsKernel, "dispatchBuffer", dispatchBuffer); - - gridShader.DispatchIndirect(sortPairsKernel, dispatchBuffer, 16); - - boxes.GetResults(solver, this, transforms, shapes, results); - spheres.GetResults(solver, this, transforms, shapes, results); - rays.GetResults(solver, this, transforms, shapes, results); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/SpatialQueries.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/SpatialQueries.cs.meta deleted file mode 100644 index 6edfb4372..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Collisions/SpatialQueries.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 01c4905e2f6964e7b91a3262bbd54229 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/ComputeBackend.cs b/Assets/Obi/Scripts/Common/Backends/Compute/ComputeBackend.cs deleted file mode 100644 index 4ca52c2c5..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/ComputeBackend.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace Obi -{ - public class ComputeBackend : IObiBackend - { - #region Solver - public ISolverImpl CreateSolver(ObiSolver solver, int capacity) - { - return new ComputeSolverImpl(solver); - } - public void DestroySolver(ISolverImpl solver) - { - if (solver != null) - solver.Destroy(); - } - #endregion - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/ComputeBackend.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/ComputeBackend.cs.meta deleted file mode 100644 index af17c5d58..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/ComputeBackend.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8c68d8c4a741f459ea53d69f8eddbfef -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/ComputeJobHandle.cs b/Assets/Obi/Scripts/Common/Backends/Compute/ComputeJobHandle.cs deleted file mode 100644 index e60292901..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/ComputeJobHandle.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; - -namespace Obi -{ - public class ComputeJobHandle : IObiJobHandle - { - public void Complete() - { - } - - public void Release() - { - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/ComputeJobHandle.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/ComputeJobHandle.cs.meta deleted file mode 100644 index 0b145fa5d..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/ComputeJobHandle.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4dc5d7005f3f2458bbdc5c1756153cac -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/ComputeMath.cs b/Assets/Obi/Scripts/Common/Backends/Compute/ComputeMath.cs deleted file mode 100644 index 7ec820cbd..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/ComputeMath.cs +++ /dev/null @@ -1,16 +0,0 @@ - -namespace Obi -{ - public static class ComputeMath - { - public static int ThreadGroupCount(int elements, int numThreads) - { - return elements / numThreads + 1; - } - - public static int NextMultiple(int baseNumber, int number) - { - return ((baseNumber / number) + 1) * number; - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/ComputeMath.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/ComputeMath.cs.meta deleted file mode 100644 index 62890efdd..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/ComputeMath.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d0df3a211b1614ebbb0f5144e868546e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints.meta deleted file mode 100644 index d57b2cf13..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0040fe7f7368047d29f179b7d7bf4d1a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics.meta deleted file mode 100644 index 783357514..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5b92b6684fbd249cd9732bf9b3303e03 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraints.cs deleted file mode 100644 index 9d3c6b7e8..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraints.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputeAerodynamicConstraints : ComputeConstraintsImpl - { - public ComputeShader constraintsShader; - public int projectKernel; - - public ComputeAerodynamicConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Aerodynamics) - { - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/AerodynamicConstraints")); - projectKernel = constraintsShader.FindKernel("Project"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputeAerodynamicConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputeAerodynamicConstraintsBatch); - batch.Destroy(); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraints.cs.meta deleted file mode 100644 index ec3d6752e..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b5bb44136361b4a2d948bf85825e53b9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraintsBatch.cs deleted file mode 100644 index a5f725462..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraintsBatch.cs +++ /dev/null @@ -1,52 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeAerodynamicConstraintsBatch : ComputeConstraintsBatchImpl, IAerodynamicConstraintsBatchImpl - { - GraphicsBuffer aerodynamicCoeffs; - - public ComputeAerodynamicConstraintsBatch(ComputeAerodynamicConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.Aerodynamics; - } - - public void SetAerodynamicConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList aerodynamicCoeffs, int count) - { - this.particleIndices = particleIndices.AsComputeBuffer(); - this.aerodynamicCoeffs = aerodynamicCoeffs.AsComputeBuffer(); - - m_ConstraintCount = count; - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - if (m_ConstraintCount > 0) - { - var shader = ((ComputeAerodynamicConstraints)m_Constraints).constraintsShader; - int projectKernel = ((ComputeAerodynamicConstraints)m_Constraints).projectKernel; - - shader.SetBuffer(projectKernel, "particleIndices", particleIndices); - shader.SetBuffer(projectKernel, "aerodynamicCoeffs", aerodynamicCoeffs); - - shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(projectKernel, "normals", solverImplementation.normalsBuffer); - shader.SetBuffer(projectKernel, "wind", solverImplementation.windBuffer); - shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(projectKernel, "velocities", solverImplementation.velocitiesBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("deltaTime", substepTime); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(projectKernel, threadGroups, 1, 1); - } - } - - public override void Apply(float substepTime) - { - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraintsBatch.cs.meta deleted file mode 100644 index d19b18bc4..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Aerodynamics/ComputeAerodynamicConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 84f8c85144ba84d59bdf603d907ae5fb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend.meta deleted file mode 100644 index d595c99fa..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d16c953a082614e88bd02d0f99035c3a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraints.cs deleted file mode 100644 index 29de0b6fc..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraints.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputeBendConstraints : ComputeConstraintsImpl - { - public ComputeShader constraintsShader; - public int projectKernel; - public int applyKernel; - - public ComputeBendConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Bending) - { - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/BendConstraints")); - projectKernel = constraintsShader.FindKernel("Project"); - applyKernel = constraintsShader.FindKernel("Apply"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputeBendConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputeBendConstraintsBatch); - batch.Destroy(); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraints.cs.meta deleted file mode 100644 index cca007683..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ac9c52f073f794c47a6cbb7b41cf023c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraintsBatch.cs deleted file mode 100644 index 7c0f7da7b..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraintsBatch.cs +++ /dev/null @@ -1,75 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeBendConstraintsBatch : ComputeConstraintsBatchImpl, IBendConstraintsBatchImpl - { - GraphicsBuffer restBends; - GraphicsBuffer stiffnesses; - - public ComputeBendConstraintsBatch(ComputeBendConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.Bending; - } - - public void SetBendConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList restBends, ObiNativeVector2List bendingStiffnesses, ObiNativeVector2List plasticity, ObiNativeFloatList lambdas, int count) - { - this.particleIndices = particleIndices.AsComputeBuffer(); - this.restBends = restBends.AsComputeBuffer(); - this.stiffnesses = bendingStiffnesses.AsComputeBuffer(); - this.lambdas = lambdas.AsComputeBuffer(); - this.lambdasList = lambdas; - - m_ConstraintCount = count; - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - if (m_ConstraintCount > 0) - { - var shader = ((ComputeBendConstraints)m_Constraints).constraintsShader; - int projectKernel = ((ComputeBendConstraints)m_Constraints).projectKernel; - - shader.SetBuffer(projectKernel, "particleIndices", particleIndices); - shader.SetBuffer(projectKernel, "restBends", restBends); - shader.SetBuffer(projectKernel, "stiffnesses", stiffnesses); - shader.SetBuffer(projectKernel, "lambdas", lambdas); - - shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("deltaTime", substepTime); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(projectKernel, threadGroups, 1, 1); - } - } - - public override void Apply(float deltaTime) - { - if (m_ConstraintCount > 0) - { - var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); - - var shader = ((ComputeBendConstraints)m_Constraints).constraintsShader; - int applyKernel = ((ComputeBendConstraints)m_Constraints).applyKernel; - - shader.SetBuffer(applyKernel, "particleIndices", particleIndices); - shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("sorFactor", parameters.SORFactor); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(applyKernel, threadGroups, 1, 1); - } - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraintsBatch.cs.meta deleted file mode 100644 index 3c5bc0d66..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Bend/ComputeBendConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 49d201b7a15f44e17b27019b972e9844 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist.meta deleted file mode 100644 index 230c84ffb..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 253f34729aa7d4bbabe8eca30fdb88af -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraints.cs deleted file mode 100644 index 3d51f9465..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraints.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputeBendTwistConstraints : ComputeConstraintsImpl - { - public ComputeShader constraintsShader; - public int projectKernel; - public int applyKernel; - - public ComputeBendTwistConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.BendTwist) - { - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/BendTwistConstraints")); - projectKernel = constraintsShader.FindKernel("Project"); - applyKernel = constraintsShader.FindKernel("Apply"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputeBendTwistConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputeBendTwistConstraintsBatch); - batch.Destroy(); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraints.cs.meta deleted file mode 100644 index 1ca860429..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 442edc2bc0aec4bf181b4332f0c8dd46 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraintsBatch.cs deleted file mode 100644 index 3efed6f5f..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraintsBatch.cs +++ /dev/null @@ -1,81 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeBendTwistConstraintsBatch : ComputeConstraintsBatchImpl, IBendTwistConstraintsBatchImpl - { - GraphicsBuffer orientationIndices; - GraphicsBuffer restDarboux; - GraphicsBuffer stiffnesses; - GraphicsBuffer plasticity; - - public ComputeBendTwistConstraintsBatch(ComputeBendTwistConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.BendTwist; - } - - public void SetBendTwistConstraints(ObiNativeIntList orientationIndices, ObiNativeQuaternionList restDarboux, ObiNativeVector3List stiffnesses, ObiNativeVector2List plasticity, ObiNativeFloatList lambdas, int count) - { - this.orientationIndices = orientationIndices.AsComputeBuffer(); - this.restDarboux = restDarboux.AsComputeBuffer(); - this.stiffnesses = stiffnesses.AsComputeBuffer(); - this.plasticity = plasticity.AsComputeBuffer(); - this.lambdas = lambdas.AsComputeBuffer(); - this.lambdasList = lambdas; - - m_ConstraintCount = count; - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - if (m_ConstraintCount > 0) - { - var shader = ((ComputeBendTwistConstraints)m_Constraints).constraintsShader; - int projectKernel = ((ComputeBendTwistConstraints)m_Constraints).projectKernel; - - shader.SetBuffer(projectKernel, "orientationIndices", orientationIndices); - shader.SetBuffer(projectKernel, "restDarboux", restDarboux); - shader.SetBuffer(projectKernel, "stiffnesses", stiffnesses); - shader.SetBuffer(projectKernel, "plasticity", plasticity); - shader.SetBuffer(projectKernel, "lambdas", lambdas); - - shader.SetBuffer(projectKernel, "orientations", solverImplementation.orientationsBuffer); - shader.SetBuffer(projectKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); - - shader.SetBuffer(projectKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); - shader.SetBuffer(projectKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("deltaTime", substepTime); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(projectKernel, threadGroups, 1, 1); - } - } - - public override void Apply(float substepTime) - { - if (m_ConstraintCount > 0) - { - var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); - - var shader = ((ComputeBendTwistConstraints)m_Constraints).constraintsShader; - int applyKernel = ((ComputeBendTwistConstraints)m_Constraints).applyKernel; - - shader.SetBuffer(applyKernel, "orientationIndices", orientationIndices); - shader.SetBuffer(applyKernel, "orientations", solverImplementation.orientationsBuffer); - - shader.SetBuffer(applyKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); - shader.SetBuffer(applyKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("sorFactor", parameters.SORFactor); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(applyKernel, threadGroups, 1, 1); - } - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraintsBatch.cs.meta deleted file mode 100644 index 10707e48a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/BendTwist/ComputeBendTwistConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f5806beebf896460d87156df3e045b57 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain.meta deleted file mode 100644 index e9b29a821..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 06d157d45e7fd46f08b501d67d3d632b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraints.cs deleted file mode 100644 index 354112192..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraints.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputeChainConstraints : ComputeConstraintsImpl - { - public ComputeShader constraintsShader; - public int projectKernel; - public int applyKernel; - - public ComputeChainConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Chain) - { - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/ChainConstraints")); - projectKernel = constraintsShader.FindKernel("Project"); - applyKernel = constraintsShader.FindKernel("Apply"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputeChainConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputeChainConstraintsBatch); - batch.Destroy(); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraints.cs.meta deleted file mode 100644 index 923342584..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0c28cd2bd740f4bebb4c8559b395ed0e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraintsBatch.cs deleted file mode 100644 index 2009f6ac9..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraintsBatch.cs +++ /dev/null @@ -1,97 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeChainConstraintsBatch : ComputeConstraintsBatchImpl, IChainConstraintsBatchImpl - { - GraphicsBuffer firstIndex; - GraphicsBuffer numIndices; - GraphicsBuffer restLengths; - - GraphicsBuffer ni; - GraphicsBuffer diagonals; - - public ComputeChainConstraintsBatch(ComputeChainConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.Chain; - } - - public void SetChainConstraints(ObiNativeIntList particleIndices, ObiNativeVector2List restLengths, ObiNativeIntList firstIndex, ObiNativeIntList numIndex, int count) - { - this.particleIndices = particleIndices.AsComputeBuffer(); - this.firstIndex = firstIndex.AsComputeBuffer(); - this.numIndices = numIndex.AsComputeBuffer(); - this.restLengths = restLengths.AsComputeBuffer(); - - int numEdges = 0; - for (int i = 0; i < numIndex.count; ++i) - numEdges += numIndex[i] - 1; - - ni = new GraphicsBuffer(GraphicsBuffer.Target.Structured, numEdges, 16); - diagonals = new GraphicsBuffer(GraphicsBuffer.Target.Structured, numEdges, 12); - - m_ConstraintCount = count; - } - - public override void Destroy() - { - ni.Dispose(); - diagonals.Dispose(); - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - if (m_ConstraintCount > 0) - { - var shader = ((ComputeChainConstraints)m_Constraints).constraintsShader; - int projectKernel = ((ComputeChainConstraints)m_Constraints).projectKernel; - - shader.SetBuffer(projectKernel, "particleIndices", particleIndices); - shader.SetBuffer(projectKernel, "firstIndex", firstIndex); - shader.SetBuffer(projectKernel, "numIndices", numIndices); - shader.SetBuffer(projectKernel, "restLengths", restLengths); - - shader.SetBuffer(projectKernel, "ni", ni); - shader.SetBuffer(projectKernel, "diagonals", diagonals); - - shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("deltaTime", substepTime); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(projectKernel, threadGroups, 1, 1); - } - } - - public override void Apply(float substepTime) - { - if (m_ConstraintCount > 0) - { - var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); - - var shader = ((ComputeChainConstraints)m_Constraints).constraintsShader; - int applyKernel = ((ComputeChainConstraints)m_Constraints).applyKernel; - - shader.SetBuffer(applyKernel, "particleIndices", particleIndices); - shader.SetBuffer(applyKernel, "firstIndex", firstIndex); - shader.SetBuffer(applyKernel, "numIndices", numIndices); - - shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("sorFactor", parameters.SORFactor); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(applyKernel, threadGroups, 1, 1); - } - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraintsBatch.cs.meta deleted file mode 100644 index e659564bd..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Chain/ComputeChainConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5d067c1d8b1e94c51bbb85f0f81754ad -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision.meta deleted file mode 100644 index 2da8691e7..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ff5938de5299c42278caf6e3181426ed -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraints.cs deleted file mode 100644 index 9b0515e2a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraints.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputeColliderCollisionConstraints : ComputeConstraintsImpl - { - public ComputeShader constraintsShader; - public int clearKernel; - public int initializeKernel; - public int projectKernel; - public int applyKernel; - - public ComputeColliderCollisionConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Collision) - { - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/ColliderCollisionConstraints")); - clearKernel = constraintsShader.FindKernel("Clear"); - initializeKernel = constraintsShader.FindKernel("Initialize"); - projectKernel = constraintsShader.FindKernel("Project"); - applyKernel = constraintsShader.FindKernel("Apply"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputeColliderCollisionConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputeColliderCollisionConstraintsBatch); - batch.Destroy(); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraints.cs.meta deleted file mode 100644 index 9aa02e508..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1a86d11bb25f6409a95e22186e98474c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraintsBatch.cs deleted file mode 100644 index a0b598f82..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraintsBatch.cs +++ /dev/null @@ -1,126 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeColliderCollisionConstraintsBatch : ComputeConstraintsBatchImpl, IColliderCollisionConstraintsBatchImpl - { - - public ComputeColliderCollisionConstraintsBatch(ComputeColliderCollisionConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.Collision; - } - - public override void Initialize(float stepTime, float substepTime, int steps, float timeLeft) - { - if (solverAbstraction.simplexCounts.simplexCount > 0 && solverImplementation.colliderGrid.colliderCount > 0) - { - var shader = ((ComputeColliderCollisionConstraints)m_Constraints).constraintsShader; - int initializeKernel = ((ComputeColliderCollisionConstraints)m_Constraints).initializeKernel; - int clearKernel = ((ComputeColliderCollisionConstraints)m_Constraints).clearKernel; - - shader.SetInt("pointCount", solverAbstraction.simplexCounts.pointCount); - shader.SetInt("edgeCount", solverAbstraction.simplexCounts.edgeCount); - shader.SetInt("triangleCount", solverAbstraction.simplexCounts.triangleCount); - - shader.SetBuffer(clearKernel, "contacts", solverAbstraction.colliderContacts.computeBuffer); - shader.SetBuffer(clearKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); - shader.SetBuffer(clearKernel, "RW_rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); - shader.SetBuffer(clearKernel, "dispatchBuffer", this.solverImplementation.colliderGrid.dispatchBuffer); - - shader.SetBuffer(initializeKernel, "contacts", solverAbstraction.colliderContacts.computeBuffer); - shader.SetBuffer(initializeKernel, "effectiveMasses", solverAbstraction.contactEffectiveMasses.computeBuffer); - shader.SetBuffer(initializeKernel, "dispatchBuffer", this.solverImplementation.colliderGrid.dispatchBuffer); - shader.SetBuffer(initializeKernel, "collisionMaterials", this.solverImplementation.colliderGrid.materialsBuffer); - - shader.SetBuffer(initializeKernel, "simplices", this.solverImplementation.simplices); - shader.SetBuffer(initializeKernel, "transforms", this.solverImplementation.colliderGrid.transformsBuffer); - shader.SetBuffer(initializeKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); - shader.SetBuffer(initializeKernel, "RW_rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); - shader.SetBuffer(initializeKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(initializeKernel, "orientations", solverImplementation.orientationsBuffer); - shader.SetBuffer(initializeKernel, "prevPositions", solverImplementation.prevPositionsBuffer); - shader.SetBuffer(initializeKernel, "prevOrientations", solverImplementation.prevOrientationsBuffer); - shader.SetBuffer(initializeKernel, "velocities", solverImplementation.velocitiesBuffer); - shader.SetBuffer(initializeKernel, "principalRadii", solverImplementation.principalRadiiBuffer); - shader.SetBuffer(initializeKernel, "collisionMaterialIndices", solverImplementation.collisionMaterialIndexBuffer); - shader.SetBuffer(initializeKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - shader.SetBuffer(initializeKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(initializeKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(initializeKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); - - shader.SetBuffer(initializeKernel, "linearDeltasAsInt", solverImplementation.rigidbodyLinearDeltasIntBuffer); - shader.SetBuffer(initializeKernel, "angularDeltasAsInt", solverImplementation.rigidbodyAngularDeltasIntBuffer); - - shader.SetBuffer(initializeKernel, "inertialSolverFrame", solverImplementation.inertialFrameBuffer); - - shader.SetFloat("substepTime", substepTime); - - shader.DispatchIndirect(clearKernel, this.solverImplementation.colliderGrid.dispatchBuffer); - shader.DispatchIndirect(initializeKernel, this.solverImplementation.colliderGrid.dispatchBuffer); - } - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - if (solverAbstraction.simplexCounts.simplexCount > 0 && solverImplementation.colliderGrid.colliderCount > 0) - { - var shader = ((ComputeColliderCollisionConstraints)m_Constraints).constraintsShader; - int projectKernel = ((ComputeColliderCollisionConstraints)m_Constraints).projectKernel; - - shader.SetBuffer(projectKernel, "contacts", solverAbstraction.colliderContacts.computeBuffer); - shader.SetBuffer(projectKernel, "effectiveMasses", this.solverAbstraction.contactEffectiveMasses.computeBuffer); - shader.SetBuffer(projectKernel, "dispatchBuffer", this.solverImplementation.colliderGrid.dispatchBuffer); - shader.SetBuffer(projectKernel, "collisionMaterials", this.solverImplementation.colliderGrid.materialsBuffer); - - shader.SetBuffer(projectKernel, "simplices", this.solverImplementation.simplices); - shader.SetBuffer(projectKernel, "transforms", this.solverImplementation.colliderGrid.transformsBuffer); - shader.SetBuffer(projectKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); - shader.SetBuffer(projectKernel, "rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); - shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(projectKernel, "prevPositions", solverImplementation.prevPositionsBuffer); - shader.SetBuffer(projectKernel, "orientations", solverImplementation.orientationsBuffer); - shader.SetBuffer(projectKernel, "prevOrientations", solverImplementation.prevOrientationsBuffer); - shader.SetBuffer(projectKernel, "principalRadii", solverImplementation.principalRadiiBuffer); - shader.SetBuffer(projectKernel, "collisionMaterialIndices", solverImplementation.collisionMaterialIndexBuffer); - shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); - - shader.SetBuffer(projectKernel, "linearDeltasAsInt", solverImplementation.rigidbodyLinearDeltasIntBuffer); - shader.SetBuffer(projectKernel, "angularDeltasAsInt", solverImplementation.rigidbodyAngularDeltasIntBuffer); - - shader.SetBuffer(projectKernel, "inertialSolverFrame", solverImplementation.inertialFrameBuffer); - shader.SetFloat("substepTime", substepTime); - shader.SetFloat("stepTime", stepTime); - shader.SetInt("steps", steps); - shader.SetFloat("timeLeft", timeLeft); - shader.SetFloat("maxDepenetration", solverAbstraction.parameters.maxDepenetration); - - shader.DispatchIndirect(projectKernel, this.solverImplementation.colliderGrid.dispatchBuffer); - } - } - - public override void Apply(float substepTime) - { - var shader = ((ComputeColliderCollisionConstraints)m_Constraints).constraintsShader; - int applyKernel = ((ComputeColliderCollisionConstraints)m_Constraints).applyKernel; - - if (solverImplementation.activeParticleCount > 0) - { - var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); - - shader.SetBuffer(applyKernel, "particleIndices", this.solverImplementation.activeParticlesBuffer); - shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - - shader.SetInt("particleCount", this.solverAbstraction.activeParticleCount); - shader.SetFloat("sorFactor", parameters.SORFactor); - - int threadGroups = ComputeMath.ThreadGroupCount(this.solverAbstraction.activeParticleCount, 128); - shader.Dispatch(applyKernel, threadGroups, 1, 1); - } - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraintsBatch.cs.meta deleted file mode 100644 index aea17db9b..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderCollisionConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d33af332861d148229253e82497aa0df -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraints.cs deleted file mode 100644 index 1aeff4016..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraints.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputeColliderFrictionConstraints : ComputeConstraintsImpl - { - public ComputeShader constraintsShader; - public int projectKernel; - public int applyKernel; - - public ComputeColliderFrictionConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Friction) - { - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/ColliderFrictionConstraints")); - projectKernel = constraintsShader.FindKernel("Project"); - applyKernel = constraintsShader.FindKernel("Apply"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputeColliderFrictionConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputeColliderFrictionConstraintsBatch); - batch.Destroy(); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraints.cs.meta deleted file mode 100644 index 5bf1233ad..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b15312c6313124df298754c7654b62bc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraintsBatch.cs deleted file mode 100644 index a144d81e9..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraintsBatch.cs +++ /dev/null @@ -1,86 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeColliderFrictionConstraintsBatch : ComputeConstraintsBatchImpl, IColliderCollisionConstraintsBatchImpl - { - - public ComputeColliderFrictionConstraintsBatch(ComputeColliderFrictionConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.Friction; - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - if (solverAbstraction.simplexCounts.simplexCount > 0 && solverImplementation.colliderGrid.colliderCount > 0) - { - var shader = ((ComputeColliderFrictionConstraints)m_Constraints).constraintsShader; - int projectKernel = ((ComputeColliderFrictionConstraints)m_Constraints).projectKernel; - - shader.SetInt("pointCount", solverAbstraction.simplexCounts.pointCount); - shader.SetInt("edgeCount", solverAbstraction.simplexCounts.edgeCount); - shader.SetInt("triangleCount", solverAbstraction.simplexCounts.triangleCount); - - shader.SetBuffer(projectKernel, "contacts", solverAbstraction.colliderContacts.computeBuffer); - shader.SetBuffer(projectKernel, "effectiveMasses", solverAbstraction.contactEffectiveMasses.computeBuffer); - shader.SetBuffer(projectKernel, "dispatchBuffer", this.solverImplementation.colliderGrid.dispatchBuffer); - shader.SetBuffer(projectKernel, "collisionMaterials", this.solverImplementation.colliderGrid.materialsBuffer); - - shader.SetBuffer(projectKernel, "simplices", this.solverImplementation.simplices); - shader.SetBuffer(projectKernel, "transforms", this.solverImplementation.colliderGrid.transformsBuffer); - shader.SetBuffer(projectKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); - shader.SetBuffer(projectKernel, "rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); - shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(projectKernel, "collisionMaterialIndices", solverImplementation.collisionMaterialIndexBuffer); - shader.SetBuffer(projectKernel, "orientations", solverImplementation.orientationsBuffer); - shader.SetBuffer(projectKernel, "prevPositions", solverImplementation.prevPositionsBuffer); - shader.SetBuffer(projectKernel, "prevOrientations", solverImplementation.prevOrientationsBuffer); - shader.SetBuffer(projectKernel, "principalRadii", solverImplementation.principalRadiiBuffer); - shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(projectKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); - - shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(projectKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); - shader.SetBuffer(projectKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); - - shader.SetBuffer(projectKernel, "linearDeltasAsInt", solverImplementation.rigidbodyLinearDeltasIntBuffer); - shader.SetBuffer(projectKernel, "angularDeltasAsInt", solverImplementation.rigidbodyAngularDeltasIntBuffer); - - shader.SetBuffer(projectKernel, "solverToWorld", solverImplementation.solverToWorldBuffer); - shader.SetBuffer(projectKernel, "inertialSolverFrame", solverImplementation.inertialFrameBuffer); - shader.SetFloat("stepTime", stepTime); - shader.SetFloat("substepTime", substepTime); - - shader.DispatchIndirect(projectKernel, this.solverImplementation.colliderGrid.dispatchBuffer); - } - } - - public override void Apply(float substepTime) - { - var shader = ((ComputeColliderFrictionConstraints)m_Constraints).constraintsShader; - int applyKernel = ((ComputeColliderFrictionConstraints)m_Constraints).applyKernel; - - if (solverImplementation.activeParticleCount > 0) - { - var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); - - shader.SetBuffer(applyKernel, "particleIndices", this.solverImplementation.activeParticlesBuffer); - shader.SetBuffer(applyKernel, "RW_positions", solverImplementation.positionsBuffer); - shader.SetBuffer(applyKernel, "RW_orientations", solverImplementation.orientationsBuffer); - shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(applyKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); - shader.SetBuffer(applyKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); - - shader.SetInt("particleCount", this.solverAbstraction.activeParticleCount); - shader.SetFloat("sorFactor", parameters.SORFactor); - - int threadGroups = ComputeMath.ThreadGroupCount(this.solverAbstraction.activeParticleCount, 128); - shader.Dispatch(applyKernel, threadGroups, 1, 1); - - } - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraintsBatch.cs.meta deleted file mode 100644 index 2950234a2..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ColliderCollision/ComputeColliderFrictionConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 24cfbad987ca74ec696ec132558f6103 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsBatchImpl.cs deleted file mode 100644 index f2a168f03..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsBatchImpl.cs +++ /dev/null @@ -1,82 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public abstract class ComputeConstraintsBatchImpl : IConstraintsBatchImpl - { - protected IComputeConstraintsImpl m_Constraints; - protected Oni.ConstraintType m_ConstraintType; - - protected bool m_Enabled = true; - protected int m_ConstraintCount = 0; - - public Oni.ConstraintType constraintType - { - get { return m_ConstraintType; } - } - - public bool enabled - { - set - { - if (m_Enabled != value) - m_Enabled = value; - } - get { return m_Enabled; } - } - - public IConstraints constraints - { - get { return m_Constraints; } - } - - public ObiSolver solverAbstraction - { - get { return ((ComputeSolverImpl)m_Constraints.solver).abstraction; } - } - - public ComputeSolverImpl solverImplementation - { - get { return (ComputeSolverImpl)m_Constraints.solver; } - } - - protected GraphicsBuffer particleIndices; - protected GraphicsBuffer lambdas; - - protected ObiNativeFloatList lambdasList; - - public virtual void Initialize(float stepTime, float substepTime, int steps, float timeLeft) - { - if (lambdasList != null) - { - lambdasList.WipeToZero(); - lambdasList.Upload(); - } - } - - // implemented by concrete constraint subclasses. - public abstract void Evaluate(float stepTime, float substepTime, int steps, float timeLeft); - public abstract void Apply(float substepTime); - - public ComputeConstraintsBatchImpl() { } - - public virtual void Destroy() - { - // clean resources allocated by the batch, no need for a default implementation. - } - - public void SetDependency(IConstraintsBatchImpl batch) - { - // no need to implement. - } - - public void SetConstraintCount(int constraintCount) - { - m_ConstraintCount = constraintCount; - } - public int GetConstraintCount() - { - return m_ConstraintCount; - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsBatchImpl.cs.meta deleted file mode 100644 index d6da30fdb..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 01e582f7ad8544beca43dac2f3af8b37 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsImpl.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsImpl.cs deleted file mode 100644 index e58340325..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsImpl.cs +++ /dev/null @@ -1,126 +0,0 @@ -using UnityEngine; -using Unity.Jobs; -using Unity.Collections; -using System.Collections; -using System.Collections.Generic; - -namespace Obi -{ - public interface IComputeConstraintsImpl : IConstraints - { - void Initialize(float stepTime, float substepTime, int steps, float timeLeft); - void Project(float stepTime, float substepTime, int substeps, float timeLeft); - void Dispose(); - - IConstraintsBatchImpl CreateConstraintsBatch(); - void RemoveBatch(IConstraintsBatchImpl batch); - } - - public abstract class ComputeConstraintsImpl : IComputeConstraintsImpl where T : ComputeConstraintsBatchImpl - { - protected ComputeSolverImpl m_Solver; - public List batches = new List(); - - protected Oni.ConstraintType m_ConstraintType; - - public Oni.ConstraintType constraintType - { - get { return m_ConstraintType; } - } - - public ISolverImpl solver - { - get { return m_Solver; } - } - - public ComputeConstraintsImpl(ComputeSolverImpl solver, Oni.ConstraintType constraintType) - { - this.m_ConstraintType = constraintType; - this.m_Solver = solver; - } - - public virtual void Dispose() - { - - } - - public abstract IConstraintsBatchImpl CreateConstraintsBatch(); - - public abstract void RemoveBatch(IConstraintsBatchImpl batch); - - public virtual int GetConstraintCount() - { - int count = 0; - if (batches == null) return count; - - foreach (T batch in batches) - if (batch != null) - count += batch.GetConstraintCount(); - - return count; - } - - public void Initialize(float stepTime, float substepTime, int steps, float timeLeft) - { - // initialize all batches in parallel: - if (batches.Count > 0) - { - for (int i = 0; i < batches.Count; ++i) - if (batches[i].enabled) batches[i].Initialize(stepTime, substepTime, steps, timeLeft); - } - - } - - public void Project(float stepTime, float substepTime, int substeps, float timeLeft) - { - UnityEngine.Profiling.Profiler.BeginSample("Project"); - - var parameters = m_Solver.abstraction.GetConstraintParameters(m_ConstraintType); - - switch(parameters.evaluationOrder) - { - case Oni.ConstraintParameters.EvaluationOrder.Sequential: - EvaluateSequential(stepTime, substepTime, substeps, timeLeft); - break; - - case Oni.ConstraintParameters.EvaluationOrder.Parallel: - EvaluateParallel(stepTime, substepTime, substeps, timeLeft); - break; - } - - UnityEngine.Profiling.Profiler.EndSample(); - - } - - protected virtual void EvaluateSequential(float stepTime, float substepTime, int substeps, float timeLeft) - { - // evaluate and apply all batches: - for (int i = 0; i < batches.Count; ++i) - { - if (batches[i].enabled) - { - batches[i].Evaluate(stepTime, substepTime, substeps, timeLeft); - batches[i].Apply(substepTime); - } - } - } - - protected virtual void EvaluateParallel(float stepTime, float substepTime, int substeps, float timeLeft) - { - // evaluate all batches: - for (int i = 0; i < batches.Count; ++i) - if (batches[i].enabled) - { - batches[i].Evaluate(stepTime, substepTime, substeps, timeLeft); - } - - // then apply them: - for (int i = 0; i < batches.Count; ++i) - if (batches[i].enabled) - { - batches[i].Apply(substepTime); - } - } - - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsImpl.cs.meta deleted file mode 100644 index f703dbebb..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ComputeConstraintsImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 36bc3e2333033489782d3f9f7781f967 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density.meta deleted file mode 100644 index afcb33290..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e6f9b81a4e3934d66a7268e686756750 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraints.cs deleted file mode 100644 index 5091b97f0..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraints.cs +++ /dev/null @@ -1,187 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputeDensityConstraints : ComputeConstraintsImpl - { - public ComputeShader sortParticlesShader; - public int sortDataKernel; - - public ComputeShader constraintsShader; - public int updateDensitiesKernel; - public int applyKernel; - public int applyPositionDeltaKernel; - public int calculateAtmosphereKernel; - public int applyAtmosphereKernel; - - public int accumSmoothPositionsKernel; - public int accumAnisotropyKernel; - public int averageAnisotropyKernel; - - public ComputeDensityConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Density) - { - sortParticlesShader = GameObject.Instantiate(Resources.Load("Compute/SortParticleData")); - sortDataKernel = sortParticlesShader.FindKernel("SortData"); - - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/DensityConstraints")); - updateDensitiesKernel = constraintsShader.FindKernel("UpdateDensities"); - applyKernel = constraintsShader.FindKernel("Apply"); - applyPositionDeltaKernel = constraintsShader.FindKernel("ApplyPositionDeltas"); - calculateAtmosphereKernel = constraintsShader.FindKernel("CalculateAtmosphere"); - applyAtmosphereKernel = constraintsShader.FindKernel("ApplyAtmosphere"); - - accumSmoothPositionsKernel = constraintsShader.FindKernel("AccumulateSmoothPositions"); - accumAnisotropyKernel = constraintsShader.FindKernel("AccumulateAnisotropy"); - averageAnisotropyKernel = constraintsShader.FindKernel("AverageAnisotropy"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputeDensityConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputeDensityConstraintsBatch); - batch.Destroy(); - } - - public void CopyDataInSortedOrder(bool renderable = false) - { - sortParticlesShader.SetBuffer(sortDataKernel, "sortedToOriginal", m_Solver.particleGrid.sortedFluidIndices); - - if (renderable) - { - sortParticlesShader.SetBuffer(sortDataKernel, "positions", m_Solver.renderablePositionsBuffer); - sortParticlesShader.SetBuffer(sortDataKernel, "principalRadii", m_Solver.renderableRadiiBuffer); - } - else - { - sortParticlesShader.SetBuffer(sortDataKernel, "positions", m_Solver.positionsBuffer); - sortParticlesShader.SetBuffer(sortDataKernel, "principalRadii", m_Solver.principalRadiiBuffer); - } - - sortParticlesShader.SetBuffer(sortDataKernel, "prevPositions", m_Solver.prevPositionsBuffer); - sortParticlesShader.SetBuffer(sortDataKernel, "userData", m_Solver.userDataBuffer); - - sortParticlesShader.SetBuffer(sortDataKernel, "sortedPositions", m_Solver.particleGrid.sortedPositions); - sortParticlesShader.SetBuffer(sortDataKernel, "sortedPrincipalRadii", m_Solver.particleGrid.sortedPrincipalRadii); - sortParticlesShader.SetBuffer(sortDataKernel, "sortedPrevPositions", m_Solver.particleGrid.sortedPrevPosOrientations); - sortParticlesShader.SetBuffer(sortDataKernel, "sortedUserData", m_Solver.particleGrid.sortedUserDataColor); - - sortParticlesShader.SetBuffer(sortDataKernel, "dispatchBuffer", m_Solver.fluidDispatchBuffer); - sortParticlesShader.DispatchIndirect(sortDataKernel, m_Solver.fluidDispatchBuffer); - } - - public void CalculateVelocityCorrections(float deltaTime) - { - if (m_Solver.particleGrid.sortedFluidIndices != null && m_Solver.cellCoordsBuffer != null) - { - constraintsShader.SetFloat("deltaTime", deltaTime); - - constraintsShader.SetBuffer(calculateAtmosphereKernel, "neighborCounts", m_Solver.particleGrid.neighborCounts); - constraintsShader.SetBuffer(calculateAtmosphereKernel, "neighbors", m_Solver.particleGrid.neighbors); - constraintsShader.SetBuffer(calculateAtmosphereKernel, "sortedToOriginal", m_Solver.particleGrid.sortedFluidIndices); - - constraintsShader.SetBuffer(calculateAtmosphereKernel, "invMasses", m_Solver.invMassesBuffer); - constraintsShader.SetBuffer(calculateAtmosphereKernel, "velocities_RO", m_Solver.velocitiesBuffer); - constraintsShader.SetBuffer(calculateAtmosphereKernel, "angularVelocities_RO", m_Solver.angularVelocitiesBuffer); - constraintsShader.SetBuffer(calculateAtmosphereKernel, "vorticity_RO", m_Solver.restOrientationsBuffer); // restOrientations are unused for fluid particles, so we reuse them here. - constraintsShader.SetBuffer(calculateAtmosphereKernel, "vorticityAccelerations", m_Solver.orientationDeltasIntBuffer); // restPositions are unused for fluid particles, so we reuse them here. - constraintsShader.SetBuffer(calculateAtmosphereKernel, "linearAccelerations", m_Solver.positionDeltasIntBuffer); - constraintsShader.SetBuffer(calculateAtmosphereKernel, "angularDiffusion", m_Solver.anisotropiesBuffer); - constraintsShader.SetBuffer(calculateAtmosphereKernel, "linearFromAngular", m_Solver.restPositionsBuffer); - constraintsShader.SetBuffer(calculateAtmosphereKernel, "normals", m_Solver.normalsBuffer); - constraintsShader.SetBuffer(calculateAtmosphereKernel, "userData", m_Solver.userDataBuffer); - constraintsShader.SetBuffer(calculateAtmosphereKernel, "sortedPositions", m_Solver.particleGrid.sortedPositions); - constraintsShader.SetBuffer(calculateAtmosphereKernel, "sortedFluidData_RO", m_Solver.particleGrid.sortedFluidData); - constraintsShader.SetBuffer(calculateAtmosphereKernel, "sortedPrincipalRadii", m_Solver.particleGrid.sortedPrincipalRadii); - constraintsShader.SetBuffer(calculateAtmosphereKernel, "sortedFluidMaterials", m_Solver.particleGrid.sortedFluidMaterials); - constraintsShader.SetBuffer(calculateAtmosphereKernel, "sortedFluidInterface", m_Solver.particleGrid.sortedFluidInterface); - constraintsShader.SetBuffer(calculateAtmosphereKernel, "sortedUserData", m_Solver.particleGrid.sortedUserDataColor); - constraintsShader.SetBuffer(calculateAtmosphereKernel, "fluidData", m_Solver.fluidDataBuffer); - constraintsShader.SetBuffer(calculateAtmosphereKernel, "dispatchBuffer", m_Solver.fluidDispatchBuffer); - - constraintsShader.DispatchIndirect(calculateAtmosphereKernel, m_Solver.fluidDispatchBuffer); - } - } - - public void ApplyVelocityCorrections(float deltaTime) - { - if (m_Solver.particleGrid.sortedFluidIndices != null && m_Solver.cellCoordsBuffer != null) - { - constraintsShader.SetFloat("deltaTime", deltaTime); - - constraintsShader.SetBuffer(applyAtmosphereKernel, "positions", m_Solver.positionsBuffer); - constraintsShader.SetBuffer(applyAtmosphereKernel, "prevPositions", m_Solver.prevPositionsBuffer); - constraintsShader.SetBuffer(applyAtmosphereKernel, "wind", m_Solver.windBuffer); - constraintsShader.SetBuffer(applyAtmosphereKernel, "normals_RO", m_Solver.normalsBuffer); - constraintsShader.SetBuffer(applyAtmosphereKernel, "fluidMaterials2", m_Solver.fluidMaterials2Buffer); - constraintsShader.SetBuffer(applyAtmosphereKernel, "sortedPrincipalRadii", m_Solver.particleGrid.sortedPrincipalRadii); - constraintsShader.SetBuffer(applyAtmosphereKernel, "sortedFluidInterface", m_Solver.particleGrid.sortedFluidInterface); - constraintsShader.SetBuffer(applyAtmosphereKernel, "fluidData_RO", m_Solver.fluidDataBuffer); - constraintsShader.SetBuffer(applyAtmosphereKernel, "linearAccelerations", m_Solver.positionDeltasIntBuffer); - constraintsShader.SetBuffer(applyAtmosphereKernel, "angularDiffusion", m_Solver.anisotropiesBuffer); - constraintsShader.SetBuffer(applyAtmosphereKernel, "vorticity", m_Solver.restOrientationsBuffer); - constraintsShader.SetBuffer(applyAtmosphereKernel, "vorticityAccelerations", m_Solver.orientationDeltasIntBuffer); - constraintsShader.SetBuffer(applyAtmosphereKernel, "linearFromAngular_RO", m_Solver.restPositionsBuffer); - constraintsShader.SetBuffer(applyAtmosphereKernel, "velocities", m_Solver.velocitiesBuffer); - constraintsShader.SetBuffer(applyAtmosphereKernel, "angularVelocities", m_Solver.angularVelocitiesBuffer); - constraintsShader.SetBuffer(applyAtmosphereKernel, "sortedToOriginal", m_Solver.particleGrid.sortedFluidIndices); - constraintsShader.SetBuffer(applyAtmosphereKernel, "dispatchBuffer", m_Solver.fluidDispatchBuffer); - - constraintsShader.DispatchIndirect(applyAtmosphereKernel, m_Solver.fluidDispatchBuffer); - } - } - - public void CalculateAnisotropyLaplacianSmoothing() - { - int pcount = ((ComputeSolverImpl)solver).particleCount; - if (pcount > 0 && m_Solver.particleGrid.sortedFluidIndices != null && m_Solver.cellCoordsBuffer != null) - { - if (m_Solver.abstraction.parameters.maxAnisotropy <= 1) - return; - - constraintsShader.SetFloat("maxAnisotropy", m_Solver.abstraction.parameters.maxAnisotropy); - constraintsShader.SetInt("simplexCount", m_Solver.simplexCounts.simplexCount); - - // copy render data (renderablePositions / radii) in sorted order: - CopyDataInSortedOrder(true); - - // accumulate smoothed positions: - constraintsShader.SetBuffer(accumSmoothPositionsKernel, "neighborCounts", m_Solver.particleGrid.neighborCounts); - constraintsShader.SetBuffer(accumSmoothPositionsKernel, "neighbors", m_Solver.particleGrid.neighbors); - constraintsShader.SetBuffer(accumSmoothPositionsKernel, "sortedFluidMaterials", m_Solver.particleGrid.sortedFluidMaterials); - constraintsShader.SetBuffer(accumSmoothPositionsKernel, "renderablePositions", m_Solver.particleGrid.sortedPositions); - constraintsShader.SetBuffer(accumSmoothPositionsKernel, "anisotropies", m_Solver.anisotropiesBuffer); - constraintsShader.SetBuffer(accumSmoothPositionsKernel, "dispatchBuffer", m_Solver.fluidDispatchBuffer); - constraintsShader.DispatchIndirect(accumSmoothPositionsKernel, m_Solver.fluidDispatchBuffer); - - // accumulate anisotropy: - constraintsShader.SetBuffer(accumAnisotropyKernel, "neighborCounts", m_Solver.particleGrid.neighborCounts); - constraintsShader.SetBuffer(accumAnisotropyKernel, "neighbors", m_Solver.particleGrid.neighbors); - constraintsShader.SetBuffer(accumAnisotropyKernel, "anisotropies", m_Solver.anisotropiesBuffer); - constraintsShader.SetBuffer(accumAnisotropyKernel, "renderablePositions", m_Solver.particleGrid.sortedPositions); - constraintsShader.SetBuffer(accumAnisotropyKernel, "sortedFluidMaterials", m_Solver.particleGrid.sortedFluidMaterials); - constraintsShader.SetBuffer(accumAnisotropyKernel, "dispatchBuffer", m_Solver.fluidDispatchBuffer); - constraintsShader.DispatchIndirect(accumAnisotropyKernel, m_Solver.fluidDispatchBuffer); - - // average anisotropies: - constraintsShader.SetBuffer(averageAnisotropyKernel, "sortedToOriginal", m_Solver.particleGrid.sortedFluidIndices); - constraintsShader.SetBuffer(averageAnisotropyKernel, "anisotropies", m_Solver.anisotropiesBuffer); - constraintsShader.SetBuffer(averageAnisotropyKernel, "renderablePositions", m_Solver.renderablePositionsBuffer); - constraintsShader.SetBuffer(averageAnisotropyKernel, "renderableOrientations", m_Solver.renderableOrientationsBuffer); - constraintsShader.SetBuffer(averageAnisotropyKernel, "renderableRadii", m_Solver.renderableRadiiBuffer); - constraintsShader.SetBuffer(averageAnisotropyKernel, "sortedPrincipalRadii", m_Solver.particleGrid.sortedPrincipalRadii); - constraintsShader.SetBuffer(averageAnisotropyKernel, "fluidData", m_Solver.fluidDataBuffer); - constraintsShader.SetBuffer(averageAnisotropyKernel, "dispatchBuffer", m_Solver.fluidDispatchBuffer); - constraintsShader.SetBuffer(averageAnisotropyKernel, "life", m_Solver.lifeBuffer); - constraintsShader.DispatchIndirect(averageAnisotropyKernel, m_Solver.fluidDispatchBuffer); - } - - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraints.cs.meta deleted file mode 100644 index 181e12e45..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8e1927f3839c94d8e806b2ba446e2797 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraintsBatch.cs deleted file mode 100644 index bd0ebab47..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraintsBatch.cs +++ /dev/null @@ -1,93 +0,0 @@ - -using UnityEngine; - -namespace Obi -{ - public class ComputeDensityConstraintsBatch : ComputeConstraintsBatchImpl, IDensityConstraintsBatchImpl - { - - public ComputeDensityConstraintsBatch(ComputeDensityConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.Density; - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - if (solverImplementation.particleGrid.sortedFluidIndices != null && solverImplementation.cellCoordsBuffer != null) - { - var shader = ((ComputeDensityConstraints)m_Constraints).constraintsShader; - int densitiesKernel = ((ComputeDensityConstraints)m_Constraints).updateDensitiesKernel; - - // Need to do this at least every simulation step, since fluid meshing reuses sorted arrays. - ((ComputeDensityConstraints)m_Constraints).CopyDataInSortedOrder(); - - shader.SetInt("maxNeighbors", solverImplementation.particleGrid.maxParticleNeighbors); - shader.SetInt("mode", (int)solverImplementation.abstraction.parameters.mode); - shader.SetFloat("deltaTime", substepTime); - shader.SetVector("diffusionMask", solverAbstraction.parameters.diffusionMask); - - // calculate densities: - shader.SetBuffer(densitiesKernel, "neighborCounts", this.solverImplementation.particleGrid.neighborCounts); - shader.SetBuffer(densitiesKernel, "neighbors", this.solverImplementation.particleGrid.neighbors); - - shader.SetBuffer(densitiesKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(densitiesKernel, "sortedFluidData", solverImplementation.particleGrid.sortedFluidData); - shader.SetBuffer(densitiesKernel, "sortedPositions", solverImplementation.particleGrid.sortedPositions); - shader.SetBuffer(densitiesKernel, "sortedPrevPositions", solverImplementation.particleGrid.sortedPrevPosOrientations); - shader.SetBuffer(densitiesKernel, "sortedFluidMaterials", solverImplementation.particleGrid.sortedFluidMaterials); - shader.SetBuffer(densitiesKernel, "sortedPrincipalRadii", solverImplementation.particleGrid.sortedPrincipalRadii); - shader.SetBuffer(densitiesKernel, "renderableOrientations", solverImplementation.orientationDeltasIntBuffer); - shader.SetBuffer(densitiesKernel, "prevPositions", solverImplementation.prevPositionsBuffer); - shader.SetBuffer(densitiesKernel, "massCenters", solverImplementation.normalsBuffer); - shader.SetBuffer(densitiesKernel, "prevMassCenters", solverImplementation.renderablePositionsBuffer); - shader.SetBuffer(densitiesKernel, "dispatchBuffer", solverImplementation.fluidDispatchBuffer); - - shader.DispatchIndirect(densitiesKernel, solverImplementation.fluidDispatchBuffer); - } - } - - public override void Apply(float substepTime) - { - if (solverImplementation.particleGrid.sortedFluidIndices != null && solverImplementation.cellCoordsBuffer != null) - { - var shader = ((ComputeDensityConstraints)m_Constraints).constraintsShader; - var applyPositionDeltaKernel = ((ComputeDensityConstraints)m_Constraints).applyPositionDeltaKernel; - var applyKernel = ((ComputeDensityConstraints)m_Constraints).applyKernel; - - // calculate deltas: - shader.SetBuffer(applyKernel, "neighborCounts", this.solverImplementation.particleGrid.neighborCounts); - shader.SetBuffer(applyKernel, "neighbors", this.solverImplementation.particleGrid.neighbors); - - shader.SetBuffer(applyKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(applyKernel, "sortedPositions", solverImplementation.particleGrid.sortedPositions); - shader.SetBuffer(applyKernel, "sortedPrevPositions", solverImplementation.particleGrid.sortedPrevPosOrientations); - shader.SetBuffer(applyKernel, "sortedFluidMaterials", solverImplementation.particleGrid.sortedFluidMaterials); - shader.SetBuffer(applyKernel, "sortedPrincipalRadii", solverImplementation.particleGrid.sortedPrincipalRadii); - shader.SetBuffer(applyKernel, "renderableOrientations", solverImplementation.orientationDeltasIntBuffer); - shader.SetBuffer(applyKernel, "prevPositions", solverImplementation.prevPositionsBuffer); - shader.SetBuffer(applyKernel, "massCenters", solverImplementation.normalsBuffer); - shader.SetBuffer(applyKernel, "prevMassCenters", solverImplementation.renderablePositionsBuffer); - shader.SetBuffer(applyKernel, "sortedFluidData", solverImplementation.particleGrid.sortedFluidData); - shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - shader.SetBuffer(applyKernel, "sortedToOriginal", solverImplementation.particleGrid.sortedFluidIndices); - shader.SetBuffer(applyKernel, "dispatchBuffer", solverImplementation.fluidDispatchBuffer); - - shader.DispatchIndirect(applyKernel, solverImplementation.fluidDispatchBuffer); - - // apply position deltas - shader.SetBuffer(applyPositionDeltaKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(applyPositionDeltaKernel, "fluidData", solverImplementation.fluidDataBuffer); - shader.SetBuffer(applyPositionDeltaKernel, "sortedFluidData", solverImplementation.particleGrid.sortedFluidData); - shader.SetBuffer(applyPositionDeltaKernel, "renderableOrientations", solverImplementation.orientationDeltasIntBuffer); - shader.SetBuffer(applyPositionDeltaKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(applyPositionDeltaKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - shader.SetBuffer(applyPositionDeltaKernel, "sortedToOriginal", solverImplementation.particleGrid.sortedFluidIndices); - shader.SetBuffer(applyPositionDeltaKernel, "dispatchBuffer", solverImplementation.fluidDispatchBuffer); - - shader.DispatchIndirect(applyPositionDeltaKernel, solverImplementation.fluidDispatchBuffer); - } - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraintsBatch.cs.meta deleted file mode 100644 index 144708642..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Density/ComputeDensityConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 277bb45dfcd314cdd8e9d917bcc05955 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance.meta deleted file mode 100644 index 6db3da332..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: beca9bcaa99b64d8188c2ac127314259 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraints.cs deleted file mode 100644 index 50c2ab4cc..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraints.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputeDistanceConstraints : ComputeConstraintsImpl - { - public ComputeShader constraintsShader; - public int projectKernel; - public int applyKernel; - - public ComputeDistanceConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Distance) - { - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/DistanceConstraints")); - projectKernel = constraintsShader.FindKernel("Project"); - applyKernel = constraintsShader.FindKernel("Apply"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputeDistanceConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputeDistanceConstraintsBatch); - batch.Destroy(); - } - - public void RequestDataReadback() - { - foreach (var batch in batches) - batch.RequestDataReadback(); - } - - public void WaitForReadback() - { - foreach (var batch in batches) - batch.WaitForReadback(); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraints.cs.meta deleted file mode 100644 index 8a98a0c39..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c56c65d479be44432ba437d871d4892d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraintsBatch.cs deleted file mode 100644 index 0982c29bd..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraintsBatch.cs +++ /dev/null @@ -1,85 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeDistanceConstraintsBatch : ComputeConstraintsBatchImpl, IDistanceConstraintsBatchImpl - { - - GraphicsBuffer restLengthsBuffer; - GraphicsBuffer stiffnessesBuffer; - - public ComputeDistanceConstraintsBatch(ComputeDistanceConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.Distance; - } - - public void SetDistanceConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList restLengths, ObiNativeVector2List stiffnesses, ObiNativeFloatList lambdas, int count) - { - this.particleIndices = particleIndices.AsComputeBuffer(); - this.restLengthsBuffer = restLengths.AsComputeBuffer(); - this.stiffnessesBuffer = stiffnesses.AsComputeBuffer(); - this.lambdas = lambdas.AsComputeBuffer(); - this.lambdasList = lambdas; - - m_ConstraintCount = count; - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - if (m_ConstraintCount > 0) - { - var shader = ((ComputeDistanceConstraints)m_Constraints).constraintsShader; - int projectKernel = ((ComputeDistanceConstraints)m_Constraints).projectKernel; - - shader.SetBuffer(projectKernel, "particleIndices", particleIndices); - shader.SetBuffer(projectKernel, "restLengths", restLengthsBuffer); - shader.SetBuffer(projectKernel, "stiffnesses", stiffnessesBuffer); - shader.SetBuffer(projectKernel, "lambdas", lambdas); - - shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("deltaTime", substepTime); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(projectKernel, threadGroups, 1, 1); - } - } - - public override void Apply(float deltaTime) - { - if (m_ConstraintCount > 0) - { - var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); - - var shader = ((ComputeDistanceConstraints)m_Constraints).constraintsShader; - int applyKernel = ((ComputeDistanceConstraints)m_Constraints).applyKernel; - - shader.SetBuffer(applyKernel, "particleIndices", particleIndices); - shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("sorFactor", parameters.SORFactor); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(applyKernel, threadGroups, 1, 1); - } - } - - public void RequestDataReadback() - { - lambdasList.Readback(); - } - - public void WaitForReadback() - { - lambdasList.WaitForReadback(); - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraintsBatch.cs.meta deleted file mode 100644 index 19d57d427..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Distance/ComputeDistanceConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e197e97b0c8b94a84bce0a448e62e5fb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision.meta deleted file mode 100644 index 3ee25521b..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: da310e9f3c6a84350b6e00bda41d8a90 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraints.cs deleted file mode 100644 index 9c3d62d6e..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraints.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputeParticleCollisionConstraints : ComputeConstraintsImpl - { - public ComputeShader constraintsShader; - public int initializeKernel; - public int projectKernel; - public int applyKernel; - - public ComputeParticleCollisionConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.ParticleCollision) - { - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/ParticleCollisionConstraints")); - initializeKernel = constraintsShader.FindKernel("Initialize"); - projectKernel = constraintsShader.FindKernel("Project"); - applyKernel = constraintsShader.FindKernel("Apply"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputeParticleCollisionConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputeParticleCollisionConstraintsBatch); - batch.Destroy(); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraints.cs.meta deleted file mode 100644 index 3049cbd7b..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0039bc61ce4bc4aaa952b7bf1463c8b5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraintsBatch.cs deleted file mode 100644 index 4af5838ed..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraintsBatch.cs +++ /dev/null @@ -1,112 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeParticleCollisionConstraintsBatch : ComputeConstraintsBatchImpl, IParticleCollisionConstraintsBatchImpl - { - - public ComputeParticleCollisionConstraintsBatch(ComputeParticleCollisionConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.ParticleCollision; - } - - public override void Initialize(float stepTime, float substepTime, int steps, float timeLeft) - { - var shader = ((ComputeParticleCollisionConstraints)m_Constraints).constraintsShader; - int initializeKernel = ((ComputeParticleCollisionConstraints)m_Constraints).initializeKernel; - - if (solverImplementation.simplexCounts.simplexCount > 0) - { - shader.SetInt("pointCount", solverAbstraction.simplexCounts.pointCount); - shader.SetInt("edgeCount", solverAbstraction.simplexCounts.edgeCount); - shader.SetInt("triangleCount", solverAbstraction.simplexCounts.triangleCount); - shader.SetFloat("shockPropagation", solverAbstraction.parameters.shockPropagation); - shader.SetVector("gravity", solverAbstraction.parameters.gravity); - - shader.SetBuffer(initializeKernel, "simplices", this.solverImplementation.simplices); - shader.SetBuffer(initializeKernel, "particleContacts", solverAbstraction.particleContacts.computeBuffer); - shader.SetBuffer(initializeKernel, "effectiveMasses", solverAbstraction.particleContactEffectiveMasses.computeBuffer); - shader.SetBuffer(initializeKernel, "dispatchBuffer", this.solverImplementation.particleGrid.dispatchBuffer); - shader.SetBuffer(initializeKernel, "collisionMaterials", this.solverImplementation.colliderGrid.materialsBuffer); - - shader.SetBuffer(initializeKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(initializeKernel, "prevPositions", solverImplementation.prevPositionsBuffer); - shader.SetBuffer(initializeKernel, "orientations", solverImplementation.orientationsBuffer); - shader.SetBuffer(initializeKernel, "prevOrientations", solverImplementation.prevOrientationsBuffer); - shader.SetBuffer(initializeKernel, "principalRadii", solverImplementation.principalRadiiBuffer); - shader.SetBuffer(initializeKernel, "velocities", solverImplementation.velocitiesBuffer); - shader.SetBuffer(initializeKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - shader.SetBuffer(initializeKernel, "collisionMaterialIndices", solverImplementation.collisionMaterialIndexBuffer); - shader.SetBuffer(initializeKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(initializeKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(initializeKernel, "invRotationalMasses", solverImplementation.invMassesBuffer); - - shader.SetFloat("substepTime", substepTime); - - shader.DispatchIndirect(initializeKernel, this.solverImplementation.particleGrid.dispatchBuffer); - } - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - if (solverImplementation.simplexCounts.simplexCount > 0) - { - var shader = ((ComputeParticleCollisionConstraints)m_Constraints).constraintsShader; - int projectKernel = ((ComputeParticleCollisionConstraints)m_Constraints).projectKernel; - - shader.SetBuffer(projectKernel, "particleContacts", solverAbstraction.particleContacts.computeBuffer); - shader.SetBuffer(projectKernel, "effectiveMasses", solverAbstraction.particleContactEffectiveMasses.computeBuffer); - shader.SetBuffer(projectKernel, "dispatchBuffer", this.solverImplementation.particleGrid.dispatchBuffer); - shader.SetBuffer(projectKernel, "collisionMaterials", this.solverImplementation.colliderGrid.materialsBuffer); - - shader.SetBuffer(projectKernel, "simplices", this.solverImplementation.simplices); - shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(projectKernel, "prevPositions", solverImplementation.prevPositionsBuffer); - shader.SetBuffer(projectKernel, "orientations", solverImplementation.orientationsBuffer); - shader.SetBuffer(projectKernel, "prevOrientations", solverImplementation.prevOrientationsBuffer); - shader.SetBuffer(projectKernel, "principalRadii", solverImplementation.principalRadiiBuffer); - shader.SetBuffer(projectKernel, "fluidInterface", solverImplementation.fluidInterfaceBuffer); - shader.SetBuffer(projectKernel, "userData", solverImplementation.userDataBuffer); - shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - shader.SetBuffer(projectKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); - shader.SetBuffer(projectKernel, "collisionMaterialIndices", solverImplementation.collisionMaterialIndexBuffer); - shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(projectKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); - shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); - - shader.SetFloat("maxDepenetration", solverAbstraction.parameters.maxDepenetration); - shader.SetFloat("collisionMargin", solverAbstraction.parameters.collisionMargin); - shader.SetVector("diffusionMask", solverAbstraction.parameters.diffusionMask); - shader.SetFloat("substepTime", substepTime); - - shader.DispatchIndirect(projectKernel, this.solverImplementation.particleGrid.dispatchBuffer); - } - } - - public override void Apply(float substepTime) - { - var shader = ((ComputeParticleCollisionConstraints)m_Constraints).constraintsShader; - int applyKernel = ((ComputeParticleCollisionConstraints)m_Constraints).applyKernel; - - if (solverImplementation.activeParticleCount > 0) - { - var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); - - shader.SetBuffer(applyKernel, "particleIndices", this.solverImplementation.activeParticlesBuffer); - shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(applyKernel, "userData", solverImplementation.userDataBuffer); - shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(applyKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); - shader.SetBuffer(applyKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); - - shader.SetInt("particleCount", this.solverAbstraction.activeParticleCount); - shader.SetFloat("sorFactor", parameters.SORFactor); - - int threadGroups = ComputeMath.ThreadGroupCount(this.solverAbstraction.activeParticleCount, 128); - shader.Dispatch(applyKernel, threadGroups, 1, 1); - } - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraintsBatch.cs.meta deleted file mode 100644 index 5075a5759..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleCollisionConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 425e2aa73a5f746039203ce1c0ac3a00 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraints.cs deleted file mode 100644 index aaec1e79f..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraints.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputeParticleFrictionConstraints : ComputeConstraintsImpl - { - public ComputeShader constraintsShader; - public int projectKernel; - public int applyKernel; - - public ComputeParticleFrictionConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.ParticleFriction) - { - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/ParticleFrictionConstraints")); - projectKernel = constraintsShader.FindKernel("Project"); - applyKernel = constraintsShader.FindKernel("Apply"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputeParticleFrictionConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputeParticleFrictionConstraintsBatch); - batch.Destroy(); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraints.cs.meta deleted file mode 100644 index 7ca80b7a3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 41b95f7aa768148b38a09f35bee8efce -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraintsBatch.cs deleted file mode 100644 index 64743ef60..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraintsBatch.cs +++ /dev/null @@ -1,79 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeParticleFrictionConstraintsBatch : ComputeConstraintsBatchImpl, IParticleCollisionConstraintsBatchImpl - { - - public ComputeParticleFrictionConstraintsBatch(ComputeParticleFrictionConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.ParticleFriction; - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - //if (m_ConstraintCount > 0) - if (solverImplementation.simplexCounts.simplexCount > 0 && solverImplementation.activeParticleCount > 0) - { - var shader = ((ComputeParticleFrictionConstraints)m_Constraints).constraintsShader; - int projectKernel = ((ComputeParticleFrictionConstraints)m_Constraints).projectKernel; - - shader.SetInt("pointCount", solverAbstraction.simplexCounts.pointCount); - shader.SetInt("edgeCount", solverAbstraction.simplexCounts.edgeCount); - shader.SetInt("triangleCount", solverAbstraction.simplexCounts.triangleCount); - - shader.SetBuffer(projectKernel, "particleContacts", solverAbstraction.particleContacts.computeBuffer); - shader.SetBuffer(projectKernel, "effectiveMasses", solverAbstraction.particleContactEffectiveMasses.computeBuffer); - shader.SetBuffer(projectKernel, "dispatchBuffer", solverImplementation.particleGrid.dispatchBuffer); - shader.SetBuffer(projectKernel, "collisionMaterials", solverImplementation.colliderGrid.materialsBuffer); - - shader.SetBuffer(projectKernel, "simplices", solverImplementation.simplices); - shader.SetBuffer(projectKernel, "collisionMaterialIndices", solverImplementation.collisionMaterialIndexBuffer); - shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(projectKernel, "orientations", solverImplementation.orientationsBuffer); - shader.SetBuffer(projectKernel, "prevPositions", solverImplementation.prevPositionsBuffer); - shader.SetBuffer(projectKernel, "prevOrientations", solverImplementation.prevOrientationsBuffer); - shader.SetBuffer(projectKernel, "principalRadii", solverImplementation.principalRadiiBuffer); - shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(projectKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); - - shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(projectKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); - shader.SetBuffer(projectKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); - - shader.SetFloat("stepTime", stepTime); - shader.SetFloat("substepTime", substepTime); - - shader.DispatchIndirect(projectKernel, this.solverImplementation.particleGrid.dispatchBuffer); - } - - } - - public override void Apply(float substepTime) - { - var shader = ((ComputeParticleFrictionConstraints)m_Constraints).constraintsShader; - int applyKernel = ((ComputeParticleFrictionConstraints)m_Constraints).applyKernel; - - if (solverImplementation.activeParticleCount > 0) - { - var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); - - shader.SetBuffer(applyKernel, "particleIndices", this.solverImplementation.activeParticlesBuffer); - shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(applyKernel, "orientations", solverImplementation.orientationsBuffer); - shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(applyKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); - shader.SetBuffer(applyKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); - - shader.SetInt("particleCount", this.solverAbstraction.activeParticleCount); - shader.SetFloat("sorFactor", parameters.SORFactor); - - int threadGroups = ComputeMath.ThreadGroupCount(this.solverAbstraction.activeParticleCount, 128); - shader.Dispatch(applyKernel, threadGroups, 1, 1); - } - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraintsBatch.cs.meta deleted file mode 100644 index 214b031dc..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ParticleCollision/ComputeParticleFrictionConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 12275bbeff9604bb393a365d8442161a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin.meta deleted file mode 100644 index c21a5f4f4..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b03d5abd353fb4064bf5677d949196a1 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraints.cs deleted file mode 100644 index 3ac729cc8..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraints.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputePinConstraints : ComputeConstraintsImpl - { - public ComputeShader constraintsShader; - public int clearKernel; - public int initializeKernel; - public int projectKernel; - public int applyKernel; - public int projectRenderableKernel; - - public ComputePinConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Pin) - { - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/PinConstraints")); - clearKernel = constraintsShader.FindKernel("Clear"); - initializeKernel = constraintsShader.FindKernel("Initialize"); - projectKernel = constraintsShader.FindKernel("Project"); - applyKernel = constraintsShader.FindKernel("Apply"); - projectRenderableKernel = constraintsShader.FindKernel("ProjectRenderable"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputePinConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputePinConstraintsBatch); - batch.Destroy(); - } - - public void RequestDataReadback() - { - foreach (var batch in batches) - batch.RequestDataReadback(); - } - - public void WaitForReadback() - { - foreach (var batch in batches) - batch.WaitForReadback(); - } - - public void ProjectRenderablePositions() - { - for (int i = 0; i < batches.Count; ++i) - { - if (batches[i].enabled) - { - batches[i].ProjectRenderablePositions(); - } - } - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraints.cs.meta deleted file mode 100644 index 5f50419cf..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0fcd123efb9af486783fa2eca750d731 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraintsBatch.cs deleted file mode 100644 index f5e92220c..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraintsBatch.cs +++ /dev/null @@ -1,167 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputePinConstraintsBatch : ComputeConstraintsBatchImpl, IPinConstraintsBatchImpl - { - GraphicsBuffer colliderIndices; - GraphicsBuffer offsets; - GraphicsBuffer restDarboux; - GraphicsBuffer stiffnesses; - - public ComputePinConstraintsBatch(ComputePinConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.Pin; - } - - public void SetPinConstraints(ObiNativeIntList particleIndices, ObiNativeIntList colliderIndices, ObiNativeVector4List offsets, ObiNativeQuaternionList restDarbouxVectors, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count) - { - this.particleIndices = particleIndices.AsComputeBuffer(); - this.colliderIndices = colliderIndices.AsComputeBuffer(); - this.offsets = offsets.AsComputeBuffer(); - this.restDarboux = restDarbouxVectors.AsComputeBuffer(); - this.stiffnesses = stiffnesses.AsComputeBuffer(); - this.lambdas = lambdas.AsComputeBuffer(); - this.lambdasList = lambdas; - - m_ConstraintCount = count; - } - - public override void Initialize(float stepTime, float substepTime, int steps, float timeLeft) - { - if (m_ConstraintCount > 0) - { - var shader = ((ComputePinConstraints)m_Constraints).constraintsShader; - int clearKernel = ((ComputePinConstraints)m_Constraints).clearKernel; - int initializeKernel = ((ComputePinConstraints)m_Constraints).initializeKernel; - - shader.SetBuffer(clearKernel, "colliderIndices", colliderIndices); - shader.SetBuffer(clearKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); - shader.SetBuffer(clearKernel, "RW_rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); - - shader.SetBuffer(initializeKernel, "colliderIndices", colliderIndices); - shader.SetBuffer(initializeKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); - shader.SetBuffer(initializeKernel, "RW_rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(clearKernel, threadGroups, 1, 1); - shader.Dispatch(initializeKernel, threadGroups, 1, 1); - } - - // clear lambdas: - base.Initialize(stepTime, substepTime, steps, timeLeft); - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - if (m_ConstraintCount > 0) - { - var shader = ((ComputePinConstraints)m_Constraints).constraintsShader; - int projectKernel = ((ComputePinConstraints)m_Constraints).projectKernel; - - shader.SetBuffer(projectKernel, "particleIndices", particleIndices); - shader.SetBuffer(projectKernel, "colliderIndices", colliderIndices); - shader.SetBuffer(projectKernel, "offsets", offsets); - shader.SetBuffer(projectKernel, "restDarboux", restDarboux); - shader.SetBuffer(projectKernel, "stiffnesses", stiffnesses); - shader.SetBuffer(projectKernel, "lambdas", lambdas); - - shader.SetBuffer(projectKernel, "transforms", this.solverImplementation.colliderGrid.transformsBuffer); - shader.SetBuffer(projectKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); - shader.SetBuffer(projectKernel, "rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); - - shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(projectKernel, "prevPositions", solverImplementation.prevPositionsBuffer); - shader.SetBuffer(projectKernel, "orientations", solverImplementation.orientationsBuffer); - shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(projectKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); - shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - shader.SetBuffer(projectKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); - shader.SetBuffer(projectKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); - - shader.SetBuffer(projectKernel, "linearDeltasAsInt", solverImplementation.rigidbodyLinearDeltasIntBuffer); - shader.SetBuffer(projectKernel, "angularDeltasAsInt", solverImplementation.rigidbodyAngularDeltasIntBuffer); - - shader.SetBuffer(projectKernel, "inertialSolverFrame", solverImplementation.inertialFrameBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("stepTime", stepTime); - shader.SetFloat("substepTime", substepTime); - shader.SetInt("steps", steps); - shader.SetFloat("timeLeft", timeLeft); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(projectKernel, threadGroups, 1, 1); - } - } - - public override void Apply(float substepTime) - { - if (m_ConstraintCount > 0) - { - var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); - - var shader = ((ComputePinConstraints)m_Constraints).constraintsShader; - int applyKernel = ((ComputePinConstraints)m_Constraints).applyKernel; - - shader.SetBuffer(applyKernel, "particleIndices", particleIndices); - - shader.SetBuffer(applyKernel, "RW_positions", solverImplementation.positionsBuffer); - shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - shader.SetBuffer(applyKernel, "RW_orientations", solverImplementation.orientationsBuffer); - shader.SetBuffer(applyKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); - shader.SetBuffer(applyKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("sorFactor", parameters.SORFactor); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(applyKernel, threadGroups, 1, 1); - } - } - - public void ProjectRenderablePositions() - { - if (m_ConstraintCount > 0) - { - var shader = ((ComputePinConstraints)m_Constraints).constraintsShader; - int projectRenderableKernel = ((ComputePinConstraints)m_Constraints).projectRenderableKernel; - - shader.SetBuffer(projectRenderableKernel, "particleIndices", particleIndices); - shader.SetBuffer(projectRenderableKernel, "colliderIndices", colliderIndices); - shader.SetBuffer(projectRenderableKernel, "offsets", offsets); - shader.SetBuffer(projectRenderableKernel, "restDarboux", restDarboux); - shader.SetBuffer(projectRenderableKernel, "stiffnesses", stiffnesses); - - shader.SetBuffer(projectRenderableKernel, "transforms", this.solverImplementation.colliderGrid.transformsBuffer); - - shader.SetBuffer(projectRenderableKernel, "RW_positions", solverImplementation.renderablePositionsBuffer); - shader.SetBuffer(projectRenderableKernel, "RW_orientations", solverImplementation.renderableOrientationsBuffer); - - shader.SetBuffer(projectRenderableKernel, "inertialSolverFrame", solverImplementation.inertialFrameBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(projectRenderableKernel, threadGroups, 1, 1); - } - } - - public void RequestDataReadback() - { - lambdasList.Readback(); - } - - public void WaitForReadback() - { - lambdasList.WaitForReadback(); - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraintsBatch.cs.meta deleted file mode 100644 index 365b01ba0..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pin/ComputePinConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bf8b3fc4b0e8f4ab3ab1f4418e053a8f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole.meta deleted file mode 100644 index f134edc5c..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 67d3689a6a1a94c8b88ec9d27a88963f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraints.cs deleted file mode 100644 index 141ad279a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraints.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputePinholeConstraints : ComputeConstraintsImpl - { - public ComputeShader constraintsShader; - public int clearKernel; - public int initializeKernel; - public int projectKernel; - public int applyKernel; - - public ComputePinholeConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Pinhole) - { - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/PinholeConstraints")); - clearKernel = constraintsShader.FindKernel("Clear"); - initializeKernel = constraintsShader.FindKernel("Initialize"); - projectKernel = constraintsShader.FindKernel("Project"); - applyKernel = constraintsShader.FindKernel("Apply"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputePinholeConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputePinholeConstraintsBatch); - batch.Destroy(); - } - - public void RequestDataReadback() - { - foreach (var batch in batches) - batch.RequestDataReadback(); - } - - public void WaitForReadback() - { - foreach (var batch in batches) - batch.WaitForReadback(); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraints.cs.meta deleted file mode 100644 index cc3dae1ce..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ac5087fe6e43f4ffc8b73089fd3f96b1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraintsBatch.cs deleted file mode 100644 index 4930295f8..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraintsBatch.cs +++ /dev/null @@ -1,165 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputePinholeConstraintsBatch : ComputeConstraintsBatchImpl, IPinholeConstraintsBatchImpl - { - GraphicsBuffer colliderIndices; - GraphicsBuffer offsets; - GraphicsBuffer edgeMus; - GraphicsBuffer edgeRanges; - GraphicsBuffer edgeRangeMus; - GraphicsBuffer relativeVelocities; - GraphicsBuffer parameters; - - public ComputePinholeConstraintsBatch(ComputePinholeConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.Pinhole; - } - - public void SetPinholeConstraints(ObiNativeIntList particleIndices, ObiNativeIntList colliderIndices, ObiNativeVector4List offsets, ObiNativeFloatList edgeMus, ObiNativeIntList edgeRanges, ObiNativeFloatList edgeRangeMus, ObiNativeFloatList parameters, ObiNativeFloatList relativeVelocities, ObiNativeFloatList lambdas, int count) - { - this.particleIndices = particleIndices.AsComputeBuffer(); - this.colliderIndices = colliderIndices.AsComputeBuffer(); - this.offsets = offsets.AsComputeBuffer(); - this.edgeMus = edgeMus.AsComputeBuffer(); - this.edgeRanges = edgeRanges.AsComputeBuffer(); - this.edgeRangeMus = edgeRangeMus.AsComputeBuffer(); - this.parameters = parameters.AsComputeBuffer(); - this.lambdas = lambdas.AsComputeBuffer(); - this.relativeVelocities = relativeVelocities.AsComputeBuffer(); - this.lambdasList = lambdas; - - m_ConstraintCount = count; - } - - public override void Initialize(float stepTime, float substepTime, int steps, float timeLeft) - { - if (m_ConstraintCount > 0) - { - var shader = ((ComputePinholeConstraints)m_Constraints).constraintsShader; - int clearKernel = ((ComputePinholeConstraints)m_Constraints).clearKernel; - int initializeKernel = ((ComputePinholeConstraints)m_Constraints).initializeKernel; - - shader.SetBuffer(clearKernel, "colliderIndices", colliderIndices); - shader.SetBuffer(clearKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); - shader.SetBuffer(clearKernel, "RW_rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); - - shader.SetBuffer(initializeKernel, "particleIndices", particleIndices); - shader.SetBuffer(initializeKernel, "colliderIndices", colliderIndices); - shader.SetBuffer(initializeKernel, "offsets", offsets); - shader.SetBuffer(initializeKernel, "edgeMus", edgeMus); - shader.SetBuffer(initializeKernel, "edgeRanges", edgeRanges); - shader.SetBuffer(initializeKernel, "edgeRangeMus", edgeRangeMus); - shader.SetBuffer(initializeKernel, "relativeVelocities", relativeVelocities); - shader.SetBuffer(initializeKernel, "parameters", parameters); - - shader.SetBuffer(initializeKernel, "deformableEdges", solverImplementation.deformableEdgesBuffer); - shader.SetBuffer(initializeKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(initializeKernel, "prevPositions", solverImplementation.prevPositionsBuffer); - shader.SetBuffer(initializeKernel, "invMasses", solverImplementation.invMassesBuffer); - - shader.SetBuffer(initializeKernel, "colliderIndices", colliderIndices); - shader.SetBuffer(initializeKernel, "transforms", this.solverImplementation.colliderGrid.transformsBuffer); - shader.SetBuffer(initializeKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); - shader.SetBuffer(initializeKernel, "rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); - shader.SetBuffer(initializeKernel, "RW_rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); - - shader.SetBuffer(initializeKernel, "linearDeltasAsInt", solverImplementation.rigidbodyLinearDeltasIntBuffer); - shader.SetBuffer(initializeKernel, "angularDeltasAsInt", solverImplementation.rigidbodyAngularDeltasIntBuffer); - - shader.SetBuffer(initializeKernel, "inertialSolverFrame", solverImplementation.inertialFrameBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("stepTime", stepTime); - shader.SetFloat("substepTime", substepTime); - shader.SetInt("steps", steps); - shader.SetFloat("timeLeft", timeLeft); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(clearKernel, threadGroups, 1, 1); - shader.Dispatch(initializeKernel, threadGroups, 1, 1); - } - - // clear lambdas: - base.Initialize(stepTime, substepTime, steps, timeLeft); - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - if (m_ConstraintCount > 0) - { - var shader = ((ComputePinholeConstraints)m_Constraints).constraintsShader; - int projectKernel = ((ComputePinholeConstraints)m_Constraints).projectKernel; - - shader.SetBuffer(projectKernel, "particleIndices", particleIndices); - shader.SetBuffer(projectKernel, "colliderIndices", colliderIndices); - shader.SetBuffer(projectKernel, "offsets", offsets); - shader.SetBuffer(projectKernel, "edgeMus", edgeMus); - shader.SetBuffer(projectKernel, "parameters", parameters); - shader.SetBuffer(projectKernel, "lambdas", lambdas); - - shader.SetBuffer(projectKernel, "transforms", this.solverImplementation.colliderGrid.transformsBuffer); - shader.SetBuffer(projectKernel, "shapes", this.solverImplementation.colliderGrid.shapesBuffer); - shader.SetBuffer(projectKernel, "rigidbodies", this.solverImplementation.colliderGrid.rigidbodiesBuffer); - - shader.SetBuffer(projectKernel, "deformableEdges", solverImplementation.deformableEdgesBuffer); - shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(projectKernel, "prevPositions", solverImplementation.prevPositionsBuffer); - shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - shader.SetBuffer(projectKernel, "linearDeltasAsInt", solverImplementation.rigidbodyLinearDeltasIntBuffer); - shader.SetBuffer(projectKernel, "angularDeltasAsInt", solverImplementation.rigidbodyAngularDeltasIntBuffer); - - shader.SetBuffer(projectKernel, "inertialSolverFrame", solverImplementation.inertialFrameBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("stepTime", stepTime); - shader.SetFloat("substepTime", substepTime); - shader.SetInt("steps", steps); - shader.SetFloat("timeLeft", timeLeft); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(projectKernel, threadGroups, 1, 1); - } - } - - public override void Apply(float substepTime) - { - if (m_ConstraintCount > 0) - { - var param = solverAbstraction.GetConstraintParameters(m_ConstraintType); - - var shader = ((ComputePinholeConstraints)m_Constraints).constraintsShader; - int applyKernel = ((ComputePinholeConstraints)m_Constraints).applyKernel; - - shader.SetBuffer(applyKernel, "particleIndices", particleIndices); - shader.SetBuffer(applyKernel, "deformableEdges", solverImplementation.deformableEdgesBuffer); - - shader.SetBuffer(applyKernel, "RW_positions", solverImplementation.positionsBuffer); - shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("sorFactor", param.SORFactor); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(applyKernel, threadGroups, 1, 1); - } - } - - public void RequestDataReadback() - { - lambdasList.Readback(); - } - - public void WaitForReadback() - { - lambdasList.WaitForReadback(); - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraintsBatch.cs.meta deleted file mode 100644 index 1bb2cbb73..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Pinhole/ComputePinholeConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 262e3b75b5b53406b92eaed391db8114 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching.meta deleted file mode 100644 index ac46a10b7..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 21c4f0318a4dd4112aeb7065a1251e2a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraints.cs deleted file mode 100644 index 87856a1a2..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraints.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputeShapeMatchingConstraints : ComputeConstraintsImpl - { - public ComputeShader constraintsShader; - public int projectKernel; - public int plasticityKernel; - public int restStateKernel; - public int applyKernel; - - public ComputeShapeMatchingConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.ShapeMatching) - { - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/ShapeMatchingConstraints")); - projectKernel = constraintsShader.FindKernel("Project"); - plasticityKernel = constraintsShader.FindKernel("PlasticDeformation"); - restStateKernel = constraintsShader.FindKernel("CalculateRestShapeMatching"); - applyKernel = constraintsShader.FindKernel("Apply"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputeShapeMatchingConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputeShapeMatchingConstraintsBatch); - batch.Destroy(); - } - - public void RequestDataReadback() - { - foreach(var batch in batches) - batch.RequestDataReadback(); - } - - public void WaitForReadback() - { - foreach (var batch in batches) - batch.WaitForReadback(); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraints.cs.meta deleted file mode 100644 index c6df3eebc..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f2c02ccc8463d4650b854a7a374ac0d3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraintsBatch.cs deleted file mode 100644 index ae5534206..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraintsBatch.cs +++ /dev/null @@ -1,204 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeShapeMatchingConstraintsBatch : ComputeConstraintsBatchImpl, IShapeMatchingConstraintsBatchImpl - { - private GraphicsBuffer firstIndexBuffer; - private GraphicsBuffer numIndicesBuffer; - private GraphicsBuffer explicitGroupBuffer; - private GraphicsBuffer shapeMaterialParametersBuffer; - private GraphicsBuffer restComsBuffer; - private GraphicsBuffer comsBuffer; - private GraphicsBuffer constraintOrientationsBuffer; - - private GraphicsBuffer AqqBuffer; - private GraphicsBuffer linearTransformsBuffer; - private GraphicsBuffer plasticDeformationsBuffer; - - private ObiNativeVector4List m_RestComs; - private ObiNativeVector4List m_Coms; - private ObiNativeQuaternionList m_ConstraintOrientations; - - private bool m_RecalculateRestShape = false; - public ComputeShapeMatchingConstraintsBatch(ComputeShapeMatchingConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.ShapeMatching; - } - - public void SetShapeMatchingConstraints(ObiNativeIntList particleIndices, - ObiNativeIntList firstIndex, - ObiNativeIntList numIndices, - ObiNativeIntList explicitGroup, - ObiNativeFloatList shapeMaterialParameters, - ObiNativeVector4List restComs, - ObiNativeVector4List coms, - ObiNativeQuaternionList constraintOrientations, - ObiNativeMatrix4x4List linearTransforms, - ObiNativeMatrix4x4List plasticDeformations, - ObiNativeFloatList lambdas, - int count) - { - this.particleIndices = particleIndices.AsComputeBuffer(); - this.firstIndexBuffer = firstIndex.AsComputeBuffer(); - this.numIndicesBuffer = numIndices.AsComputeBuffer(); - this.explicitGroupBuffer = explicitGroup.AsComputeBuffer(); - this.shapeMaterialParametersBuffer = shapeMaterialParameters.AsComputeBuffer(); - this.restComsBuffer = restComs.AsComputeBuffer(); - this.comsBuffer = coms.AsComputeBuffer(); - this.constraintOrientationsBuffer = constraintOrientations.AsComputeBuffer(); - this.linearTransformsBuffer = linearTransforms.AsComputeBuffer(); - this.plasticDeformationsBuffer = plasticDeformations.AsComputeBuffer(); - - if (AqqBuffer != null) - AqqBuffer.Dispose(); - - AqqBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, count, 64); // float4x4 - - m_RestComs = restComs; - m_Coms = coms; - m_ConstraintOrientations = constraintOrientations; - - m_ConstraintCount = count; - } - - public override void Destroy() - { - if (AqqBuffer != null) - AqqBuffer.Dispose(); - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - if (m_ConstraintCount > 0) - { - var shader = ((ComputeShapeMatchingConstraints)m_Constraints).constraintsShader; - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("deltaTime", substepTime); - - if (m_RecalculateRestShape) - { - m_RecalculateRestShape = false; - - int restKernel = ((ComputeShapeMatchingConstraints)m_Constraints).restStateKernel; - - shader.SetBuffer(restKernel, "particleIndices", particleIndices); - shader.SetBuffer(restKernel, "firstIndex", firstIndexBuffer); - shader.SetBuffer(restKernel, "numIndices", numIndicesBuffer); - shader.SetBuffer(restKernel, "RW_restComs", restComsBuffer); - - shader.SetBuffer(restKernel, "RW_Aqq", AqqBuffer); - shader.SetBuffer(restKernel, "RW_deformation", plasticDeformationsBuffer); - - shader.SetBuffer(restKernel, "restPositions", solverImplementation.restPositionsBuffer); - shader.SetBuffer(restKernel, "restOrientations", solverImplementation.restOrientationsBuffer); - shader.SetBuffer(restKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(restKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); - shader.SetBuffer(restKernel, "principalRadii", solverImplementation.principalRadiiBuffer); - - shader.Dispatch(restKernel, threadGroups, 1, 1); - - m_RestComs.Readback(); - m_RestComs.WaitForReadback(); - } - - //var shader = ((ComputeShapeMatchingConstraints)m_Constraints).constraintsShader; - int projectKernel = ((ComputeShapeMatchingConstraints)m_Constraints).projectKernel; - int plasticityKernel = ((ComputeShapeMatchingConstraints)m_Constraints).plasticityKernel; - - shader.SetBuffer(projectKernel, "particleIndices", particleIndices); - shader.SetBuffer(projectKernel, "firstIndex", firstIndexBuffer); - shader.SetBuffer(projectKernel, "numIndices", numIndicesBuffer); - shader.SetBuffer(projectKernel, "explicitGroup", explicitGroupBuffer); - shader.SetBuffer(projectKernel, "shapeMaterialParameters", shapeMaterialParametersBuffer); - - shader.SetBuffer(projectKernel, "restComs", restComsBuffer); - shader.SetBuffer(projectKernel, "coms", comsBuffer); - shader.SetBuffer(projectKernel, "constraintOrientations", constraintOrientationsBuffer); - - shader.SetBuffer(projectKernel, "Aqq", AqqBuffer); - shader.SetBuffer(projectKernel, "RW_linearTransforms", linearTransformsBuffer); - shader.SetBuffer(projectKernel, "deformation", plasticDeformationsBuffer); - - shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(projectKernel, "restPositions", solverImplementation.restPositionsBuffer); - shader.SetBuffer(projectKernel, "orientations", solverImplementation.orientationsBuffer); - shader.SetBuffer(projectKernel, "restOrientations", solverImplementation.restOrientationsBuffer); - shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(projectKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); - shader.SetBuffer(projectKernel, "principalRadii", solverImplementation.principalRadiiBuffer); - shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - shader.Dispatch(projectKernel, threadGroups, 1, 1); - - shader.SetBuffer(plasticityKernel, "particleIndices", particleIndices); - shader.SetBuffer(plasticityKernel, "firstIndex", firstIndexBuffer); - shader.SetBuffer(plasticityKernel, "numIndices", numIndicesBuffer); - shader.SetBuffer(plasticityKernel, "shapeMaterialParameters", shapeMaterialParametersBuffer); - - shader.SetBuffer(plasticityKernel, "RW_restComs", restComsBuffer); - shader.SetBuffer(plasticityKernel, "constraintOrientations", constraintOrientationsBuffer); - - shader.SetBuffer(plasticityKernel, "RW_Aqq", AqqBuffer); - shader.SetBuffer(plasticityKernel, "linearTransforms", linearTransformsBuffer); - shader.SetBuffer(plasticityKernel, "RW_deformation", plasticDeformationsBuffer); - - shader.SetBuffer(plasticityKernel, "restPositions", solverImplementation.restPositionsBuffer); - shader.SetBuffer(plasticityKernel, "restOrientations", solverImplementation.restOrientationsBuffer); - shader.SetBuffer(plasticityKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(plasticityKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); - shader.SetBuffer(plasticityKernel, "principalRadii", solverImplementation.principalRadiiBuffer); - - shader.Dispatch(plasticityKernel, threadGroups, 1, 1); - } - } - - public override void Apply(float substepTime) - { - if (m_ConstraintCount > 0) - { - var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); - - var shader = ((ComputeShapeMatchingConstraints)m_Constraints).constraintsShader; - int applyKernel = ((ComputeShapeMatchingConstraints)m_Constraints).applyKernel; - - shader.SetBuffer(applyKernel, "particleIndices", particleIndices); - shader.SetBuffer(applyKernel, "firstIndex", firstIndexBuffer); - shader.SetBuffer(applyKernel, "numIndices", numIndicesBuffer); - shader.SetBuffer(applyKernel, "RW_positions", solverImplementation.positionsBuffer); - shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("sorFactor", parameters.SORFactor); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(applyKernel, threadGroups, 1, 1); - } - } - - public void CalculateRestShapeMatching() - { - // just set a flag and do the actual calculation at the start of Evaluate(). - // This ensures GPu data of both particles and constraints is up to date when calculating the rest shape. - m_RecalculateRestShape = true; - } - - public void RequestDataReadback() - { - m_Coms.Readback(); - m_ConstraintOrientations.Readback(); - } - - public void WaitForReadback() - { - m_Coms.WaitForReadback(); - m_ConstraintOrientations.WaitForReadback(); - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraintsBatch.cs.meta deleted file mode 100644 index 82b0d2be8..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/ShapeMatching/ComputeShapeMatchingConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: efcebc6a8ed1446fe8216d7656fe7462 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin.meta deleted file mode 100644 index afbbedb2d..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e3f96b782e06d47d699bad2fbd4712e1 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraints.cs deleted file mode 100644 index 7a41a9a26..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraints.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputeSkinConstraints : ComputeConstraintsImpl - { - public ComputeShader constraintsShader; - public int projectKernel; - public int applyKernel; - - public ComputeSkinConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Skin) - { - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/SkinConstraints")); - projectKernel = constraintsShader.FindKernel("Project"); - applyKernel = constraintsShader.FindKernel("Apply"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputeSkinConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputeSkinConstraintsBatch); - batch.Destroy(); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraints.cs.meta deleted file mode 100644 index ffce2d875..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: df84869cc78e04bb895be2db5e398cc3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraintsBatch.cs deleted file mode 100644 index 53cf5e820..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraintsBatch.cs +++ /dev/null @@ -1,81 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeSkinConstraintsBatch : ComputeConstraintsBatchImpl, ISkinConstraintsBatchImpl - { - GraphicsBuffer skinPoints; - GraphicsBuffer skinNormalsBuffer; - GraphicsBuffer skinRadiiBackstopBuffer; - GraphicsBuffer skinComplianceBuffer; - - public ComputeSkinConstraintsBatch(ComputeSkinConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.Skin; - } - - public void SetSkinConstraints(ObiNativeIntList particleIndices, ObiNativeVector4List skinPoints, ObiNativeVector4List skinNormals, ObiNativeFloatList skinRadiiBackstop, ObiNativeFloatList skinCompliance, ObiNativeFloatList lambdas, int count) - { - this.particleIndices = particleIndices.AsComputeBuffer(); - this.skinPoints = skinPoints.AsComputeBuffer(); - this.skinNormalsBuffer = skinNormals.AsComputeBuffer(); - this.skinRadiiBackstopBuffer = skinRadiiBackstop.AsComputeBuffer(); - this.skinComplianceBuffer = skinCompliance.AsComputeBuffer(); - this.lambdas = lambdas.AsComputeBuffer(); - this.lambdasList = lambdas; - - m_ConstraintCount = count; - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - if (m_ConstraintCount > 0) - { - var shader = ((ComputeSkinConstraints)m_Constraints).constraintsShader; - int projectKernel = ((ComputeSkinConstraints)m_Constraints).projectKernel; - - shader.SetBuffer(projectKernel, "particleIndices", particleIndices); - shader.SetBuffer(projectKernel, "skinPoints", skinPoints); - shader.SetBuffer(projectKernel, "skinNormals", skinNormalsBuffer); - shader.SetBuffer(projectKernel, "skinRadiiBackstop", skinRadiiBackstopBuffer); - shader.SetBuffer(projectKernel, "skinCompliance", skinComplianceBuffer); - shader.SetBuffer(projectKernel, "lambdas", lambdas); - - shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("deltaTime", substepTime); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(projectKernel, threadGroups, 1, 1); - } - } - - public override void Apply(float substepTime) - { - if (m_ConstraintCount > 0) - { - var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); - - var shader = ((ComputeSkinConstraints)m_Constraints).constraintsShader; - int applyKernel = ((ComputeSkinConstraints)m_Constraints).applyKernel; - - shader.SetBuffer(applyKernel, "particleIndices", particleIndices); - shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("sorFactor", parameters.SORFactor); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(applyKernel, threadGroups, 1, 1); - } - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraintsBatch.cs.meta deleted file mode 100644 index 6a56a4f0d..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Skin/ComputeSkinConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 935a9038a35be4d21aa06057f83040a9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch.meta deleted file mode 100644 index 72b5b7083..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8fd1b55deaf68449f9fc2f037f032b4c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraints.cs deleted file mode 100644 index e5f48a8f2..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraints.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputeStitchConstraints : ComputeConstraintsImpl - { - public ComputeShader constraintsShader; - public int projectKernel; - public int applyKernel; - - public ComputeStitchConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Stitch) - { - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/StitchConstraints")); - projectKernel = constraintsShader.FindKernel("Project"); - applyKernel = constraintsShader.FindKernel("Apply"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputeStitchConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputeStitchConstraintsBatch); - batch.Destroy(); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraints.cs.meta deleted file mode 100644 index 296677c85..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 35350420ce5c24323abc6770d4de9655 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraintsBatch.cs deleted file mode 100644 index ba09e5113..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraintsBatch.cs +++ /dev/null @@ -1,71 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeStitchConstraintsBatch : ComputeConstraintsBatchImpl, IStitchConstraintsBatchImpl - { - GraphicsBuffer stiffnesses; - - public ComputeStitchConstraintsBatch(ComputeStitchConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.Stitch; - } - - public void SetStitchConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count) - { - this.particleIndices = particleIndices.AsComputeBuffer(); - this.stiffnesses = stiffnesses.AsComputeBuffer(); - this.lambdas = lambdas.AsComputeBuffer(); - - m_ConstraintCount = count; - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - if (m_ConstraintCount > 0) - { - var shader = ((ComputeStitchConstraints)m_Constraints).constraintsShader; - int projectKernel = ((ComputeStitchConstraints)m_Constraints).projectKernel; - - shader.SetBuffer(projectKernel, "particleIndices", particleIndices); - shader.SetBuffer(projectKernel, "stiffnesses", stiffnesses); - shader.SetBuffer(projectKernel, "lambdas", lambdas); - - shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("deltaTime", substepTime); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(projectKernel, threadGroups, 1, 1); - } - } - - public override void Apply(float substepTime) - { - if (m_ConstraintCount > 0) - { - var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); - - var shader = ((ComputeStitchConstraints)m_Constraints).constraintsShader; - int applyKernel = ((ComputeStitchConstraints)m_Constraints).applyKernel; - - shader.SetBuffer(applyKernel, "particleIndices", particleIndices); - shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("sorFactor", parameters.SORFactor); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(applyKernel, threadGroups, 1, 1); - } - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraintsBatch.cs.meta deleted file mode 100644 index 03b6837ef..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Stitch/ComputeStitchConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d82f622203a3d402dbbd5f47dd78fed3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear.meta deleted file mode 100644 index d29894d3a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8cc7d1795a6bd4f75927ef02b05e44e7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraints.cs deleted file mode 100644 index d5116e659..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraints.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputeStretchShearConstraints : ComputeConstraintsImpl - { - public ComputeShader constraintsShader; - public int projectKernel; - public int applyKernel; - - public ComputeStretchShearConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.StretchShear) - { - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/StretchShearConstraints")); - projectKernel = constraintsShader.FindKernel("Project"); - applyKernel = constraintsShader.FindKernel("Apply"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputeStretchShearConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputeStretchShearConstraintsBatch); - batch.Destroy(); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraints.cs.meta deleted file mode 100644 index e91936fa3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d7b820e9c187947bf8c31d04d72c402d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraintsBatch.cs deleted file mode 100644 index 991733151..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraintsBatch.cs +++ /dev/null @@ -1,91 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeStretchShearConstraintsBatch : ComputeConstraintsBatchImpl, IStretchShearConstraintsBatchImpl - { - GraphicsBuffer orientationIndices; - GraphicsBuffer restLengths; - GraphicsBuffer restOrientations; - GraphicsBuffer stiffnesses; - - public ComputeStretchShearConstraintsBatch(ComputeStretchShearConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.StretchShear; - } - - public void SetStretchShearConstraints(ObiNativeIntList particleIndices, ObiNativeIntList orientationIndices, ObiNativeFloatList restLengths, ObiNativeQuaternionList restOrientations, ObiNativeVector3List stiffnesses, ObiNativeFloatList lambdas, int count) - { - this.particleIndices = particleIndices.AsComputeBuffer(); - this.orientationIndices = orientationIndices.AsComputeBuffer(); - this.restLengths = restLengths.AsComputeBuffer(); - this.restOrientations = restOrientations.AsComputeBuffer(); - this.stiffnesses = stiffnesses.AsComputeBuffer(); - this.lambdas = lambdas.AsComputeBuffer(); - this.lambdasList = lambdas; - - m_ConstraintCount = count; - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - if (m_ConstraintCount > 0) - { - var shader = ((ComputeStretchShearConstraints)m_Constraints).constraintsShader; - int projectKernel = ((ComputeStretchShearConstraints)m_Constraints).projectKernel; - - shader.SetBuffer(projectKernel, "particleIndices", particleIndices); - shader.SetBuffer(projectKernel, "orientationIndices", orientationIndices); - shader.SetBuffer(projectKernel, "restLengths", restLengths); - shader.SetBuffer(projectKernel, "restOrientations", restOrientations); - shader.SetBuffer(projectKernel, "stiffnesses", stiffnesses); - shader.SetBuffer(projectKernel, "lambdas", lambdas); - - shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(projectKernel, "orientations", solverImplementation.orientationsBuffer); - shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(projectKernel, "invRotationalMasses", solverImplementation.invRotationalMassesBuffer); - - shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(projectKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); - shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - shader.SetBuffer(projectKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("deltaTime", substepTime); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(projectKernel, threadGroups, 1, 1); - } - } - - public override void Apply(float substepTime) - { - if (m_ConstraintCount > 0) - { - var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); - - var shader = ((ComputeStretchShearConstraints)m_Constraints).constraintsShader; - int applyKernel = ((ComputeStretchShearConstraints)m_Constraints).applyKernel; - - shader.SetBuffer(applyKernel, "particleIndices", particleIndices); - shader.SetBuffer(applyKernel, "orientationIndices", orientationIndices); - shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(applyKernel, "orientations", solverImplementation.orientationsBuffer); - - shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(applyKernel, "orientationDeltasAsInt", solverImplementation.orientationDeltasIntBuffer); - shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - shader.SetBuffer(applyKernel, "orientationConstraintCounts", solverImplementation.orientationConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("sorFactor", parameters.SORFactor); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(applyKernel, threadGroups, 1, 1); - } - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraintsBatch.cs.meta deleted file mode 100644 index 062a0cfcc..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/StretchShear/StretchShearConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f2d0b5dfba06143f5b0a9939a3a2364b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether.meta deleted file mode 100644 index 4c0427c6e..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4ee9753d7b4f7422b9057618aa73476b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraints.cs deleted file mode 100644 index a1ddceefe..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraints.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputeTetherConstraints : ComputeConstraintsImpl - { - public ComputeShader constraintsShader; - public int projectKernel; - public int applyKernel; - - public ComputeTetherConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Tether) - { - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/TetherConstraints")); - projectKernel = constraintsShader.FindKernel("Project"); - applyKernel = constraintsShader.FindKernel("Apply"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputeTetherConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputeTetherConstraintsBatch); - batch.Destroy(); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraints.cs.meta deleted file mode 100644 index f663b0e3e..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 56470001140924abea4d2589db0863ec -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraintsBatch.cs deleted file mode 100644 index d482a917c..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraintsBatch.cs +++ /dev/null @@ -1,75 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeTetherConstraintsBatch : ComputeConstraintsBatchImpl, ITetherConstraintsBatchImpl - { - GraphicsBuffer maxLengthScale; - GraphicsBuffer stiffnesses; - - public ComputeTetherConstraintsBatch(ComputeTetherConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.Tether; - } - - public void SetTetherConstraints(ObiNativeIntList particleIndices, ObiNativeVector2List maxLengthScale, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count) - { - this.particleIndices = particleIndices.AsComputeBuffer(); - this.maxLengthScale = maxLengthScale.AsComputeBuffer(); - this.stiffnesses = stiffnesses.AsComputeBuffer(); - this.lambdas = lambdas.AsComputeBuffer(); - this.lambdasList = lambdas; - - m_ConstraintCount = count; - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - if (m_ConstraintCount > 0) - { - var shader = ((ComputeTetherConstraints)m_Constraints).constraintsShader; - int projectKernel = ((ComputeTetherConstraints)m_Constraints).projectKernel; - - shader.SetBuffer(projectKernel, "particleIndices", particleIndices); - shader.SetBuffer(projectKernel, "maxLengthScale", maxLengthScale); - shader.SetBuffer(projectKernel, "stiffnesses", stiffnesses); - shader.SetBuffer(projectKernel, "lambdas", lambdas); - - shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("deltaTime", substepTime); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(projectKernel, threadGroups, 1, 1); - } - } - - public override void Apply(float substepTime) - { - if (m_ConstraintCount > 0) - { - var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); - - var shader = ((ComputeTetherConstraints)m_Constraints).constraintsShader; - int applyKernel = ((ComputeTetherConstraints)m_Constraints).applyKernel; - - shader.SetBuffer(applyKernel, "particleIndices", particleIndices); - shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("sorFactor", parameters.SORFactor); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(applyKernel, threadGroups, 1, 1); - } - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraintsBatch.cs.meta deleted file mode 100644 index 93feeaa45..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Tether/ComputeTetherConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b68d976ed2b5c48d191ee9d067a164de -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume.meta deleted file mode 100644 index ef341e7a8..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: b0eea52c14b4b4e7698c65a183951102 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraints.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraints.cs deleted file mode 100644 index e673c5ed3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraints.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public class ComputeVolumeConstraints : ComputeConstraintsImpl - { - public ComputeShader constraintsShader; - public int gradientsKernel; - public int volumeKernel; - public int denominatorsKernel; - public int constraintKernel; - public int deltasKernel; - public int applyKernel; - - public ComputeVolumeConstraints(ComputeSolverImpl solver) : base(solver, Oni.ConstraintType.Volume) - { - constraintsShader = GameObject.Instantiate(Resources.Load("Compute/VolumeConstraints")); - gradientsKernel = constraintsShader.FindKernel("Gradients"); - volumeKernel = constraintsShader.FindKernel("CalculateVolume"); - denominatorsKernel = constraintsShader.FindKernel("Denominators"); - constraintKernel = constraintsShader.FindKernel("Constraint"); - deltasKernel = constraintsShader.FindKernel("AccumulateDeltas"); - applyKernel = constraintsShader.FindKernel("Apply"); - } - - public override IConstraintsBatchImpl CreateConstraintsBatch() - { - var dataBatch = new ComputeVolumeConstraintsBatch(this); - batches.Add(dataBatch); - return dataBatch; - } - - public override void RemoveBatch(IConstraintsBatchImpl batch) - { - batches.Remove(batch as ComputeVolumeConstraintsBatch); - batch.Destroy(); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraints.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraints.cs.meta deleted file mode 100644 index e01c6e26e..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f2266fb2819d84335874a8110cdacb76 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraintsBatch.cs deleted file mode 100644 index 8f7e9b5eb..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraintsBatch.cs +++ /dev/null @@ -1,223 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; - -namespace Obi -{ - public class ComputeVolumeConstraintsBatch : ComputeConstraintsBatchImpl, IVolumeConstraintsBatchImpl - { - GraphicsBuffer firstTriangle; - GraphicsBuffer numTriangles; - GraphicsBuffer restVolumes; - GraphicsBuffer pressureStiffness; - - GraphicsBuffer volumes; - GraphicsBuffer denominators; - GraphicsBuffer triangleConstraintIndex; // for each triangle, its constraint index. - GraphicsBuffer particles; // indices of particles involved in each constraint. - GraphicsBuffer particleConstraintIndex; // for each particle, its constraint index. - - public ComputeVolumeConstraintsBatch(ComputeVolumeConstraints constraints) - { - m_Constraints = constraints; - m_ConstraintType = Oni.ConstraintType.Volume; - } - - public void SetVolumeConstraints(ObiNativeIntList triangles, - ObiNativeIntList firstTriangle, - ObiNativeIntList numTriangles, - ObiNativeFloatList restVolumes, - ObiNativeVector2List pressureStiffness, - ObiNativeFloatList lambdas, - int count) - { - // store volume and denominator per constraint: - volumes = new GraphicsBuffer(GraphicsBuffer.Target.Structured, count, 4); - denominators = new GraphicsBuffer(GraphicsBuffer.Target.Structured, count, 4); - - - // get particles involved in each constraint: - List partic = new List(); - List partConstIndex = new List(); - List triConstIndex = new List(); - for (int i = 0; i < numTriangles.count; ++i) - { - List parts = new List(); - for (int j = 0; j < numTriangles[i]; ++j) - { - int tri = firstTriangle[i] + j; - - parts.Add(triangles[tri * 3]); - parts.Add(triangles[tri * 3+1]); - parts.Add(triangles[tri * 3+2]); - - partConstIndex.Add(i); - partConstIndex.Add(i); - partConstIndex.Add(i); - - triConstIndex.Add(i); - } - - // make them unique: - parts.Sort(); - int resultIndex = parts.Unique((int x, int y) => { return x == y; }); - - // remove excess at the end of the list: - if (resultIndex < parts.Count) - { - int removeCount = parts.Count - resultIndex; - - parts.RemoveRange(resultIndex, removeCount); - partConstIndex.RemoveRange(partConstIndex.Count - removeCount, removeCount); - } - - partic.AddRange(parts); - } - - particles = new GraphicsBuffer(GraphicsBuffer.Target.Structured, partic.Count, 4); - particleConstraintIndex = new GraphicsBuffer(GraphicsBuffer.Target.Structured, partConstIndex.Count, 4); - triangleConstraintIndex = new GraphicsBuffer(GraphicsBuffer.Target.Structured, triConstIndex.Count, 4); - - particles.SetData(partic); - particleConstraintIndex.SetData(partConstIndex); - triangleConstraintIndex.SetData(triConstIndex); - - this.particleIndices = triangles.AsComputeBuffer(); - this.firstTriangle = firstTriangle.AsComputeBuffer(); - this.numTriangles = numTriangles.AsComputeBuffer(); - this.restVolumes = restVolumes.AsComputeBuffer(); - this.pressureStiffness = pressureStiffness.AsComputeBuffer(); - this.lambdas = lambdas.AsComputeBuffer(); - - m_ConstraintCount = count; - } - - public override void Destroy() - { - volumes.Dispose(); - denominators.Dispose(); - particles.Dispose(); - particleConstraintIndex.Dispose(); - triangleConstraintIndex.Dispose(); - } - - public override void Evaluate(float stepTime, float substepTime, int steps, float timeLeft) - { - // 1: parallel over all triangles, atomic accumulate gradient on orientationDeltasInt - // 2: reduction over triangles, sum volume. - // 3: reduction over particles, sum denominator. - // 4: parallel over constraints: lambda - // 5: parallel over triangles, atomic accumulate delta. - - if (m_ConstraintCount > 0) - { - var shader = ((ComputeVolumeConstraints)m_Constraints).constraintsShader; - int gradientsKernel = ((ComputeVolumeConstraints)m_Constraints).gradientsKernel; - int volumeKernel = ((ComputeVolumeConstraints)m_Constraints).volumeKernel; - int denominatorsKernel = ((ComputeVolumeConstraints)m_Constraints).denominatorsKernel; - int constraintKernel = ((ComputeVolumeConstraints)m_Constraints).constraintKernel; - int deltasKernel = ((ComputeVolumeConstraints)m_Constraints).deltasKernel; - - /*shader.SetBuffer(projectKernel, "triangles", particleIndices); - shader.SetBuffer(projectKernel, "firstTriangle", firstTriangle); - shader.SetBuffer(projectKernel, "numTriangles", numTriangles); - shader.SetBuffer(projectKernel, "restVolumes", restVolumes); - shader.SetBuffer(projectKernel, "pressureStiffness", pressureStiffness); - shader.SetBuffer(projectKernel, "lambdas", lambdas); - - shader.SetBuffer(projectKernel, "denominators", denominators); - shader.SetBuffer(projectKernel, "volumes", volumes); - shader.SetBuffer(projectKernel, "gradients", solverImplementation.fluidDataBuffer); - - shader.SetBuffer(projectKernel, "particles", particles); - shader.SetBuffer(projectKernel, "particleConstraintIndex", particleConstraintIndex); - shader.SetBuffer(projectKernel, "triangleConstraintIndex", triangleConstraintIndex); - - shader.SetBuffer(projectKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(projectKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(projectKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(projectKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer);*/ - - int trianglesCount = particleIndices.count / 3; - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetInt("trianglesCount", trianglesCount); - shader.SetInt("particlesCount", particles.count); - shader.SetFloat("deltaTime", substepTime); - - // Gradients: - shader.SetBuffer(gradientsKernel, "triangles", particleIndices); - shader.SetBuffer(gradientsKernel, "gradients", solverImplementation.fluidDataBuffer); - shader.SetBuffer(gradientsKernel, "positions", solverImplementation.positionsBuffer); - - int threadGroups = ComputeMath.ThreadGroupCount(trianglesCount, 128); - shader.Dispatch(gradientsKernel, threadGroups, 1, 1); - - // Volume: - shader.SetBuffer(volumeKernel, "triangles", particleIndices); - shader.SetBuffer(volumeKernel, "gradients", solverImplementation.fluidDataBuffer); - shader.SetBuffer(volumeKernel, "volumes", volumes); - shader.SetBuffer(volumeKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(volumeKernel, "triangleConstraintIndex", triangleConstraintIndex); - - shader.Dispatch(volumeKernel, threadGroups, 1, 1); - - // Denominators: - shader.SetBuffer(denominatorsKernel, "particles", particles); - shader.SetBuffer(denominatorsKernel, "particleConstraintIndex", particleConstraintIndex); - shader.SetBuffer(denominatorsKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(denominatorsKernel, "gradients", solverImplementation.fluidDataBuffer); - shader.SetBuffer(denominatorsKernel, "denominators", denominators); - - threadGroups = ComputeMath.ThreadGroupCount(particles.count, 128); - shader.Dispatch(denominatorsKernel, threadGroups, 1, 1); - - // Constraint: - shader.SetBuffer(constraintKernel, "denominators", denominators); - shader.SetBuffer(constraintKernel, "volumes", volumes); - shader.SetBuffer(constraintKernel, "restVolumes", restVolumes); - shader.SetBuffer(constraintKernel, "pressureStiffness", pressureStiffness); - shader.SetBuffer(constraintKernel, "lambdas", lambdas); - - threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(constraintKernel, threadGroups, 1, 1); - - // Deltas: - shader.SetBuffer(deltasKernel, "particles", particles); - shader.SetBuffer(deltasKernel, "particleConstraintIndex", particleConstraintIndex); - shader.SetBuffer(deltasKernel, "lambdas", lambdas); - shader.SetBuffer(deltasKernel, "invMasses", solverImplementation.invMassesBuffer); - shader.SetBuffer(deltasKernel, "gradients", solverImplementation.fluidDataBuffer); - shader.SetBuffer(deltasKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(deltasKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - threadGroups = ComputeMath.ThreadGroupCount(particles.count, 128); - shader.Dispatch(deltasKernel, threadGroups, 1, 1); - } - } - - public override void Apply(float substepTime) - { - if (m_ConstraintCount > 0) - { - var parameters = solverAbstraction.GetConstraintParameters(m_ConstraintType); - - var shader = ((ComputeVolumeConstraints)m_Constraints).constraintsShader; - int applyKernel = ((ComputeVolumeConstraints)m_Constraints).applyKernel; - - shader.SetBuffer(applyKernel, "triangles", particleIndices); - shader.SetBuffer(applyKernel, "firstTriangle", firstTriangle); - shader.SetBuffer(applyKernel, "numTriangles", numTriangles); - - shader.SetBuffer(applyKernel, "positions", solverImplementation.positionsBuffer); - shader.SetBuffer(applyKernel, "deltasAsInt", solverImplementation.positionDeltasIntBuffer); - shader.SetBuffer(applyKernel, "positionConstraintCounts", solverImplementation.positionConstraintCountBuffer); - - shader.SetInt("activeConstraintCount", m_ConstraintCount); - shader.SetFloat("sorFactor", parameters.SORFactor); - - int threadGroups = ComputeMath.ThreadGroupCount(m_ConstraintCount, 128); - shader.Dispatch(applyKernel, threadGroups, 1, 1); - } - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraintsBatch.cs.meta deleted file mode 100644 index d661247b3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Constraints/Volume/ComputeVolumeConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bf26bec1336ef46c6a92b8d8b0e0cc5e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures.meta b/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures.meta deleted file mode 100644 index e93da584f..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e1787c55de187458bb78941ba68adf09 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeParticleGrid.cs b/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeParticleGrid.cs deleted file mode 100644 index 6ebd4976a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeParticleGrid.cs +++ /dev/null @@ -1,424 +0,0 @@ -using UnityEngine; -using System; - -namespace Obi -{ - public class ComputeParticleGrid : IDisposable - { - public ComputeShader gridShader; - public int clearKernel; - public int insertSimplicesKernel; - public int gridPopulationKernel; - public int sortSimplicesKernel; - public int buildFluidDispatchKernel; - public int buildMortonKernel; - public int mortonSortKernel; - public int sortFluidSimplicesKernel; - - public int sameLevelNeighborsKernel; - public int upperLevelsNeighborsKernel; - public int buildFluidIndexBufferKernel; - public int contactsKernel; - - public ComputePrefixSum cellsPrefixSum; - private ComputePrefixSum fluidPrefixSum; - - public GraphicsBuffer cellCounts; // for each cell, how many simplices in it. - public GraphicsBuffer cellOffsets; // index of the first simplex in the cell (on gridToMorton buffer). - public GraphicsBuffer offsetInCell; // for each simplex, offset within its cell. - public GraphicsBuffer levelPopulation; // buffer storing amount of entries in each grid level - - public GraphicsBuffer neighbors; // neighbor indices for all particles. (maxNeighbors * simplexCount in size) - public GraphicsBuffer neighborCounts; // amount of neighbors for each particle. (simplexCount in size) - - public GraphicsBuffer contactPairs; // list of particle pairs. - public GraphicsBuffer dispatchBuffer; // dispatch info for iterating trough contacts. - - public GraphicsBuffer cellHashToMortonIndex; - public GraphicsBuffer mortonSortedCellHashes; // contains all cell hashes sorted according to their morton index. - public GraphicsBuffer sortedSimplexIndices; // maps from grid index to simplex index. - - public GraphicsBuffer sortedFluidIndices; // contains compacted sorted indices of fluid simplices *only*. Eg, entry 0 contains the index of the first fluid simplex along the morton curve. - public GraphicsBuffer sortedSimplexToFluid; // maps from sorted simplex index to sorted fluid index, or -1 if the simplex is not fluid. - - public GraphicsBuffer sortedPrincipalRadii; // Used by Density constraints: needs to be sorted once per step (not changed by constraints) - public GraphicsBuffer sortedFluidMaterials; // Used by Density constraints: needs to be sorted once per step (not changed by constraints) - public GraphicsBuffer sortedFluidInterface; // Used by Density constraints: needs to be sorted once per step (not changed by constraints) - public GraphicsBuffer sortedFluidData; // Used by Density constraints: no need to be sorted (constraints output). - - public GraphicsBuffer sortedLinearVel; // Not used by density constraints: used for foam advection and mesher. - public GraphicsBuffer sortedAngularVel; // Not used by density constraints: used for foam advection. - - public GraphicsBuffer sortedPositions; // Used by Density constraints: needs to be sorted once per iteration. - public GraphicsBuffer sortedPrevPosOrientations; // Used by Density constraints: needs to be sorted once per iteration. Reuse for orientations (foam advection and mesher). - public GraphicsBuffer sortedUserDataColor; // Used by Density constraints: needs to be sorted once per iteration. Reuse for colors (mesher). - - private const int maxGridLevels = 24; - private uint[] clearDispatch = { 0, 1, 1, 0 }; - - public int maxParticleNeighbors { get; private set; } = 128; - public int maxParticleContacts { get; private set; } = 4; - - public int maxCells{ - get { return cellCounts != null ? cellCounts.count : 0; } - } - - public ComputeParticleGrid() - { - gridShader = GameObject.Instantiate(Resources.Load("Compute/ParticleGrid")); - clearKernel = gridShader.FindKernel("Clear"); - insertSimplicesKernel = gridShader.FindKernel("InsertSimplices"); - gridPopulationKernel = gridShader.FindKernel("FindPopulatedLevels"); - sortSimplicesKernel = gridShader.FindKernel("SortSimplices"); - buildFluidDispatchKernel = gridShader.FindKernel("BuildFluidDispatch"); - buildMortonKernel = gridShader.FindKernel("BuildMortonIndices"); - mortonSortKernel = gridShader.FindKernel("MortonSort"); - sortFluidSimplicesKernel = gridShader.FindKernel("SortFluidSimplices"); - sameLevelNeighborsKernel = gridShader.FindKernel("FindFluidNeighborsInSameLevel"); - upperLevelsNeighborsKernel = gridShader.FindKernel("FindFluidNeighborsInUpperLevels"); - buildFluidIndexBufferKernel = gridShader.FindKernel("BuildFluidParticleIndexBuffer"); - contactsKernel = gridShader.FindKernel("BuildContactList"); - - levelPopulation = new GraphicsBuffer(GraphicsBuffer.Target.Structured, maxGridLevels + 1, 4); - dispatchBuffer = new GraphicsBuffer(GraphicsBuffer.Target.IndirectArguments, 4, sizeof(uint)); - } - - private void Clear() - { - cellsPrefixSum?.Dispose(); - fluidPrefixSum?.Dispose(); - - if (cellCounts != null) - cellCounts.Dispose(); - if (cellOffsets != null) - cellOffsets.Dispose(); - if (offsetInCell != null) - offsetInCell.Dispose(); - - if (contactPairs != null) - contactPairs.Dispose(); - - if (neighbors != null) - neighbors.Dispose(); - if (neighborCounts != null) - neighborCounts.Dispose(); - - if (cellHashToMortonIndex != null) - cellHashToMortonIndex.Dispose(); - if (mortonSortedCellHashes != null) - mortonSortedCellHashes.Dispose(); - if (sortedSimplexIndices != null) - sortedSimplexIndices.Dispose(); - if (sortedFluidIndices != null) - sortedFluidIndices.Dispose(); - if (sortedSimplexToFluid != null) - sortedSimplexToFluid.Dispose(); - - if (sortedPositions != null) - sortedPositions.Dispose(); - if (sortedPrevPosOrientations != null) - sortedPrevPosOrientations.Dispose(); - if (sortedPrincipalRadii != null) - sortedPrincipalRadii.Dispose(); - if (sortedFluidMaterials != null) - sortedFluidMaterials.Dispose(); - if (sortedFluidInterface != null) - sortedFluidInterface.Dispose(); - if (sortedUserDataColor != null) - sortedUserDataColor.Dispose(); - if (sortedFluidData != null) - sortedFluidData.Dispose(); - - if (sortedLinearVel != null) - sortedLinearVel.Dispose(); - if (sortedAngularVel != null) - sortedAngularVel.Dispose(); - - cellsPrefixSum = null; - fluidPrefixSum = null; - cellCounts = null; - cellOffsets = null; - offsetInCell = null; - contactPairs = null; - neighbors = null; - neighborCounts = null; - sortedSimplexIndices = null; - cellHashToMortonIndex = null; - sortedFluidIndices = null; - sortedSimplexToFluid = null; - sortedPositions = null; - sortedPrevPosOrientations = null; - sortedPrincipalRadii = null; - sortedFluidMaterials = null; - sortedFluidInterface = null; - sortedUserDataColor = null; - sortedFluidData = null; - sortedLinearVel = null; - sortedAngularVel = null; - } - - public void Dispose() - { - if (levelPopulation != null) - levelPopulation.Dispose(); - - if (dispatchBuffer != null) - dispatchBuffer.Dispose(); - - levelPopulation = null; - dispatchBuffer = null; - - Clear(); - } - - // Sets the maximum amount of items that can be stored in the grid. - public bool SetCapacity(int capacity, uint maxParticleContacts, uint maxParticleNeighbors) - { - if (offsetInCell == null || capacity > offsetInCell.count || - maxParticleNeighbors != this.maxParticleNeighbors || - maxParticleContacts != this.maxParticleContacts) - { - Clear(); - - this.maxParticleNeighbors = (int)maxParticleNeighbors; - this.maxParticleContacts = (int)maxParticleContacts; - - capacity *= 2; - int hashtableSize = (int)(capacity * 1.5f); - - // hashtable data: - cellCounts = new GraphicsBuffer(GraphicsBuffer.Target.Structured, hashtableSize, 4); - cellOffsets = new GraphicsBuffer(GraphicsBuffer.Target.Structured, hashtableSize, 4); - mortonSortedCellHashes = new GraphicsBuffer(GraphicsBuffer.Target.Structured, hashtableSize, 4); - cellHashToMortonIndex = new GraphicsBuffer(GraphicsBuffer.Target.Structured, hashtableSize, 4); - cellsPrefixSum = new ComputePrefixSum(hashtableSize); - - // per simplex data: - offsetInCell = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 4); - sortedSimplexIndices = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 4); - sortedFluidIndices = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 4); - sortedSimplexToFluid = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 4); - - // contact pairs and neighbor lists: - contactPairs = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity * (int)maxParticleContacts, 8); - neighbors = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity * (int)maxParticleNeighbors, 4); - neighborCounts = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 4); - - // sorted fluid simplex data: - fluidPrefixSum = new ComputePrefixSum(capacity); - sortedPrincipalRadii = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); - sortedFluidMaterials = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); - sortedFluidInterface = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); - sortedPositions = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); - sortedPrevPosOrientations = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); - sortedUserDataColor = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); - sortedFluidData = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); - sortedLinearVel = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); - sortedAngularVel = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capacity, 16); - - return true; - } - return false; - } - - public void BuildGrid(ComputeSolverImpl solver, float deltaTime) - { - dispatchBuffer.SetData(clearDispatch); - solver.fluidDispatchBuffer.SetData(clearDispatch); - - if (solver.simplexCounts.simplexCount > 0) - { - gridShader.SetInt("pointCount", solver.simplexCounts.pointCount); - gridShader.SetInt("edgeCount", solver.simplexCounts.edgeCount); - gridShader.SetInt("triangleCount", solver.simplexCounts.triangleCount); - gridShader.SetInt("maxContacts", contactPairs.count); - gridShader.SetInt("maxCells", cellCounts.count); - gridShader.SetInt("maxNeighbors", maxParticleNeighbors); - gridShader.SetFloat("deltaTime", deltaTime); - gridShader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); - gridShader.SetFloat("particleCCD", solver.abstraction.parameters.particleCCD); - int cellThreadGroups = ComputeMath.ThreadGroupCount(cellCounts.count, 128); - - solver.abstraction.particleContacts.computeBuffer.SetCounterValue(0); - - int simplexThreadGroups = ComputeMath.ThreadGroupCount(solver.simplexCounts.simplexCount, 128); - - // clear grid: - gridShader.SetBuffer(clearKernel, "cellCounts", cellCounts); - gridShader.SetBuffer(clearKernel, "cellOffsets", cellOffsets); - gridShader.SetBuffer(clearKernel, "levelPopulation", levelPopulation); - gridShader.SetBuffer(clearKernel, "mortonSortedCellHashes", mortonSortedCellHashes); - gridShader.Dispatch(clearKernel, cellThreadGroups, 1, 1); - - // insert simplices in grid and flag fluid simplices: - gridShader.SetBuffer(insertSimplicesKernel, "solverBounds", solver.reducedBounds); - gridShader.SetBuffer(insertSimplicesKernel, "simplexBounds", solver.simplexBounds); - gridShader.SetBuffer(insertSimplicesKernel, "simplices", solver.simplices); - gridShader.SetBuffer(insertSimplicesKernel, "phases", solver.phasesBuffer); - gridShader.SetBuffer(insertSimplicesKernel, "neighborCounts", neighborCounts); - gridShader.SetBuffer(insertSimplicesKernel, "levelPopulation", levelPopulation); - gridShader.SetBuffer(insertSimplicesKernel, "cellCoords", solver.cellCoordsBuffer); - gridShader.SetBuffer(insertSimplicesKernel, "cellCounts", cellCounts); - gridShader.SetBuffer(insertSimplicesKernel, "offsetInCell", offsetInCell); - gridShader.SetBuffer(insertSimplicesKernel, "cellOffsets", cellOffsets); - gridShader.Dispatch(insertSimplicesKernel, simplexThreadGroups, 1, 1); - - // find populated grid levels: - gridShader.SetBuffer(gridPopulationKernel, "levelPopulation", levelPopulation); - gridShader.Dispatch(gridPopulationKernel, 1, 1, 1); - - // sort cells along morton curve: - gridShader.SetBuffer(mortonSortKernel, "mortonSortedCellHashes", mortonSortedCellHashes); - gridShader.SetBuffer(mortonSortKernel, "cellOffsets", cellOffsets); - gridShader.SetBuffer(mortonSortKernel, "cellCounts", cellCounts); - - int numPairs = ObiUtils.CeilToPowerOfTwo(maxCells) / 2; - int numStages = (int)Mathf.Log(numPairs * 2, 2); - int groups = ComputeMath.ThreadGroupCount(numPairs, 128); - - for (int stageIndex = 0; stageIndex < numStages; stageIndex++) - { - for (int stepIndex = 0; stepIndex < stageIndex + 1; stepIndex++) - { - int groupWidth = 1 << (stageIndex - stepIndex); - int groupHeight = 2 * groupWidth - 1; - gridShader.SetInt("groupWidth", groupWidth); - gridShader.SetInt("groupHeight", groupHeight); - gridShader.SetInt("stepIndex", stepIndex); - gridShader.Dispatch(mortonSortKernel, groups, 1, 1); - } - } - - // build morton indices: - gridShader.SetBuffer(buildMortonKernel, "mortonSortedCellHashes", mortonSortedCellHashes); - gridShader.SetBuffer(buildMortonKernel, "cellHashToMortonIndex", cellHashToMortonIndex); - gridShader.Dispatch(buildMortonKernel, cellThreadGroups, 1, 1); - - // prefix sum to build cell start array: - cellsPrefixSum.Sum(cellCounts, cellOffsets); - - // sort simplex indices and compact fluid simplex indices: - gridShader.SetBuffer(sortSimplicesKernel, "phases", solver.phasesBuffer); - gridShader.SetBuffer(sortSimplicesKernel, "cellHashToMortonIndex", cellHashToMortonIndex); - gridShader.SetBuffer(sortSimplicesKernel, "sortedSimplexIndices", sortedSimplexIndices); - gridShader.SetBuffer(sortSimplicesKernel, "sortedFluidIndices", sortedFluidIndices); - gridShader.SetBuffer(sortSimplicesKernel, "R_offsetInCell", offsetInCell); - gridShader.SetBuffer(sortSimplicesKernel, "R_cellOffsets", cellOffsets); - gridShader.SetBuffer(sortSimplicesKernel, "R_cellCoords", solver.cellCoordsBuffer); - gridShader.SetBuffer(sortSimplicesKernel, "simplices", solver.simplices); - gridShader.Dispatch(sortSimplicesKernel, simplexThreadGroups, 1, 1); - - // prefix sum of fluid flags: - fluidPrefixSum.Sum(sortedFluidIndices, sortedSimplexToFluid); - - // build fluid dispatch buffer: - gridShader.SetBuffer(buildFluidDispatchKernel, "fluidDispatchBuffer", solver.fluidDispatchBuffer); - gridShader.SetBuffer(buildFluidDispatchKernel, "sortedFluidIndices", sortedFluidIndices); - gridShader.SetBuffer(buildFluidDispatchKernel, "sortedSimplexToFluid", sortedSimplexToFluid); - gridShader.Dispatch(buildFluidDispatchKernel, 1, 1, 1); - - // sort fluid data: - gridShader.SetBuffer(sortFluidSimplicesKernel, "sortedFluidIndices", sortedFluidIndices); - gridShader.SetBuffer(sortFluidSimplicesKernel, "cellHashToMortonIndex", cellHashToMortonIndex); - gridShader.SetBuffer(sortFluidSimplicesKernel, "positions", solver.positionsBuffer); - gridShader.SetBuffer(sortFluidSimplicesKernel, "fluidInterface", solver.fluidInterfaceBuffer); - gridShader.SetBuffer(sortFluidSimplicesKernel, "principalRadii", solver.principalRadiiBuffer); - gridShader.SetBuffer(sortFluidSimplicesKernel, "phases", solver.phasesBuffer); - gridShader.SetBuffer(sortFluidSimplicesKernel, "sortedPositions", sortedPositions); - gridShader.SetBuffer(sortFluidSimplicesKernel, "sortedFluidMaterials", sortedFluidMaterials); - gridShader.SetBuffer(sortFluidSimplicesKernel, "sortedFluidInterface", sortedFluidInterface); - gridShader.SetBuffer(sortFluidSimplicesKernel, "sortedPrincipalRadii", sortedPrincipalRadii); - gridShader.SetBuffer(sortFluidSimplicesKernel, "fluidMaterials", solver.fluidMaterialsBuffer); - gridShader.SetBuffer(sortFluidSimplicesKernel, "R_offsetInCell", offsetInCell); - gridShader.SetBuffer(sortFluidSimplicesKernel, "R_cellOffsets", cellOffsets); - gridShader.SetBuffer(sortFluidSimplicesKernel, "R_cellCoords", solver.cellCoordsBuffer); - gridShader.SetBuffer(sortFluidSimplicesKernel, "sortedSimplexToFluid", sortedSimplexToFluid); - gridShader.SetBuffer(sortFluidSimplicesKernel, "simplices", solver.simplices); - gridShader.SetBuffer(sortFluidSimplicesKernel, "fluidDispatchBuffer", solver.fluidDispatchBuffer); - gridShader.Dispatch(sortFluidSimplicesKernel, simplexThreadGroups, 1, 1); - } - } - - public void GenerateContacts(ComputeSolverImpl solver) - { - if (solver.simplexCounts.simplexCount > 0) - { - int simplexThreadGroups = ComputeMath.ThreadGroupCount(solver.simplexCounts.simplexCount, 128); - - // generate contacts list: - gridShader.SetBuffer(contactsKernel, "simplices", solver.simplices); - gridShader.SetBuffer(contactsKernel, "sortedSimplexIndices", sortedSimplexIndices); - gridShader.SetBuffer(contactsKernel, "sortedPositions", sortedPositions); - gridShader.SetBuffer(contactsKernel, "sortedFluidMaterials", sortedFluidMaterials); - gridShader.SetBuffer(contactsKernel, "positions", solver.positionsBuffer); - - gridShader.SetBuffer(contactsKernel, "cellHashToMortonIndex", cellHashToMortonIndex); - gridShader.SetBuffer(contactsKernel, "restPositions", solver.restPositionsBuffer); - gridShader.SetBuffer(contactsKernel, "orientations", solver.orientationsBuffer); - gridShader.SetBuffer(contactsKernel, "restOrientations", solver.restOrientationsBuffer); - gridShader.SetBuffer(contactsKernel, "velocities", solver.velocitiesBuffer); - gridShader.SetBuffer(contactsKernel, "invMasses", solver.invMassesBuffer); - gridShader.SetBuffer(contactsKernel, "phases", solver.phasesBuffer); - gridShader.SetBuffer(contactsKernel, "filters", solver.filtersBuffer); - gridShader.SetBuffer(contactsKernel, "principalRadii", solver.principalRadiiBuffer); - gridShader.SetBuffer(contactsKernel, "normals", solver.normalsBuffer); - gridShader.SetBuffer(contactsKernel, "R_cellCoords", solver.cellCoordsBuffer); - gridShader.SetBuffer(contactsKernel, "R_cellOffsets", cellOffsets); - gridShader.SetBuffer(contactsKernel, "R_cellCounts", cellCounts); - gridShader.SetBuffer(contactsKernel, "R_offsetInCell", offsetInCell); - gridShader.SetBuffer(contactsKernel, "R_levelPopulation", levelPopulation); - gridShader.SetBuffer(contactsKernel, "particleContacts", solver.abstraction.particleContacts.computeBuffer); - gridShader.SetBuffer(contactsKernel, "contactPairs", contactPairs); - gridShader.SetBuffer(contactsKernel, "dispatchBuffer", dispatchBuffer); - gridShader.Dispatch(contactsKernel, simplexThreadGroups, 1, 1); - } - } - - public void GenerateFluidNeighborhoods(ComputeSolverImpl solver) - { - if (solver.simplexCounts.simplexCount > 0) - { - // generate fluid neighbors list: - gridShader.SetBuffer(sameLevelNeighborsKernel, "solverBounds", solver.reducedBounds); - gridShader.SetBuffer(sameLevelNeighborsKernel, "cellHashToMortonIndex", cellHashToMortonIndex); - gridShader.SetBuffer(sameLevelNeighborsKernel, "sortedFluidIndices", sortedFluidIndices); - gridShader.SetBuffer(sameLevelNeighborsKernel, "sortedPositions", sortedPositions); - gridShader.SetBuffer(sameLevelNeighborsKernel, "sortedFluidMaterials", sortedFluidMaterials); - gridShader.SetBuffer(sameLevelNeighborsKernel, "R_cellCoords", solver.cellCoordsBuffer); - gridShader.SetBuffer(sameLevelNeighborsKernel, "R_cellOffsets", cellOffsets); - gridShader.SetBuffer(sameLevelNeighborsKernel, "R_cellCounts", cellCounts); - gridShader.SetBuffer(sameLevelNeighborsKernel, "R_offsetInCell", offsetInCell); - gridShader.SetBuffer(sameLevelNeighborsKernel, "R_levelPopulation", levelPopulation); - gridShader.SetBuffer(sameLevelNeighborsKernel, "sortedSimplexToFluid", sortedSimplexToFluid); - gridShader.SetBuffer(sameLevelNeighborsKernel, "simplices", solver.simplices); - gridShader.SetBuffer(sameLevelNeighborsKernel, "neighbors", neighbors); - gridShader.SetBuffer(sameLevelNeighborsKernel, "neighborCounts", neighborCounts); - gridShader.SetBuffer(sameLevelNeighborsKernel, "dispatchBuffer", solver.fluidDispatchBuffer); - gridShader.DispatchIndirect(sameLevelNeighborsKernel, solver.fluidDispatchBuffer); - - gridShader.SetBuffer(upperLevelsNeighborsKernel, "solverBounds", solver.reducedBounds); - gridShader.SetBuffer(upperLevelsNeighborsKernel, "cellHashToMortonIndex", cellHashToMortonIndex); - gridShader.SetBuffer(upperLevelsNeighborsKernel, "sortedPositions", sortedPositions); - gridShader.SetBuffer(upperLevelsNeighborsKernel, "sortedFluidIndices", sortedFluidIndices); - gridShader.SetBuffer(upperLevelsNeighborsKernel, "mortonSortedSimplexIndices", mortonSortedCellHashes); - gridShader.SetBuffer(upperLevelsNeighborsKernel, "sortedFluidMaterials", sortedFluidMaterials); - gridShader.SetBuffer(upperLevelsNeighborsKernel, "R_cellCoords", solver.cellCoordsBuffer); - gridShader.SetBuffer(upperLevelsNeighborsKernel, "R_cellOffsets", cellOffsets); - gridShader.SetBuffer(upperLevelsNeighborsKernel, "R_cellCounts", cellCounts); - gridShader.SetBuffer(upperLevelsNeighborsKernel, "R_offsetInCell", offsetInCell); - gridShader.SetBuffer(upperLevelsNeighborsKernel, "R_levelPopulation", levelPopulation); - gridShader.SetBuffer(upperLevelsNeighborsKernel, "sortedSimplexToFluid", sortedSimplexToFluid); - gridShader.SetBuffer(upperLevelsNeighborsKernel, "simplices", solver.simplices); - gridShader.SetBuffer(upperLevelsNeighborsKernel, "neighbors", neighbors); - gridShader.SetBuffer(upperLevelsNeighborsKernel, "neighborCounts", neighborCounts); - gridShader.SetBuffer(upperLevelsNeighborsKernel, "dispatchBuffer", solver.fluidDispatchBuffer); - gridShader.DispatchIndirect(upperLevelsNeighborsKernel, solver.fluidDispatchBuffer); - - gridShader.SetBuffer(buildFluidIndexBufferKernel, "sortedFluidIndices", sortedFluidIndices); - gridShader.SetBuffer(buildFluidIndexBufferKernel, "simplices", solver.simplices); - gridShader.SetBuffer(buildFluidIndexBufferKernel, "dispatchBuffer", solver.fluidDispatchBuffer); - gridShader.DispatchIndirect(buildFluidIndexBufferKernel, solver.fluidDispatchBuffer); - } - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeParticleGrid.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeParticleGrid.cs.meta deleted file mode 100644 index 3316aef4d..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeParticleGrid.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4965240eebe4141968c02c8af6c340ef -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputePrefixSum.cs b/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputePrefixSum.cs deleted file mode 100644 index 4f29ab9f3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputePrefixSum.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using Obi; -using UnityEngine; - -namespace Obi -{ - public class ComputePrefixSum - { - private ComputeShader scanShader; - private int scanInBucketKernel; - private int scanAddBucketResult; - - private List blockSums = new List(); - private List prefixBlockSums = new List(); - private int inputSize; - private const int threadsPerGroup = 512; - - public ComputePrefixSum(int inputSize) - { - scanShader = Resources.Load("Compute/Scan"); - scanInBucketKernel = scanShader.FindKernel("ScanInBucketExclusive"); - scanAddBucketResult = scanShader.FindKernel("ScanAddBucketResult"); - - this.inputSize = inputSize; - - // intermediate auxiliary buffers to store prefix sum of partial block sums: - int c = inputSize; - while (c > 1) - { - c = (c + threadsPerGroup - 1) / threadsPerGroup; - blockSums.Add(new GraphicsBuffer(GraphicsBuffer.Target.Structured, c, 4)); - prefixBlockSums.Add(new GraphicsBuffer(GraphicsBuffer.Target.Structured, c, 4)); - } - } - - public void Dispose() - { - foreach (var sums in blockSums) - if (sums != null && sums.IsValid()) - sums.Dispose(); - blockSums.Clear(); - - foreach (var sums in prefixBlockSums) - if (sums != null && sums.IsValid()) - sums.Dispose(); - prefixBlockSums.Clear(); - } - - public void Sum(GraphicsBuffer input, GraphicsBuffer result) - { - if (input.count != inputSize) - return; - Sum(input, result, input.count, 0); - } - - private void Sum(GraphicsBuffer input, GraphicsBuffer result, int count, int level) - { - int groups = (count + threadsPerGroup - 1) / threadsPerGroup; - - // calculate partial prefix sums, one per block: - scanShader.SetInt("count", count); - scanShader.SetBuffer(scanInBucketKernel, "_Input", input); - scanShader.SetBuffer(scanInBucketKernel, "_Result", result); - scanShader.SetBuffer(scanInBucketKernel, "_BlockSum", blockSums[level]); - scanShader.Dispatch(scanInBucketKernel, groups, 1, 1); - - if (groups <= 1) - return; - - // recursively calculate prefix sum of the partial block sums: - Sum(blockSums[level], prefixBlockSums[level], groups, level + 1); - - // add the scanned partial block sums to the result: - // (it's important to set the count again, as we just returned from a recursive call). - scanShader.SetInt("count", count); - scanShader.SetBuffer(scanAddBucketResult, "_Input", prefixBlockSums[level]); - scanShader.SetBuffer(scanAddBucketResult, "_Result", result); - scanShader.Dispatch(scanAddBucketResult, groups, 1, 1); - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputePrefixSum.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputePrefixSum.cs.meta deleted file mode 100644 index 09aece2e8..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputePrefixSum.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7909b2c7733204ec39181859400b780e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeSort.cs b/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeSort.cs deleted file mode 100644 index 26c6af2bf..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeSort.cs +++ /dev/null @@ -1,46 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeSort - { - private ComputeShader sortShader; - private int sortKernel; - - public ComputeSort() - { - sortShader = Resources.Load("Compute/BitonicSort"); - sortKernel = sortShader.FindKernel("BitonicSort"); - } - - public void Sort(GraphicsBuffer keys, GraphicsBuffer values) - { - if (keys.count != values.count) - return; - - sortShader.SetInt("numEntries", keys.count); - sortShader.SetBuffer(sortKernel, "Keys", keys); - sortShader.SetBuffer(sortKernel, "Values", values); - - // Launch each step of the sorting algorithm (once the previous step is complete) - // Number of steps = [log2(n) * (log2(n) + 1)] / 2 - // where n = nearest power of 2 that is greater or equal to the number of inputs - int numPairs = ObiUtils.CeilToPowerOfTwo(keys.count) / 2; - int numStages = (int)Mathf.Log(numPairs * 2, 2); - int groups = ComputeMath.ThreadGroupCount(numPairs, 128); - - for (int stageIndex = 0; stageIndex < numStages; stageIndex++) - { - for (int stepIndex = 0; stepIndex < stageIndex + 1; stepIndex++) - { - int groupWidth = 1 << (stageIndex - stepIndex); - int groupHeight = 2 * groupWidth - 1; - sortShader.SetInt("groupWidth", groupWidth); - sortShader.SetInt("groupHeight", groupHeight); - sortShader.SetInt("stepIndex", stepIndex); - sortShader.Dispatch(sortKernel, groups,1,1); - } - } - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeSort.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeSort.cs.meta deleted file mode 100644 index 4705d4209..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/DataStructures/ComputeSort.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bda407cc694ed4b438cfea3d847ee85f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Queries.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Queries.meta deleted file mode 100644 index ae5d9ccff..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Queries.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 720d0f7e26a9d46039d564d1d98f08c9 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeBoxQuery.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeBoxQuery.cs deleted file mode 100644 index 9e40726a3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeBoxQuery.cs +++ /dev/null @@ -1,42 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeBoxQuery - { - private ComputeShader shader; - private int kernel; - - public ComputeBoxQuery() - { - shader = GameObject.Instantiate(Resources.Load("Compute/BoxShapeQuery")); - kernel = shader.FindKernel("GenerateResults"); - } - - public void GetResults(ComputeSolverImpl solver, SpatialQueries world, GraphicsBuffer transforms, GraphicsBuffer shapes, GraphicsBuffer results) - { - shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); - shader.SetInt("pointCount", solver.simplexCounts.pointCount); - shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); - shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); - shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); - shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); - shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); - - shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); - shader.SetBuffer(kernel, "simplices", solver.simplices); - shader.SetBuffer(kernel, "positions", solver.positionsBuffer); - shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); - shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); - shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); - shader.SetBuffer(kernel, "transforms", transforms); - shader.SetBuffer(kernel, "shapes", shapes); - shader.SetBuffer(kernel, "contactPairs", world.contactPairs); - shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); - shader.SetBuffer(kernel, "results", results); - shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); - shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)QueryShape.QueryType.Box); - } - - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeBoxQuery.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeBoxQuery.cs.meta deleted file mode 100644 index 1236be060..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeBoxQuery.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8956fcafa2f984a80a9448fb71a11c7d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeRayQuery.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeRayQuery.cs deleted file mode 100644 index 4fe96fd1d..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeRayQuery.cs +++ /dev/null @@ -1,42 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeRayQuery - { - private ComputeShader shader; - private int kernel; - - public ComputeRayQuery() - { - shader = GameObject.Instantiate(Resources.Load("Compute/RayShapeQuery")); - kernel = shader.FindKernel("GenerateResults"); - } - - public void GetResults(ComputeSolverImpl solver, SpatialQueries world, GraphicsBuffer transforms, GraphicsBuffer shapes, GraphicsBuffer results) - { - shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); - shader.SetInt("pointCount", solver.simplexCounts.pointCount); - shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); - shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); - shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); - shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); - shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); - - shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); - shader.SetBuffer(kernel, "simplices", solver.simplices); - shader.SetBuffer(kernel, "positions", solver.positionsBuffer); - shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); - shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); - shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); - shader.SetBuffer(kernel, "transforms", transforms); - shader.SetBuffer(kernel, "shapes", shapes); - shader.SetBuffer(kernel, "contactPairs", world.contactPairs); - shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); - shader.SetBuffer(kernel, "results", results); - shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); - shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)QueryShape.QueryType.Ray); - } - - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeRayQuery.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeRayQuery.cs.meta deleted file mode 100644 index a075d168c..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeRayQuery.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: df812762d482f4e8c86a698f8062b99a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeSphereQuery.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeSphereQuery.cs deleted file mode 100644 index 3c53dfb59..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeSphereQuery.cs +++ /dev/null @@ -1,42 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public class ComputeSphereQuery - { - private ComputeShader shader; - private int kernel; - - public ComputeSphereQuery() - { - shader = GameObject.Instantiate(Resources.Load("Compute/SphereShapeQuery")); - kernel = shader.FindKernel("GenerateResults"); - } - - public void GetResults(ComputeSolverImpl solver, SpatialQueries world, GraphicsBuffer transforms, GraphicsBuffer shapes, GraphicsBuffer results) - { - shader.SetInt("maxContacts", ComputeColliderWorld.maxContacts); - shader.SetInt("pointCount", solver.simplexCounts.pointCount); - shader.SetInt("edgeCount", solver.simplexCounts.edgeCount); - shader.SetInt("triangleCount", solver.simplexCounts.triangleCount); - shader.SetInt("surfaceCollisionIterations", solver.abstraction.parameters.surfaceCollisionIterations); - shader.SetFloat("surfaceCollisionTolerance", solver.abstraction.parameters.surfaceCollisionTolerance); - shader.SetFloat("collisionMargin", solver.abstraction.parameters.collisionMargin); - - shader.SetBuffer(kernel, "worldToSolver", solver.worldToSolverBuffer); - shader.SetBuffer(kernel, "simplices", solver.simplices); - shader.SetBuffer(kernel, "positions", solver.positionsBuffer); - shader.SetBuffer(kernel, "orientations", solver.orientationsBuffer); - shader.SetBuffer(kernel, "velocities", solver.velocitiesBuffer); - shader.SetBuffer(kernel, "principalRadii", solver.principalRadiiBuffer); - shader.SetBuffer(kernel, "transforms", transforms); - shader.SetBuffer(kernel, "shapes", shapes); - shader.SetBuffer(kernel, "contactPairs", world.contactPairs); - shader.SetBuffer(kernel, "contactOffsetsPerType", world.contactOffsetsPerType); - shader.SetBuffer(kernel, "results", results); - shader.SetBuffer(kernel, "dispatchBuffer", world.dispatchBuffer); - shader.DispatchIndirect(kernel, world.dispatchBuffer, 32 + 16 * (int)QueryShape.QueryType.Sphere); - } - - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeSphereQuery.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeSphereQuery.cs.meta deleted file mode 100644 index 5eb442cca..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Queries/ComputeSphereQuery.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c65e1510ca8a54514b0a6a06c37a48fc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering.meta deleted file mode 100644 index a6090f8a3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 452c2c7555bce40d1bff65cc65686668 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common.meta deleted file mode 100644 index 3fc9d9a39..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 17503ab71a29b454ab068ea80d5f203c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeFoamRenderSystem.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeFoamRenderSystem.cs deleted file mode 100644 index dea63a81c..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeFoamRenderSystem.cs +++ /dev/null @@ -1,155 +0,0 @@ -using UnityEngine; -using UnityEngine.Rendering; -#if (SRP_UNIVERSAL) -using UnityEngine.Rendering.Universal; -#endif - -namespace Obi -{ - - public class ComputeFoamRenderSystem : ObiFoamRenderSystem - { - - private ComputeShader foamShader; - private int sortKernel; - private int clearMeshKernel; - private int buildMeshKernel; - - protected Material thickness_Material; - protected Material color_Material; - protected LocalKeyword shader2DFeature; - - public ComputeFoamRenderSystem(ObiSolver solver) : base (solver) - { - foamShader = GameObject.Instantiate(Resources.Load("Compute/FluidFoam")); - sortKernel = foamShader.FindKernel("Sort"); - clearMeshKernel = foamShader.FindKernel("ClearMesh"); - buildMeshKernel = foamShader.FindKernel("BuildMesh"); - -#if (SRP_UNIVERSAL) - if (GraphicsSettings.currentRenderPipeline is UniversalRenderPipelineAsset) - renderBatch = new ProceduralRenderBatch(0, Resources.Load("ObiMaterials/URP/Fluid/FoamParticlesURP"), new RenderBatchParams(true)); - else -#endif - renderBatch = new ProceduralRenderBatch(0, Resources.Load("ObiMaterials/Fluid/FoamParticles"), new RenderBatchParams(true)); - - renderBatch.vertexCount = (int)m_Solver.maxFoamParticles * 4; - renderBatch.triangleCount = (int)m_Solver.maxFoamParticles * 2; - renderBatch.Initialize(layout, true); - } - - private void ReallocateParticleBuffers() - { - // in case the amount of particles allocated does not match - // the amount requested by the solver, reallocate - if (m_Solver.foamPositions.count * 4 != renderBatch.vertexCount) - { - renderBatch.Dispose(); - renderBatch.vertexCount = m_Solver.foamPositions.count * 4; - renderBatch.triangleCount = m_Solver.foamPositions.count * 2; - renderBatch.Initialize(layout, true); - } - } - - public override void Setup() - { - using (m_SetupRenderMarker.Auto()) - { - for (int i = 0; i < renderers.Count; ++i) - { - renderers[i].actor.solverIndices.AsComputeBuffer(); - } - } - } - - public override void Step() - { - // update solver indices, since particles may have died while updating the emitter. - for (int i = 0; i < renderers.Count; ++i) - { - renderers[i].actor.solverIndices.Upload(); - } - } - - public override void Render() - { - var solver = m_Solver.implementation as ComputeSolverImpl; - - if (!Application.isPlaying) - return; - - ReallocateParticleBuffers(); - - if (solver.activeParticlesBuffer == null || solver.abstraction.foamPositions.computeBuffer == null) - return; - - foreach (Camera camera in cameras) - { - if (camera == null) - continue; - - // sort by distance to camera: - foamShader.SetVector("sortAxis", solver.abstraction.transform.InverseTransformDirection(camera.transform.forward)); - foamShader.SetBuffer(sortKernel, "outputPositions", solver.abstraction.foamPositions.computeBuffer); - foamShader.SetBuffer(sortKernel, "outputVelocities", solver.abstraction.foamVelocities.computeBuffer); - foamShader.SetBuffer(sortKernel, "outputColors", solver.abstraction.foamColors.computeBuffer); - foamShader.SetBuffer(sortKernel, "outputAttributes", solver.abstraction.foamAttributes.computeBuffer); - foamShader.SetBuffer(sortKernel, "dispatch", solver.abstraction.foamCount.computeBuffer); - - int numPairs = ObiUtils.CeilToPowerOfTwo(m_Solver.foamPositions.count) / 2; - int numStages = (int)Mathf.Log(numPairs * 2, 2); - int groups = ComputeMath.ThreadGroupCount(numPairs, 128); - - for (int stageIndex = 0; stageIndex < numStages; stageIndex++) - { - for (int stepIndex = 0; stepIndex < stageIndex + 1; stepIndex++) - { - int groupWidth = 1 << (stageIndex - stepIndex); - int groupHeight = 2 * groupWidth - 1; - foamShader.SetInt("groupWidth", groupWidth); - foamShader.SetInt("groupHeight", groupHeight); - foamShader.SetInt("stepIndex", stepIndex); - foamShader.Dispatch(sortKernel, groups, 1, 1); - } - } - - // build mesh: - int threadGroups = ComputeMath.ThreadGroupCount(m_Solver.foamPositions.count, 128); - foamShader.SetInt("maxFoamParticles", m_Solver.foamPositions.count); - foamShader.SetBuffer(clearMeshKernel, "indices", renderBatch.gpuIndexBuffer); - foamShader.Dispatch(clearMeshKernel, threadGroups, 1, 1); - - foamShader.SetBuffer(buildMeshKernel, "inputPositions", solver.abstraction.foamPositions.computeBuffer); - foamShader.SetBuffer(buildMeshKernel, "inputVelocities", solver.abstraction.foamVelocities.computeBuffer); - foamShader.SetBuffer(buildMeshKernel, "inputColors", solver.abstraction.foamColors.computeBuffer); - foamShader.SetBuffer(buildMeshKernel, "inputAttributes", solver.abstraction.foamAttributes.computeBuffer); - - foamShader.SetBuffer(buildMeshKernel, "vertices", renderBatch.gpuVertexBuffer); - foamShader.SetBuffer(buildMeshKernel, "indices", renderBatch.gpuIndexBuffer); - foamShader.SetBuffer(buildMeshKernel, "dispatch", solver.abstraction.foamCount.computeBuffer); - - foamShader.DispatchIndirect(buildMeshKernel, solver.abstraction.foamCount.computeBuffer); - - matProps.SetFloat("_FadeDepth", 0); - matProps.SetFloat("_VelocityStretching", m_Solver.maxFoamVelocityStretch); - matProps.SetFloat("_RadiusScale", m_Solver.foamRadiusScale); - matProps.SetFloat("_FadeIn", m_Solver.foamFade.x); - matProps.SetFloat("_FadeOut", m_Solver.foamFade.y); - matProps.SetFloat("_ScatterDensity", m_Solver.foamVolumeDensity); - matProps.SetFloat("_AmbientDensity", m_Solver.foamAmbientDensity); - matProps.SetColor("_ScatterColor", m_Solver.foamScatterColor); - matProps.SetColor("_AmbientColor", m_Solver.foamAmbientColor); - - var rp = renderBatch.renderParams; - rp.worldBounds = m_Solver.bounds; - rp.camera = camera; - rp.matProps = matProps; - rp.shadowCastingMode = ShadowCastingMode.Off; - - Graphics.RenderMesh(rp, renderBatch.mesh, 0, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); - } - } - - } -} - diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeFoamRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeFoamRenderSystem.cs.meta deleted file mode 100644 index 07ab5673a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeFoamRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 79b1bf3bc315944669288e5529915a5f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeInstancedParticleRenderSystem.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeInstancedParticleRenderSystem.cs deleted file mode 100644 index 08e235cb7..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeInstancedParticleRenderSystem.cs +++ /dev/null @@ -1,104 +0,0 @@ -using UnityEngine; -using UnityEngine.Rendering; - -using Unity.Profiling; -using System.Collections.Generic; -using Unity.Collections; - -namespace Obi -{ - public class ComputeInstancedParticleRenderSystem : ObiInstancedParticleRenderSystem - { - - private ComputeShader instanceShader; - private int updateKernel; - private uint[] args = new uint[5] { 0, 0, 0, 0, 0 }; - - public ComputeInstancedParticleRenderSystem(ObiSolver solver) : base(solver) - { - instanceShader = GameObject.Instantiate(Resources.Load("Compute/InstancedParticleRendering")); - updateKernel = instanceShader.FindKernel("UpdateParticleInstances"); - } - - protected override void CloseBatches() - { - // Initialize each batch: - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Initialize(true); - } - - public override void Setup() - { - base.Setup(); - - activeParticles.AsComputeBuffer(); - rendererData.AsComputeBuffer(); - rendererIndex.AsComputeBuffer(); - - instanceTransforms.AsComputeBuffer(); - invInstanceTransforms.AsComputeBuffer(); - instanceColors.AsComputeBuffer(); - } - - public override void Render() - { - using (m_RenderMarker.Auto()) - { - - var computeSolver = m_Solver.implementation as ComputeSolverImpl; - - if (computeSolver.renderablePositionsBuffer != null && computeSolver.renderablePositionsBuffer.count > 0 && activeParticles.count > 0) - { - instanceShader.SetBuffer(updateKernel, "activeParticles", activeParticles.computeBuffer); - instanceShader.SetBuffer(updateKernel, "rendererData", rendererData.computeBuffer); - instanceShader.SetBuffer(updateKernel, "rendererIndex", rendererIndex.computeBuffer); - - instanceShader.SetBuffer(updateKernel, "renderablePositions", computeSolver.renderablePositionsBuffer); - instanceShader.SetBuffer(updateKernel, "renderableOrientations", computeSolver.renderableOrientationsBuffer); - instanceShader.SetBuffer(updateKernel, "renderableRadii", computeSolver.renderableRadiiBuffer); - instanceShader.SetBuffer(updateKernel, "colors", computeSolver.colorsBuffer); - - instanceShader.SetBuffer(updateKernel, "instanceTransforms", instanceTransforms.computeBuffer); - instanceShader.SetBuffer(updateKernel, "invInstanceTransforms", invInstanceTransforms.computeBuffer); - instanceShader.SetBuffer(updateKernel, "instanceColors", instanceColors.computeBuffer); - - instanceShader.SetMatrix("solverToWorld", m_Solver.transform.localToWorldMatrix); - - instanceShader.SetInt("particleCount", activeParticles.count); - int threadGroups = ComputeMath.ThreadGroupCount(activeParticles.count, 128); - - instanceShader.Dispatch(updateKernel, threadGroups, 1, 1); - - MaterialPropertyBlock mpb = new MaterialPropertyBlock(); - mpb.SetBuffer("_InstanceTransforms", instanceTransforms.computeBuffer); - mpb.SetBuffer("_InvInstanceTransforms", invInstanceTransforms.computeBuffer); - mpb.SetBuffer("_Colors", instanceColors.computeBuffer); - - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - - if (batch.mesh == null) - continue; - - args[0] = (uint)batch.mesh.GetIndexCount(0); - args[1] = (uint)batch.instanceCount; - args[2] = (uint)batch.mesh.GetIndexStart(0); - args[3] = (uint)batch.mesh.GetBaseVertex(0); - args[4] = (uint)batch.firstInstance; - batch.argsBuffer.SetData(args); - - var rp = batch.renderParams; - rp.material = batch.material; - rp.worldBounds = m_Solver.bounds; - rp.matProps = mpb; - - Graphics.RenderMeshIndirect(rp, batch.mesh, batch.argsBuffer); - } - } - } - } - - } -} - diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeInstancedParticleRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeInstancedParticleRenderSystem.cs.meta deleted file mode 100644 index 39147cf50..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeInstancedParticleRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f8b509404001c45aba2b5d70bed9ad1f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeParticleRenderSystem.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeParticleRenderSystem.cs deleted file mode 100644 index 1508f19cd..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeParticleRenderSystem.cs +++ /dev/null @@ -1,71 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - - public class ComputeParticleRenderSystem : ObiParticleRenderSystem - { - public ComputeShader meshComputeShader; - private int buildMeshKernel; - - public ComputeParticleRenderSystem(ObiSolver solver) : base(solver) - { - meshComputeShader = GameObject.Instantiate(Resources.Load("Compute/ParticleMeshBuilding")); - buildMeshKernel = meshComputeShader.FindKernel("BuildMesh"); - } - - protected override void CloseBatches() - { - // Initialize each batch: - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Initialize(layout, true); - - activeParticles.AsComputeBuffer(); - rendererIndex.AsComputeBuffer(); - rendererData.AsComputeBuffer(); - } - - public override void Render() - { - using (m_RenderMarker.Auto()) - { - var solver = m_Solver.implementation as ComputeSolverImpl; - - if (solver.renderablePositionsBuffer != null && - activeParticles.computeBuffer != null && - solver.renderablePositionsBuffer.count > 0) - { - meshComputeShader.SetBuffer(buildMeshKernel, "particleIndices", activeParticles.computeBuffer); - - meshComputeShader.SetBuffer(buildMeshKernel, "positions", solver.renderablePositionsBuffer); - meshComputeShader.SetBuffer(buildMeshKernel, "orientations", solver.renderableOrientationsBuffer); - meshComputeShader.SetBuffer(buildMeshKernel, "radii", solver.renderableRadiiBuffer); - meshComputeShader.SetBuffer(buildMeshKernel, "colors", solver.colorsBuffer); - - meshComputeShader.SetBuffer(buildMeshKernel, "rendererIndices", rendererIndex.computeBuffer); - meshComputeShader.SetBuffer(buildMeshKernel, "rendererData", rendererData.computeBuffer); - - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - int threadGroups = ComputeMath.ThreadGroupCount(batch.vertexCount / 4, 128); - - meshComputeShader.SetInt("firstParticle", batch.firstParticle); - meshComputeShader.SetInt("particleCount", batch.vertexCount / 4); - - meshComputeShader.SetBuffer(buildMeshKernel, "vertices", batch.gpuVertexBuffer); - meshComputeShader.SetBuffer(buildMeshKernel, "indices", batch.gpuIndexBuffer); - - meshComputeShader.Dispatch(buildMeshKernel, threadGroups, 1, 1); - - var rp = batch.renderParams; - rp.worldBounds = m_Solver.bounds; - - Graphics.RenderMesh(rp, batch.mesh, 0, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); - } - } - } - } - } -} - diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeParticleRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeParticleRenderSystem.cs.meta deleted file mode 100644 index ac29d03b4..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/Common/ComputeParticleRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a636d056cf9924c4b9d569058fa42d31 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod.meta deleted file mode 100644 index 3242dc7fa..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 9c226d9f8a58648e789dbd116881847d -labels: -- ObiRope -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeChainRopeRenderSystem.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeChainRopeRenderSystem.cs deleted file mode 100644 index 3c73db958..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeChainRopeRenderSystem.cs +++ /dev/null @@ -1,107 +0,0 @@ -using UnityEngine; -using UnityEngine.Rendering; - -using Unity.Profiling; -using System.Collections.Generic; -using Unity.Collections; - -namespace Obi -{ - public class ComputeChainRopeRenderSystem : ObiChainRopeRenderSystem - { - - private ComputeShader ropeShader; - private int updateKernel; - private uint[] args = new uint[5] { 0, 0, 0, 0, 0 }; - - public ComputeChainRopeRenderSystem(ObiSolver solver) : base(solver) - { - ropeShader = GameObject.Instantiate(Resources.Load("Compute/RopeChainRendering")); - updateKernel = ropeShader.FindKernel("UpdateChainMesh"); - } - - protected override void CloseBatches() - { - // Initialize each batch: - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Initialize(true); - } - - public override void Setup() - { - base.Setup(); - - rendererData.AsComputeBuffer(); - chunkData.AsComputeBuffer(); - modifiers.SafeAsComputeBuffer(); - elements.AsComputeBuffer(); - - instanceTransforms.AsComputeBuffer(); - invInstanceTransforms.AsComputeBuffer(); - instanceColors.AsComputeBuffer(); - - } - - public override void Render() - { - using (m_RenderMarker.Auto()) - { - - var computeSolver = m_Solver.implementation as ComputeSolverImpl; - - if (computeSolver.renderablePositionsBuffer != null && computeSolver.renderablePositionsBuffer.count > 0 && elements.count > 0) - { - ropeShader.SetBuffer(updateKernel, "rendererData", rendererData.computeBuffer); - ropeShader.SetBuffer(updateKernel, "chunksData", chunkData.computeBuffer); - ropeShader.SetBuffer(updateKernel, "modifiers", modifiers.computeBuffer); - ropeShader.SetBuffer(updateKernel, "elements", elements.computeBuffer); - - ropeShader.SetBuffer(updateKernel, "renderablePositions", computeSolver.renderablePositionsBuffer); - ropeShader.SetBuffer(updateKernel, "renderableOrientations", computeSolver.renderableOrientationsBuffer); - ropeShader.SetBuffer(updateKernel, "principalRadii", computeSolver.renderableRadiiBuffer); - ropeShader.SetBuffer(updateKernel, "colors", computeSolver.colorsBuffer); - - ropeShader.SetBuffer(updateKernel, "instanceTransforms", instanceTransforms.computeBuffer); - ropeShader.SetBuffer(updateKernel, "invInstanceTransforms", invInstanceTransforms.computeBuffer); - ropeShader.SetBuffer(updateKernel, "instanceColors", instanceColors.computeBuffer); - - ropeShader.SetMatrix("solverToWorld", m_Solver.transform.localToWorldMatrix); - - ropeShader.SetInt("chunkCount", chunkData.count); - int threadGroups = ComputeMath.ThreadGroupCount(chunkData.count, 32); - - ropeShader.Dispatch(updateKernel, threadGroups, 1, 1); - - MaterialPropertyBlock mpb = new MaterialPropertyBlock(); - mpb.SetBuffer("_InstanceTransforms", instanceTransforms.computeBuffer); - mpb.SetBuffer("_InvInstanceTransforms", invInstanceTransforms.computeBuffer); - mpb.SetBuffer("_Colors", instanceColors.computeBuffer); - - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - - if (batch.mesh == null) - continue; - - args[0] = (uint)batch.mesh.GetIndexCount(0); - args[1] = (uint)batch.instanceCount; - args[2] = (uint)batch.mesh.GetIndexStart(0); - args[3] = (uint)batch.mesh.GetBaseVertex(0); - args[4] = (uint)batch.firstInstance; - batch.argsBuffer.SetData(args); - - var rp = batch.renderParams; - rp.material = batch.material; - rp.worldBounds = m_Solver.bounds; - rp.matProps = mpb; - - Graphics.RenderMeshIndirect(rp, batch.mesh, batch.argsBuffer); - } - } - } - } - - } -} - diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeChainRopeRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeChainRopeRenderSystem.cs.meta deleted file mode 100644 index 40dadbaf6..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeChainRopeRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fe4c45599ea584be2a1b122fbe7d0ec6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeExtrudedRopeRenderSystem.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeExtrudedRopeRenderSystem.cs deleted file mode 100644 index 423db6459..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeExtrudedRopeRenderSystem.cs +++ /dev/null @@ -1,101 +0,0 @@ -using UnityEngine; -using UnityEngine.Rendering; - -namespace Obi -{ - public class ComputeExtrudedRopeRenderSystem : ObiExtrudedRopeRenderSystem - { - - private ComputeShader ropeShader; - private int updateKernel; - - public ComputeExtrudedRopeRenderSystem(ObiSolver solver) : base(solver) - { - ropeShader = GameObject.Instantiate(Resources.Load("Compute/RopeExtrudedRendering")); - updateKernel = ropeShader.FindKernel("UpdateRopeMesh"); - } - - - public override void Setup() - { - base.Setup(); - - // Initialize each batch: - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Initialize(layout, true); - - sectionData.AsComputeBuffer(); - sectionOffsets.AsComputeBuffer(); - sectionIndices.AsComputeBuffer(); - - vertexOffsets.AsComputeBuffer(); - triangleOffsets.AsComputeBuffer(); - triangleCounts.AsComputeBuffer(); - - pathSmootherIndices.AsComputeBuffer(); - rendererData.AsComputeBuffer(); - - pathSmootherSystem.chunkOffsets.AsComputeBuffer(); - } - - public override void Render() - { - using (m_RenderMarker.Auto()) - { - if (pathSmootherSystem == null) - return; - - // Single array: Cannot merge into a single vertices array, otherwise we would need to bring back to CPU for passing indices to each mesh. - // Individual meshes: Cannot do each renderer independently (like we do with cloth) since each rope is done sequentially, would not parallelize at all. - // Batches: 1 mesh per batch: best approach, but 1) bounds must be calculated per or solver, so we can only cull entire solver. Culling happens on the CPU, cannot bring back bounds from the CPU. - // Cloth and Softbodies are rendered manually, particles are too. So Ropes could too. - - // In Burst, we need merge all cloth mesh data into array for parallel processing, without using one schedule() per mesh. - // So instead of writing slices of mesh data back to their original meshes, let's create one mesh per batch and draw it ourselves. - // Basically the same as with ropes. - - if (pathSmootherSystem.chunkOffsets != null && pathSmootherSystem.chunkOffsets.count > 0) - { - ropeShader.SetBuffer(updateKernel, "pathSmootherIndices", pathSmootherIndices.computeBuffer); - ropeShader.SetBuffer(updateKernel, "chunkOffsets", pathSmootherSystem.chunkOffsets.computeBuffer); - - ropeShader.SetBuffer(updateKernel, "frames", pathSmootherSystem.smoothFrames.computeBuffer); - ropeShader.SetBuffer(updateKernel, "frameOffsets", pathSmootherSystem.smoothFrameOffsets.computeBuffer); - ropeShader.SetBuffer(updateKernel, "frameCounts", pathSmootherSystem.smoothFrameCounts.computeBuffer); - - ropeShader.SetBuffer(updateKernel, "sectionData", sectionData.computeBuffer); - ropeShader.SetBuffer(updateKernel, "sectionOffsets", sectionOffsets.computeBuffer); - ropeShader.SetBuffer(updateKernel, "sectionIndices", sectionIndices.computeBuffer); - - ropeShader.SetBuffer(updateKernel, "vertexOffsets", vertexOffsets.computeBuffer); - ropeShader.SetBuffer(updateKernel, "triangleOffsets", triangleOffsets.computeBuffer); - ropeShader.SetBuffer(updateKernel, "triangleCounts", triangleCounts.computeBuffer); - - ropeShader.SetBuffer(updateKernel, "extrudedData", rendererData.computeBuffer); - ropeShader.SetBuffer(updateKernel, "pathData", pathSmootherSystem.pathData.computeBuffer); - - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - int threadGroups = ComputeMath.ThreadGroupCount(batch.rendererCount, 128); - - ropeShader.SetInt("firstRenderer", batch.firstRenderer); - ropeShader.SetInt("rendererCount", batch.rendererCount); - - ropeShader.SetBuffer(updateKernel, "vertices", batch.gpuVertexBuffer); - ropeShader.SetBuffer(updateKernel, "tris", batch.gpuIndexBuffer); - - ropeShader.Dispatch(updateKernel, threadGroups, 1, 1); - - var rp = batch.renderParams; - rp.worldBounds = m_Solver.bounds; - - Graphics.RenderMesh(rp, batch.mesh, 0, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); - } - } - } - } - - } -} - diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeExtrudedRopeRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeExtrudedRopeRenderSystem.cs.meta deleted file mode 100644 index d02481a39..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeExtrudedRopeRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f8977537c032b46c680d6b11b587e949 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeLineRopeRenderSystem.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeLineRopeRenderSystem.cs deleted file mode 100644 index 4e1606715..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeLineRopeRenderSystem.cs +++ /dev/null @@ -1,103 +0,0 @@ -using UnityEngine; -using UnityEngine.Rendering; - -using Unity.Profiling; -using System.Collections.Generic; -using Unity.Collections; - -namespace Obi -{ - public class ComputeLineRopeRenderSystem : ObiLineRopeRenderSystem - { - - private ComputeShader ropeShader; - private int updateKernel; - - public ComputeLineRopeRenderSystem(ObiSolver solver) : base(solver) - { - ropeShader = GameObject.Instantiate(Resources.Load("Compute/RopeLineRendering")); - updateKernel = ropeShader.FindKernel("UpdateLineMesh"); - } - - - public override void Setup() - { - base.Setup(); - - // Initialize each batch: - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Initialize(layout, true); - - vertexOffsets.AsComputeBuffer(); - triangleOffsets.AsComputeBuffer(); - triangleCounts.AsComputeBuffer(); - - pathSmootherIndices.AsComputeBuffer(); - rendererData.AsComputeBuffer(); - - pathSmootherSystem.chunkOffsets.AsComputeBuffer(); - - } - - public override void Render() { } - - public override void RenderFromCamera(Camera camera) - { - using (m_RenderMarker.Auto()) - { - if (pathSmootherSystem == null) - return; - - // Single array: Cannot merge into a single vertices array, otherwise we would need to bring back to CPU for passing indices to each mesh. - // Individual meshes: Cannot do each renderer independently (like we do with cloth) since each rope is done sequentially, would not parallelize at all. - // Batches: 1 mesh per batch: best approach, but 1) bounds must be calculated per or solver, so we can only cull entire solver. Culling happens on the CPU, cannot bring back bounds from the CPU. - // Cloth and Softbodies are rendered manually, particles are too. So Ropes could too. - - // In Burst, we need merge all cloth mesh data into array for parallel processing, without using one schedule() per mesh. - // So instead of writing slices of mesh data back to their original meshes, let's create one mesh per batch and draw it ourselves. - // Basically the same as with ropes. - - if (pathSmootherSystem.chunkOffsets != null && pathSmootherSystem.chunkOffsets.count > 0) - { - ropeShader.SetBuffer(updateKernel, "pathSmootherIndices", pathSmootherIndices.computeBuffer); - ropeShader.SetBuffer(updateKernel, "chunkOffsets", pathSmootherSystem.chunkOffsets.computeBuffer); - - ropeShader.SetBuffer(updateKernel, "frames", pathSmootherSystem.smoothFrames.computeBuffer); - ropeShader.SetBuffer(updateKernel, "frameOffsets", pathSmootherSystem.smoothFrameOffsets.computeBuffer); - ropeShader.SetBuffer(updateKernel, "frameCounts", pathSmootherSystem.smoothFrameCounts.computeBuffer); - - ropeShader.SetBuffer(updateKernel, "vertexOffsets", vertexOffsets.computeBuffer); - ropeShader.SetBuffer(updateKernel, "triangleOffsets", triangleOffsets.computeBuffer); - ropeShader.SetBuffer(updateKernel, "triangleCounts", triangleCounts.computeBuffer); - - ropeShader.SetBuffer(updateKernel, "rendererData", rendererData.computeBuffer); - ropeShader.SetBuffer(updateKernel, "pathData", pathSmootherSystem.pathData.computeBuffer); - - ropeShader.SetVector("localSpaceCamera", m_Solver.transform.InverseTransformPoint(camera.transform.position)); - - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - int threadGroups = ComputeMath.ThreadGroupCount(batch.rendererCount, 128); - - ropeShader.SetInt("firstRenderer", batch.firstRenderer); - ropeShader.SetInt("rendererCount", batch.rendererCount); - - ropeShader.SetBuffer(updateKernel, "vertices", batch.gpuVertexBuffer); - ropeShader.SetBuffer(updateKernel, "tris", batch.gpuIndexBuffer); - - ropeShader.Dispatch(updateKernel, threadGroups, 1, 1); - - var rp = batch.renderParams; - rp.worldBounds = m_Solver.bounds; - rp.camera = camera; - - Graphics.RenderMesh(rp, batch.mesh, 0, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); - } - } - } - } - - } -} - diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeLineRopeRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeLineRopeRenderSystem.cs.meta deleted file mode 100644 index b737e7d32..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeLineRopeRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1de4576d2ba2b4966af730ac7a09e224 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeMeshRopeRenderSystem.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeMeshRopeRenderSystem.cs deleted file mode 100644 index 2abb1191d..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeMeshRopeRenderSystem.cs +++ /dev/null @@ -1,108 +0,0 @@ -using UnityEngine; -using UnityEngine.Rendering; - -namespace Obi -{ - - public class ComputeMeshRopeRenderSystem : ObiMeshRopeRenderSystem - { - private ComputeShader ropeShader; - private int updateKernel; - - public ComputeMeshRopeRenderSystem(ObiSolver solver) : base(solver) - { - ropeShader = GameObject.Instantiate(Resources.Load("Compute/RopeMeshRendering")); - updateKernel = ropeShader.FindKernel("UpdateRopeMesh"); - } - - protected override void CloseBatches() - { - // Initialize each batch: - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Initialize(sortedRenderers, meshData, meshIndices, layout, true); - - meshData.PrepareForCompute(); - meshIndices.AsComputeBuffer(); - - sortedIndices.AsComputeBuffer(); - sortedOffsets.AsComputeBuffer(); - - vertexOffsets.AsComputeBuffer(); - - pathSmootherIndices.AsComputeBuffer(); - rendererData.AsComputeBuffer(); - - pathSmootherSystem.chunkOffsets.AsComputeBuffer(); - - base.CloseBatches(); - } - - public override void Render() - { - using (m_RenderMarker.Auto()) - { - if (pathSmootherSystem == null) - return; - - // Single array: Cannot merge into a single vertices array, otherwise we would need to bring back to CPU for passing indices to each mesh. - // Individual meshes: Cannot do each renderer independently (like we do with cloth) since each rope is done sequentially, would not parallelize at all. - // Batches: 1 mesh per batch: best approach, but 1) bounds must be calculated per or solver, so we can only cull entire solver. Culling happens on the CPU, cannot bring back bounds from the CPU. - // Cloth and Softbodies are rendered manually, particles are too. So Ropes could too. - - // In Burst, we need merge all cloth mesh data into array for parallel processing, without using one schedule() per mesh. - // So instead of writing slices of mesh data back to their original meshes, let's create one mesh per batch and draw it ourselves. - // Basically the same as with ropes. - - if (pathSmootherSystem.chunkOffsets != null && pathSmootherSystem.chunkOffsets.count > 0) - { - ropeShader.SetBuffer(updateKernel, "chunkOffsets", pathSmootherSystem.chunkOffsets.computeBuffer); - ropeShader.SetBuffer(updateKernel, "pathSmootherIndices", pathSmootherIndices.computeBuffer); - - ropeShader.SetBuffer(updateKernel, "frames", pathSmootherSystem.smoothFrames.computeBuffer); - ropeShader.SetBuffer(updateKernel, "frameOffsets", pathSmootherSystem.smoothFrameOffsets.computeBuffer); - ropeShader.SetBuffer(updateKernel, "frameCounts", pathSmootherSystem.smoothFrameCounts.computeBuffer); - - ropeShader.SetBuffer(updateKernel, "vertexOffsets", vertexOffsets.computeBuffer); - - ropeShader.SetBuffer(updateKernel, "meshIndices", meshIndices.computeBuffer); - ropeShader.SetBuffer(updateKernel, "meshData", meshData.meshData.computeBuffer); - - ropeShader.SetBuffer(updateKernel, "rendererData", rendererData.computeBuffer); - ropeShader.SetBuffer(updateKernel, "pathData", pathSmootherSystem.pathData.computeBuffer); - - ropeShader.SetBuffer(updateKernel, "sortedIndices", sortedIndices.computeBuffer); - ropeShader.SetBuffer(updateKernel, "sortedOffsets", sortedOffsets.computeBuffer); - - ropeShader.SetBuffer(updateKernel, "positions", meshData.restPositions.computeBuffer); - ropeShader.SetBuffer(updateKernel, "normals", meshData.restNormals.computeBuffer); - ropeShader.SetBuffer(updateKernel, "tangents", meshData.restTangents.computeBuffer); - ropeShader.SetBuffer(updateKernel, "colors", meshData.restColors.computeBuffer); - - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - int threadGroups = ComputeMath.ThreadGroupCount(batch.rendererCount, 16); - - ropeShader.SetInt("firstRenderer", batch.firstRenderer); - ropeShader.SetInt("rendererCount", batch.rendererCount); - - ropeShader.SetBuffer(updateKernel, "vertices", batch.gpuVertexBuffer); - - ropeShader.Dispatch(updateKernel, threadGroups, 1, 1); - - var rp = batch.renderParams; - rp.worldBounds = m_Solver.bounds; - - for (int m = 0; m < batch.materials.Length; ++m) - { - rp.material = batch.materials[m]; - Graphics.RenderMesh(rp, batch.mesh, m, m_Solver.transform.localToWorldMatrix, m_Solver.transform.localToWorldMatrix); - } - } - } - } - } - - } -} - diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeMeshRopeRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeMeshRopeRenderSystem.cs.meta deleted file mode 100644 index eb2668678..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputeMeshRopeRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f880620ed267d4cb4a701183bcadfe15 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputePathSmootherRenderSystem.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputePathSmootherRenderSystem.cs deleted file mode 100644 index 9f363f237..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputePathSmootherRenderSystem.cs +++ /dev/null @@ -1,94 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - - public class ComputePathSmootherRenderSystem : ObiPathSmootherRenderSystem - { - - private ComputeShader pathShader; - private int parallelTransportKernel; - private int decimateKernel; - private int smoothKernel; - - public ComputePathSmootherRenderSystem(ObiSolver solver) : base(solver) - { - pathShader = GameObject.Instantiate(Resources.Load("Compute/PathSmoothing")); - parallelTransportKernel = pathShader.FindKernel("ParallelTransport"); - decimateKernel = pathShader.FindKernel("Decimate"); - smoothKernel = pathShader.FindKernel("ChaikinSmooth"); - } - - public override void Setup() - { - base.Setup(); - - particleIndices.AsComputeBuffer(); - rawFrameOffsets.AsComputeBuffer(); - pathData.AsComputeBuffer(); - rawFrames.AsComputeBuffer(); - decimatedFrameCounts.AsComputeBuffer(); - - smoothFrames.AsComputeBuffer(); - smoothFrameOffsets.AsComputeBuffer(); - smoothFrameCounts.AsComputeBuffer(); - } - - public override void Render() - { - using (m_RenderMarker.Auto()) - { - //base.Render(); - - var computeSolver = m_Solver.implementation as ComputeSolverImpl; - - if (computeSolver.renderablePositionsBuffer != null && computeSolver.renderablePositionsBuffer.count > 0) - { - // wait for gpu data to be transferred: - pathData.WaitForReadback(); - smoothFrames.WaitForReadback(); - - // update rest lenghts and upload to gpu: - base.Render(); - pathData.Upload(); - - int threadGroups = ComputeMath.ThreadGroupCount(rawFrameOffsets.count, 128); - pathShader.SetInt("chunkCount", rawFrameOffsets.count); - - pathShader.SetBuffer(parallelTransportKernel, "frameOffsets", rawFrameOffsets.computeBuffer); - pathShader.SetBuffer(parallelTransportKernel, "particleIndices", particleIndices.computeBuffer); - pathShader.SetBuffer(parallelTransportKernel, "renderablePositions", computeSolver.renderablePositionsBuffer); - pathShader.SetBuffer(parallelTransportKernel, "renderableOrientations", computeSolver.renderableOrientationsBuffer); - pathShader.SetBuffer(parallelTransportKernel, "principalRadii", computeSolver.principalRadiiBuffer); - pathShader.SetBuffer(parallelTransportKernel, "colors", computeSolver.colorsBuffer); - pathShader.SetBuffer(parallelTransportKernel, "pathData", pathData.computeBuffer); - pathShader.SetBuffer(parallelTransportKernel, "pathFrames", rawFrames.computeBuffer); - - pathShader.Dispatch(parallelTransportKernel, threadGroups, 1, 1); - - pathShader.SetBuffer(decimateKernel, "pathFrames", rawFrames.computeBuffer); - pathShader.SetBuffer(decimateKernel, "frameOffsets", rawFrameOffsets.computeBuffer); - pathShader.SetBuffer(decimateKernel, "decimatedFrameCounts", decimatedFrameCounts.computeBuffer); - pathShader.SetBuffer(decimateKernel, "pathData", pathData.computeBuffer); - - pathShader.Dispatch(decimateKernel, threadGroups, 1, 1); - - pathShader.SetBuffer(smoothKernel, "pathFrames", rawFrames.computeBuffer); - pathShader.SetBuffer(smoothKernel, "frameOffsets", rawFrameOffsets.computeBuffer); - pathShader.SetBuffer(smoothKernel, "decimatedFrameCounts", decimatedFrameCounts.computeBuffer); - pathShader.SetBuffer(smoothKernel, "smoothFrames", smoothFrames.computeBuffer); - pathShader.SetBuffer(smoothKernel, "smoothFrameOffsets", smoothFrameOffsets.computeBuffer); - pathShader.SetBuffer(smoothKernel, "smoothFrameCounts", smoothFrameCounts.computeBuffer); - pathShader.SetBuffer(smoothKernel, "pathData", pathData.computeBuffer); - - pathShader.Dispatch(smoothKernel, threadGroups, 1, 1); - - pathData.Readback(); - smoothFrames.Readback(); - } - } - } - - } -} - diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputePathSmootherRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputePathSmootherRenderSystem.cs.meta deleted file mode 100644 index acdff97c5..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Rendering/RopeAndRod/ComputePathSmootherRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7ed459657fb054e7b8e0c806e8e5016e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Solver.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Solver.meta deleted file mode 100644 index 3c8e3c2f1..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Solver.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e6a74baa6b875488ea6366478aece6a3 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Solver/ComputeSolverImpl.cs b/Assets/Obi/Scripts/Common/Backends/Compute/Solver/ComputeSolverImpl.cs deleted file mode 100644 index ad4cf37f3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Solver/ComputeSolverImpl.cs +++ /dev/null @@ -1,1438 +0,0 @@ -using UnityEngine; -using UnityEngine.Rendering; - -namespace Obi -{ - public class ComputeSolverImpl : ISolverImpl - { - ObiSolver m_Solver; - - public ObiSolver abstraction - { - get { return m_Solver; } - } - - public int particleCount - { - get { return m_Solver.positions.count; } - } - - public int activeParticleCount - { - get { return m_Solver.activeParticles.count; } - } - - public int deformableTriangleCount - { - get { return m_Solver.deformableTriangles.count / 3; } - } - - public int deformableEdgeCount - { - get { return m_Solver.deformableEdges.count / 2; } - } - - public InertialFrame inertialFrame - { - get { return m_InertialFrame; } - } - - public uint activeFoamParticleCount { private set; get; } - - // Per-type constraints array: - IComputeConstraintsImpl[] constraints; - - // Per-type iteration padding array: - private int[] padding = new int[Oni.ConstraintTypeCount]; - - // job handle: - private ComputeJobHandle jobHandle; - - // particle contact generation: - public ComputeParticleGrid particleGrid; - - // collider contact generation: - public ComputeColliderWorld colliderGrid; - - // spatial queries: - public SpatialQueries spatialQueries; - - // misc data: - private InertialFrame m_InertialFrame; - - // cached particle data arrays (just wrappers over raw unmanaged data held by the abstract solver) - public GraphicsBuffer deadIndicesBuffer; - public GraphicsBuffer positionsBuffer; - public GraphicsBuffer orientationsBuffer; - public GraphicsBuffer startPositionsBuffer; - public GraphicsBuffer endPositionsBuffer; - public GraphicsBuffer startOrientationsBuffer; - public GraphicsBuffer endOrientationsBuffer; - public GraphicsBuffer restPositionsBuffer; - public GraphicsBuffer prevPositionsBuffer; - public GraphicsBuffer restOrientationsBuffer; - public GraphicsBuffer prevOrientationsBuffer; - public GraphicsBuffer renderablePositionsBuffer; - public GraphicsBuffer renderableOrientationsBuffer; - public GraphicsBuffer renderableRadiiBuffer; - public GraphicsBuffer colorsBuffer; - public GraphicsBuffer collisionMaterialIndexBuffer; - - public GraphicsBuffer principalRadiiBuffer; - public GraphicsBuffer velocitiesBuffer; - public GraphicsBuffer invMassesBuffer; - public GraphicsBuffer phasesBuffer; - public GraphicsBuffer filtersBuffer; - - public GraphicsBuffer angularVelocitiesBuffer; - public GraphicsBuffer invRotationalMassesBuffer; - public GraphicsBuffer externalForcesBuffer; - public GraphicsBuffer externalTorquesBuffer; - public GraphicsBuffer windBuffer; - - public GraphicsBuffer lifeBuffer; - public GraphicsBuffer fluidDataBuffer; - public GraphicsBuffer userDataBuffer; - public GraphicsBuffer fluidMaterialsBuffer; - public GraphicsBuffer fluidMaterials2Buffer; - public GraphicsBuffer fluidInterfaceBuffer; - public GraphicsBuffer anisotropiesBuffer; - - public GraphicsBuffer auxPositions; - public GraphicsBuffer auxVelocities; - public GraphicsBuffer auxColors; - public GraphicsBuffer auxAttributes; - public GraphicsBuffer auxOffsetInCell; - public GraphicsBuffer auxSortedToOriginal; - - public GraphicsBuffer normalsBuffer; - public GraphicsBuffer cellCoordsBuffer; - - public GraphicsBuffer positionDeltasIntBuffer; - public GraphicsBuffer orientationDeltasIntBuffer; - - public GraphicsBuffer positionConstraintCountBuffer; - public GraphicsBuffer orientationConstraintCountBuffer; - - public GraphicsBuffer activeParticlesBuffer; - public GraphicsBuffer fluidDispatchBuffer; - - public GraphicsBuffer tangentsIntBuffer; - - public GraphicsBuffer deformableEdgesBuffer; - public GraphicsBuffer deformableTrianglesBuffer; - - public GraphicsBuffer solverToWorldBuffer; - public GraphicsBuffer worldToSolverBuffer; - public GraphicsBuffer inertialFrameBuffer; - private AffineTransform[] solverToWorldArray; - private AffineTransform[] worldToSolverArray; - private InertialFrame[] inertialFrameArray; - - public GraphicsBuffer rigidbodyLinearDeltasBuffer; - public GraphicsBuffer rigidbodyAngularDeltasBuffer; - - public GraphicsBuffer rigidbodyLinearDeltasIntBuffer; - public GraphicsBuffer rigidbodyAngularDeltasIntBuffer; - - public GraphicsBuffer reducedBounds; - - // simplices: - public SimplexCounts simplexCounts; - public GraphicsBuffer simplices; - public GraphicsBuffer simplexBounds; - - public Aabb solverBounds; - private AsyncGPUReadbackRequest boundsRequest; - - private ComputeShader solverShader; - private int applyInertialForcesKernel; - private int applyRigidbodyDeltasKernel; - private int predictPositionsKernel; - private int updateVelocitiesKernel; - private int updatePositionsKernel; - private int updateLifetimesKernel; - private int enforceLimitsKernel; - private int interpolateKernel; - - private ComputeShader boundsShader; - private int simplexBoundsKernel; - private int editSimplexBoundsKernel; - private int boundsReductionKernel; - - private ComputeShader deformableTrisShader; - private int resetNormalsKernel; - private int updateNormalsKernel; - private int updateEdgeNormalsKernel; - private int orientationFromNormalsKernel; - - private ComputeShader foamShader; - private int sortDataKernel; - private int emitShapeFoamKernel; - private int emitFoamKernel; - private int copyAliveKernel; - private int updateFoamKernel; - private int integrateFoamKernel; - private int copyKernel; - - private ComputeShader foamDensityShader; - private int clearGridKernel; - private int insertGridKernel; - private int sortByGridKernel; - private int computeDensityKernel; - private int applyDensityKernel; - - private ComputeShader foamCollisionShader; - private int solveDiffuseContactsKernel; - - public ComputeSolverImpl(ObiSolver solver) - { - this.m_Solver = solver; - - jobHandle = new ComputeJobHandle(); - solverBounds = new Aabb(solver.transform.position - Vector3.one, solver.transform.position + Vector3.one); - - solver.queryResults.ResizeUninitialized((int)abstraction.maxQueryResults); - solver.queryResults.SafeAsComputeBuffer(GraphicsBuffer.Target.Counter); - - solver.foamCount.AsComputeBuffer(GraphicsBuffer.Target.IndirectArguments); - solver.foamPositions.AsComputeBuffer(); - solver.foamVelocities.AsComputeBuffer(); - solver.foamColors.AsComputeBuffer(); - solver.foamAttributes.AsComputeBuffer(); - - solverShader = GameObject.Instantiate(Resources.Load("Compute/Solver")); - applyInertialForcesKernel = solverShader.FindKernel("ApplyInertialForces"); - applyRigidbodyDeltasKernel = solverShader.FindKernel("ApplyRigidbodyDeltas"); - updateLifetimesKernel = solverShader.FindKernel("UpdateLifetimes"); - predictPositionsKernel = solverShader.FindKernel("PredictPositions"); - updateVelocitiesKernel = solverShader.FindKernel("UpdateVelocities"); - updatePositionsKernel = solverShader.FindKernel("UpdatePositions"); - enforceLimitsKernel = solverShader.FindKernel("EnforceLimits"); - interpolateKernel = solverShader.FindKernel("Interpolate"); - - boundsShader = GameObject.Instantiate(Resources.Load("Compute/BoundsReduction")); - simplexBoundsKernel = boundsShader.FindKernel("RuntimeSimplexBounds"); - editSimplexBoundsKernel = boundsShader.FindKernel("EditSimplexBounds"); - boundsReductionKernel = boundsShader.FindKernel("Reduce"); - - deformableTrisShader = GameObject.Instantiate(Resources.Load("Compute/DeformableTriangles")); - resetNormalsKernel = deformableTrisShader.FindKernel("ResetNormals"); - updateNormalsKernel = deformableTrisShader.FindKernel("UpdateNormals"); - updateEdgeNormalsKernel = deformableTrisShader.FindKernel("UpdateEdgeNormals"); - orientationFromNormalsKernel = deformableTrisShader.FindKernel("OrientationFromNormals"); - - foamShader = GameObject.Instantiate(Resources.Load("Compute/FluidFoam")); - sortDataKernel = foamShader.FindKernel("SortFluidData"); - emitShapeFoamKernel = foamShader.FindKernel("EmitShape"); - emitFoamKernel = foamShader.FindKernel("Emit"); - copyAliveKernel = foamShader.FindKernel("CopyAliveCount"); - updateFoamKernel = foamShader.FindKernel("Update"); - copyKernel = foamShader.FindKernel("Copy"); - integrateFoamKernel = foamShader.FindKernel("Integrate"); - - foamDensityShader = GameObject.Instantiate(Resources.Load("Compute/FluidFoamDensity")); - clearGridKernel = foamDensityShader.FindKernel("Clear"); - insertGridKernel = foamDensityShader.FindKernel("InsertInGrid"); - sortByGridKernel = foamDensityShader.FindKernel("SortByGrid"); - computeDensityKernel = foamDensityShader.FindKernel("ComputeDensity"); - applyDensityKernel = foamDensityShader.FindKernel("ApplyDensity"); - - foamCollisionShader = GameObject.Instantiate(Resources.Load("Compute/FluidFoamCollisions")); - solveDiffuseContactsKernel = foamCollisionShader.FindKernel("SolveDiffuseContacts"); - - solverToWorldBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, 1, 48); - solverToWorldArray = new AffineTransform[1]; - worldToSolverBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, 1, 48); - worldToSolverArray = new AffineTransform[1]; - inertialFrameBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, 1, 160); - inertialFrameArray = new InertialFrame[1]; - - fluidDispatchBuffer = new GraphicsBuffer(GraphicsBuffer.Target.IndirectArguments, 4, sizeof(uint)); - - // Initialize collision world: - GetOrCreateColliderWorld(); - colliderGrid.IncreaseReferenceCount(); - - // Initialize contact generation acceleration structure: - particleGrid = new ComputeParticleGrid(); - - // Initialize spatial query system. - spatialQueries = new SpatialQueries(solver.maxQueryResults); - - // Initialize constraint arrays: - constraints = new IComputeConstraintsImpl[Oni.ConstraintTypeCount]; - constraints[(int)Oni.ConstraintType.Tether] = new ComputeTetherConstraints(this); - constraints[(int)Oni.ConstraintType.Volume] = new ComputeVolumeConstraints(this); - constraints[(int)Oni.ConstraintType.Chain] = new ComputeChainConstraints(this); - constraints[(int)Oni.ConstraintType.Bending] = new ComputeBendConstraints(this); - constraints[(int)Oni.ConstraintType.Distance] = new ComputeDistanceConstraints(this); - constraints[(int)Oni.ConstraintType.ShapeMatching] = new ComputeShapeMatchingConstraints(this); - constraints[(int)Oni.ConstraintType.BendTwist] = new ComputeBendTwistConstraints(this); - constraints[(int)Oni.ConstraintType.StretchShear] = new ComputeStretchShearConstraints(this); - constraints[(int)Oni.ConstraintType.Pin] = new ComputePinConstraints(this); - constraints[(int)Oni.ConstraintType.Pinhole] = new ComputePinholeConstraints(this); - constraints[(int)Oni.ConstraintType.Skin] = new ComputeSkinConstraints(this); - constraints[(int)Oni.ConstraintType.Aerodynamics] = new ComputeAerodynamicConstraints(this); - constraints[(int)Oni.ConstraintType.Stitch] = new ComputeStitchConstraints(this); - - constraints[(int)Oni.ConstraintType.ParticleCollision] = new ComputeParticleCollisionConstraints(this); - constraints[(int)Oni.ConstraintType.ParticleCollision].CreateConstraintsBatch(); - - constraints[(int)Oni.ConstraintType.Collision] = new ComputeColliderCollisionConstraints(this); - constraints[(int)Oni.ConstraintType.Collision].CreateConstraintsBatch(); - - constraints[(int)Oni.ConstraintType.ParticleFriction] = new ComputeParticleFrictionConstraints(this); - constraints[(int)Oni.ConstraintType.ParticleFriction].CreateConstraintsBatch(); - - constraints[(int)Oni.ConstraintType.Friction] = new ComputeColliderFrictionConstraints(this); - constraints[(int)Oni.ConstraintType.Friction].CreateConstraintsBatch(); - - constraints[(int)Oni.ConstraintType.Density] = new ComputeDensityConstraints(this); - constraints[(int)Oni.ConstraintType.Density].CreateConstraintsBatch(); - } - - public void Destroy() - { - - reducedBounds?.Dispose(); - solverToWorldBuffer?.Dispose(); - worldToSolverBuffer?.Dispose(); - inertialFrameBuffer?.Dispose(); - fluidDispatchBuffer?.Dispose(); - - for (int i = 0; i < constraints.Length; ++i) - if (constraints[i] != null) - constraints[i].Dispose(); - - // Get rid of particle and collider grids/queries: - particleGrid?.Dispose(); - - // cannot use null-coalescing because this is a GameObject, and Unity overrides != - if (colliderGrid != null) - colliderGrid.DecreaseReferenceCount(); - - spatialQueries?.Dispose(); - - positionDeltasIntBuffer?.Dispose(); - orientationDeltasIntBuffer?.Dispose(); - - rigidbodyLinearDeltasIntBuffer?.Dispose(); - rigidbodyAngularDeltasIntBuffer?.Dispose(); - - tangentsIntBuffer?.Dispose(); - - simplexBounds?.Dispose(); - - auxPositions?.Dispose(); - auxVelocities?.Dispose(); - auxColors?.Dispose(); - auxAttributes?.Dispose(); - auxOffsetInCell?.Dispose(); - auxSortedToOriginal?.Dispose(); - } - - private void GetOrCreateColliderWorld() - { - colliderGrid = GameObject.FindObjectOfType(); - if (colliderGrid == null) - { - var world = new GameObject("ComputeCollisionWorld", typeof(ComputeColliderWorld)); - colliderGrid = world.GetComponent(); - } - } - - public void PushData() - { - // Send data to the GPU: - abstraction.positions.Upload(); - abstraction.orientations.Upload(); - abstraction.velocities.Upload(); - abstraction.angularVelocities.Upload(); - abstraction.colors.Upload(); - - abstraction.startPositions.Upload(); - abstraction.startOrientations.Upload(); - abstraction.endPositions.Upload(); - abstraction.endOrientations.Upload(); - - abstraction.restPositions.Upload(); - abstraction.restOrientations.Upload(); - abstraction.normals.Upload(); - abstraction.principalRadii.Upload(); - abstraction.invMasses.Upload(); - abstraction.invRotationalMasses.Upload(); - abstraction.phases.Upload(); - abstraction.filters.Upload(); - abstraction.externalForces.Upload(); - abstraction.externalTorques.Upload(); - abstraction.wind.Upload(); - - abstraction.life.Upload(); - abstraction.fluidData.Upload(); - abstraction.userData.Upload(); - abstraction.fluidInterface.Upload(); - abstraction.fluidMaterials.Upload(); - abstraction.fluidMaterials2.Upload(); - - rigidbodyLinearDeltasIntBuffer.SetData(abstraction.rigidbodyLinearDeltas.AsNativeArray()); - rigidbodyAngularDeltasIntBuffer.SetData(abstraction.rigidbodyAngularDeltas.AsNativeArray()); - } - - public void RequestReadback() - { - // Copy rigidbody deltas (int) to output buffers (float), then request readback: - solverShader.SetBuffer(applyRigidbodyDeltasKernel, "linearDeltasAsInt", rigidbodyLinearDeltasIntBuffer); - solverShader.SetBuffer(applyRigidbodyDeltasKernel, "angularDeltasAsInt", rigidbodyAngularDeltasIntBuffer); - solverShader.SetBuffer(applyRigidbodyDeltasKernel, "linearDeltas", rigidbodyLinearDeltasBuffer); - solverShader.SetBuffer(applyRigidbodyDeltasKernel, "angularDeltas", rigidbodyAngularDeltasBuffer); - - solverShader.SetInt("particleCount", abstraction.rigidbodyLinearDeltas.count); - - int threadGroups = ComputeMath.ThreadGroupCount(abstraction.rigidbodyLinearDeltas.count, 128); - solverShader.Dispatch(applyRigidbodyDeltasKernel, threadGroups, 1, 1); - - abstraction.rigidbodyLinearDeltas.Readback(); - abstraction.rigidbodyAngularDeltas.Readback(); - - // begin particle data async GPU -> CPU transfer. - // by default, only positions and velocities are read back. - // ObiActors can request whatever data they need in RequestReadback, - // then wait for it in SimulationEnd. - abstraction.positions.Readback(); - abstraction.velocities.Readback(); - - // begin constraint data async GPU -> CPU transfer. - var sm = constraints[(int)Oni.ConstraintType.ShapeMatching] as ComputeShapeMatchingConstraints; - if (sm != null) - sm.RequestDataReadback(); - - // needed for tearing. - var dm = constraints[(int)Oni.ConstraintType.Distance] as ComputeDistanceConstraints; - if (dm != null) - dm.RequestDataReadback(); - - var pm = constraints[(int)Oni.ConstraintType.Pin] as ComputePinConstraints; - if (pm != null) - pm.RequestDataReadback(); - - var phm = constraints[(int)Oni.ConstraintType.Pinhole] as ComputePinholeConstraints; - if (phm != null) - phm.RequestDataReadback(); - } - - public void InitializeFrame(Vector4 translation, Vector4 scale, Quaternion rotation) - { - m_InertialFrame = new InertialFrame(translation, scale, rotation); - } - - public void UpdateFrame(Vector4 translation, Vector4 scale, Quaternion rotation, float deltaTime) - { - m_InertialFrame.Update(translation, scale, rotation, deltaTime); - - solverToWorldArray[0] = m_InertialFrame.frame; - solverToWorldBuffer.SetData(solverToWorldArray); - - worldToSolverArray[0] = m_InertialFrame.frame.Inverse(); - worldToSolverBuffer.SetData(worldToSolverArray); - - inertialFrameArray[0] = m_InertialFrame; - inertialFrameBuffer.SetData(inertialFrameArray); - } - - public IObiJobHandle ApplyFrame(float worldLinearInertiaScale, float worldAngularInertiaScale, float deltaTime) - { - if (activeParticleCount > 0) - { - // inverse linear part: - Matrix4x4 linear = Matrix4x4.TRS(Vector3.zero, inertialFrame.frame.rotation, new Vector3(1 / inertialFrame.frame.scale.x, 1 / inertialFrame.frame.scale.y, 1 / inertialFrame.frame.scale.z)); - Matrix4x4 linearInv = Matrix4x4.Transpose(linear); - - // non-inertial frame accelerations: - Vector4 angularVel = (linearInv * Matrix4x4.Scale(inertialFrame.angularVelocity) * linear).Diagonal(); - Vector4 eulerAccel = (linearInv * Matrix4x4.Scale(inertialFrame.angularAcceleration) * linear).Diagonal(); - Vector4 inertialAccel = linearInv * inertialFrame.acceleration; - - int threadGroups = ComputeMath.ThreadGroupCount(activeParticleCount, 128); - solverShader.SetInt("particleCount", activeParticleCount); - - solverShader.SetFloat("deltaTime", deltaTime); - solverShader.SetFloat("worldLinearInertiaScale", abstraction.worldLinearInertiaScale); - solverShader.SetFloat("worldAngularInertiaScale", abstraction.worldAngularInertiaScale); - solverShader.SetVector("angularVel", angularVel); - solverShader.SetVector("eulerAccel", eulerAccel); - solverShader.SetVector("inertialAccel", inertialAccel); - solverShader.SetVector("ambientWind", abstraction.parameters.ambientWind); - solverShader.SetBool("inertialWind", abstraction.windSpace == Space.World); - - solverShader.SetBuffer(applyInertialForcesKernel, "activeParticles", activeParticlesBuffer); - solverShader.SetBuffer(applyInertialForcesKernel, "positions", positionsBuffer); - solverShader.SetBuffer(applyInertialForcesKernel, "velocities", velocitiesBuffer); - solverShader.SetBuffer(applyInertialForcesKernel, "invMasses", invMassesBuffer); - solverShader.SetBuffer(applyInertialForcesKernel, "wind", windBuffer); - solverShader.SetBuffer(applyInertialForcesKernel, "inertialSolverFrame", inertialFrameBuffer); - - solverShader.Dispatch(applyInertialForcesKernel, threadGroups, 1, 1); - } - - return jobHandle; - } - - public void SetDeformableTriangles(ObiNativeIntList indices, ObiNativeVector2List uvs) - { - if (indices.count > 0) - { - deformableTrianglesBuffer = indices.AsComputeBuffer(); - var deformableUVsBuffer = uvs.AsComputeBuffer(); - - deformableTrisShader.SetBuffer(updateNormalsKernel, "deformableTriangles", deformableTrianglesBuffer); - deformableTrisShader.SetBuffer(updateNormalsKernel, "deformableTriangleUVs", deformableUVsBuffer); - deformableTrisShader.SetInt("triangleCount", deformableTriangleCount); - } - } - - public void SetDeformableEdges(ObiNativeIntList indices) - { - if (indices.count > 0) - { - deformableEdgesBuffer = indices.AsComputeBuffer(); - - deformableTrisShader.SetBuffer(updateEdgeNormalsKernel, "deformableEdges", deformableEdgesBuffer); - deformableTrisShader.SetInt("edgeCount", deformableEdgeCount); - } - } - - public void SetSimplices(ObiNativeIntList simplices, SimplexCounts counts) - { - this.simplexCounts = counts; - - if (simplices.count > 0) - { - boundsShader.SetInt("pointCount", simplexCounts.pointCount); - boundsShader.SetInt("edgeCount", simplexCounts.edgeCount); - boundsShader.SetInt("triangleCount", simplexCounts.triangleCount); - - this.simplices = simplices.AsComputeBuffer(); - cellCoordsBuffer = abstraction.cellCoords.AsComputeBuffer(); - - if (simplexBounds == null || counts.simplexCount > simplexBounds.count) - { - simplexBounds?.Dispose(); - simplexBounds = new GraphicsBuffer(GraphicsBuffer.Target.Structured, counts.simplexCount * 2, 32); - - reducedBounds?.Dispose(); - reducedBounds = new GraphicsBuffer(GraphicsBuffer.Target.Structured, ComputeMath.NextMultiple(counts.simplexCount * 2, 256), 32); - } - - // Even though we usually store simplices for collision detection, the grid is reused for fluid meshing - // so the capacity we set should be at least the total amount of particles in the solver. - if (particleGrid != null) - { - if (particleGrid.SetCapacity(Mathf.Max(counts.simplexCount, particleCount), - (uint)Mathf.Max(1, abstraction.maxParticleContacts), - (uint)Mathf.Max(1, abstraction.maxParticleNeighbors))) - { - // resize to maximum number of contacts: - abstraction.colliderContacts.ResizeUninitialized(particleGrid.contactPairs.count); - abstraction.colliderContacts.SafeAsComputeBuffer(GraphicsBuffer.Target.Counter); - - abstraction.particleContacts.ResizeUninitialized(particleGrid.contactPairs.count); - abstraction.particleContacts.SafeAsComputeBuffer(GraphicsBuffer.Target.Counter); - - abstraction.contactEffectiveMasses.ResizeUninitialized(particleGrid.contactPairs.count); - abstraction.contactEffectiveMasses.SafeAsComputeBuffer(); - - abstraction.particleContactEffectiveMasses.ResizeUninitialized(particleGrid.contactPairs.count); - abstraction.particleContactEffectiveMasses.SafeAsComputeBuffer(); - } - } - } - else - this.simplices = null; - } - - public void SetActiveParticles(ObiNativeIntList indices) - { - // TODO: indices.computebuffer has been deleted when adding an item. We now need to - // update the compute buffer if needed. - if (indices.computeBuffer == null || indices.computeBuffer.count != indices.capacity) - { - //Debug.Log("create"); - activeParticlesBuffer = indices.AsComputeBuffer(indices.capacity); - } - else - { - //Debug.Log("update"); - indices.UploadFullCapacity(); //unmaps the entire memory buffer up to capacity. - } - - if (activeParticlesBuffer != null) - { - solverShader.SetBuffer(predictPositionsKernel, "activeParticles", activeParticlesBuffer); - solverShader.SetBuffer(updateVelocitiesKernel, "activeParticles", activeParticlesBuffer); - solverShader.SetBuffer(updatePositionsKernel, "activeParticles", activeParticlesBuffer); - solverShader.SetBuffer(enforceLimitsKernel, "activeParticles", activeParticlesBuffer); - } - } - - public IObiJobHandle UpdateBounds(IObiJobHandle inputDeps, float stepTime) - { - if (activeParticleCount > 0 && reducedBounds != null) - { - boundsShader.SetFloat("deltaTime", stepTime); - boundsShader.SetFloat("collisionMargin", abstraction.parameters.collisionMargin); - boundsShader.SetFloat("particleCCD", abstraction.parameters.particleCCD); - - int boundsCount = simplexCounts.simplexCount; - int threadGroups = ComputeMath.ThreadGroupCount(boundsCount, 256); - - // at edit time, the collision materials buffer will be null since - // the collider world is not updated. - if (colliderGrid.materialsBuffer != null) - { - boundsShader.SetBuffer(simplexBoundsKernel, "simplexBounds", simplexBounds); - boundsShader.SetBuffer(simplexBoundsKernel, "simplices", simplices); - boundsShader.SetBuffer(simplexBoundsKernel, "reducedBounds", reducedBounds); - boundsShader.SetBuffer(simplexBoundsKernel, "activeParticles", activeParticlesBuffer); - boundsShader.SetBuffer(simplexBoundsKernel, "positions", positionsBuffer); - boundsShader.SetBuffer(simplexBoundsKernel, "velocities", velocitiesBuffer); - boundsShader.SetBuffer(simplexBoundsKernel, "principalRadii", principalRadiiBuffer); - boundsShader.SetBuffer(simplexBoundsKernel, "fluidMaterials", fluidMaterialsBuffer); - boundsShader.SetBuffer(simplexBoundsKernel, "collisionMaterials", colliderGrid.materialsBuffer); - boundsShader.SetBuffer(simplexBoundsKernel, "collisionMaterialIndices", collisionMaterialIndexBuffer); - boundsShader.Dispatch(simplexBoundsKernel, threadGroups, 1, 1); - } - else - { - boundsShader.SetBuffer(editSimplexBoundsKernel, "simplexBounds", simplexBounds); - boundsShader.SetBuffer(editSimplexBoundsKernel, "simplices", simplices); - boundsShader.SetBuffer(editSimplexBoundsKernel, "reducedBounds", reducedBounds); - boundsShader.SetBuffer(editSimplexBoundsKernel, "activeParticles", activeParticlesBuffer); - boundsShader.SetBuffer(editSimplexBoundsKernel, "positions", positionsBuffer); - boundsShader.SetBuffer(editSimplexBoundsKernel, "velocities", velocitiesBuffer); - boundsShader.SetBuffer(editSimplexBoundsKernel, "principalRadii", principalRadiiBuffer); - boundsShader.SetBuffer(editSimplexBoundsKernel, "fluidMaterials", fluidMaterialsBuffer); - boundsShader.Dispatch(editSimplexBoundsKernel, threadGroups, 1, 1); - } - - boundsShader.SetBuffer(boundsReductionKernel, "reducedBounds", reducedBounds); - do - { - boundsShader.Dispatch(boundsReductionKernel, threadGroups, 1, 1); - threadGroups = ComputeMath.ThreadGroupCount(boundsCount, 256); - boundsCount /= 256; - } - while (threadGroups > 1); - - boundsRequest = AsyncGPUReadback.Request(reducedBounds, 32, 0); - - // update lifetimes: - solverShader.SetFloat("deltaTime",stepTime); - solverShader.SetBuffer(updateLifetimesKernel, "activeParticles", activeParticlesBuffer); - solverShader.SetBuffer(updateLifetimesKernel, "life", lifeBuffer); - solverShader.SetBuffer(updateLifetimesKernel, "deadParticles", deadIndicesBuffer); - solverShader.Dispatch(updateLifetimesKernel, ComputeMath.ThreadGroupCount(activeParticleCount, 128), 1, 1); - } - - return inputDeps; - } - - public void GetBounds(ref Vector3 min, ref Vector3 max) - { - // wait for last pending bounds async request: - boundsRequest.WaitForCompletion(); - if (boundsRequest.done && !boundsRequest.hasError) - solverBounds = boundsRequest.GetData(0)[0]; - - min = solverBounds.min; - max = solverBounds.max; - } - - public int GetConstraintCount(Oni.ConstraintType type) - { - /*if ((int)type > 0 && (int)type < constraints.Length) - { - int count = 0; - for (int i = 0; i < constraints[(int)type].Count; ++i) - { - count += constraints[(int)type][i].GetConstraintCount(); - } - return count; - } - return 0;*/ - return 0; - } - - public void SetParameters(Oni.SolverParameters parameters) - { - // These should be better passed using a constant buffer, but constant buffers do not work in 2021 :( - //https://issuetracker.unity3d.com/issues/compute-shader-is-not-using-defined-constants-when-setting-data-with-setconstantbuffer - - solverShader.SetInt("mode", (int)parameters.mode); - solverShader.SetInt("interpolation", (int)parameters.interpolation); - solverShader.SetVector("gravity", parameters.gravity); - solverShader.SetFloat("damping", parameters.damping); - solverShader.SetFloat("sleepThreshold", parameters.sleepThreshold); - solverShader.SetFloat("collisionMargin", parameters.collisionMargin); - solverShader.SetFloat("maxVelocity", parameters.maxVelocity); - solverShader.SetFloat("maxAngularVelocity", parameters.maxAngularVelocity); - } - - public void SetConstraintGroupParameters(Oni.ConstraintType type, ref Oni.ConstraintParameters parameters) - { - // No need to implement. This backend grabs parameters from the abstraction when it needs them. - } - - public void ParticleCountChanged(ObiSolver solver) - { - deadIndicesBuffer = abstraction.deadParticles.AsComputeBuffer(abstraction.deadParticles.capacity, GraphicsBuffer.Target.Counter); - colorsBuffer = abstraction.colors.AsComputeBuffer(); - positionsBuffer = abstraction.positions.AsComputeBuffer(); - orientationsBuffer = abstraction.orientations.AsComputeBuffer(); - startPositionsBuffer = abstraction.startPositions.AsComputeBuffer(); - endPositionsBuffer = abstraction.endPositions.AsComputeBuffer(); - startOrientationsBuffer = abstraction.startOrientations.AsComputeBuffer(); - endOrientationsBuffer = abstraction.endOrientations.AsComputeBuffer(); - restPositionsBuffer = abstraction.restPositions.AsComputeBuffer(); - restOrientationsBuffer = abstraction.restOrientations.AsComputeBuffer(); - prevPositionsBuffer = abstraction.prevPositions.AsComputeBuffer(); - prevOrientationsBuffer = abstraction.prevOrientations.AsComputeBuffer(); - renderablePositionsBuffer = abstraction.renderablePositions.AsComputeBuffer(); - renderableOrientationsBuffer = abstraction.renderableOrientations.AsComputeBuffer(); - renderableRadiiBuffer = abstraction.renderableRadii.AsComputeBuffer(); - collisionMaterialIndexBuffer = abstraction.collisionMaterials.AsComputeBuffer(); - - angularVelocitiesBuffer = abstraction.angularVelocities.AsComputeBuffer(); - invRotationalMassesBuffer = abstraction.invRotationalMasses.AsComputeBuffer(); - externalForcesBuffer = abstraction.externalForces.AsComputeBuffer(); - externalTorquesBuffer = abstraction.externalTorques.AsComputeBuffer(); - windBuffer = abstraction.wind.AsComputeBuffer(); - - velocitiesBuffer = abstraction.velocities.AsComputeBuffer(); - principalRadiiBuffer = abstraction.principalRadii.AsComputeBuffer(); - invMassesBuffer = abstraction.invMasses.AsComputeBuffer(); - phasesBuffer = abstraction.phases.AsComputeBuffer(); - filtersBuffer = abstraction.filters.AsComputeBuffer(); - - lifeBuffer = abstraction.life.AsComputeBuffer(); - fluidDataBuffer = abstraction.fluidData.AsComputeBuffer(); - userDataBuffer = abstraction.userData.AsComputeBuffer(); - fluidInterfaceBuffer = abstraction.fluidInterface.AsComputeBuffer(); - fluidMaterialsBuffer = abstraction.fluidMaterials.AsComputeBuffer(); - fluidMaterials2Buffer = abstraction.fluidMaterials2.AsComputeBuffer(); - anisotropiesBuffer = abstraction.anisotropies.AsComputeBuffer(); - - normalsBuffer = abstraction.normals.AsComputeBuffer(); - positionConstraintCountBuffer = abstraction.positionConstraintCounts.AsComputeBuffer(); - orientationConstraintCountBuffer = abstraction.orientationConstraintCounts.AsComputeBuffer(); - - if (positionDeltasIntBuffer != null) - { - positionDeltasIntBuffer.Dispose(); - positionDeltasIntBuffer = null; - } - - if (abstraction.positionDeltas.count > 0) - { - positionDeltasIntBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, abstraction.positionDeltas.count, abstraction.positionDeltas.stride); - positionDeltasIntBuffer.SetData(new Vector4[abstraction.positionDeltas.count]); - } - - if (orientationDeltasIntBuffer != null) - { - orientationDeltasIntBuffer.Dispose(); - orientationDeltasIntBuffer = null; - } - - if (abstraction.orientationDeltas.count > 0) - { - orientationDeltasIntBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, abstraction.orientationDeltas.count, abstraction.orientationDeltas.stride); - orientationDeltasIntBuffer.SetData(new Vector4[abstraction.orientationDeltas.count]); - } - - if (tangentsIntBuffer != null) - { - tangentsIntBuffer.Dispose(); - tangentsIntBuffer = null; - } - - if (abstraction.normals.count > 0) - { - tangentsIntBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, abstraction.normals.count, abstraction.normals.stride); - tangentsIntBuffer.SetData(new VInt4[abstraction.normals.count]); - } - - if (positionsBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "positions", positionsBuffer); - if (prevPositionsBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "prevPositions", prevPositionsBuffer); - if (orientationsBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "orientations", orientationsBuffer); - if (prevOrientationsBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "prevOrientations", prevOrientationsBuffer); - if (velocitiesBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "velocities", velocitiesBuffer); - if (invMassesBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "invMasses", invMassesBuffer); - if (angularVelocitiesBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "angularVelocities", angularVelocitiesBuffer); - if (invRotationalMassesBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "invRotationalMasses", invRotationalMassesBuffer); - if (externalForcesBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "externalForces", externalForcesBuffer); - if (externalTorquesBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "externalTorques", externalTorquesBuffer); - if (phasesBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "phases", phasesBuffer); - if (fluidInterfaceBuffer != null) solverShader.SetBuffer(predictPositionsKernel, "buoyancies", fluidInterfaceBuffer); - - if (positionsBuffer != null) solverShader.SetBuffer(updateVelocitiesKernel, "positions", positionsBuffer); - if (prevPositionsBuffer != null) solverShader.SetBuffer(updateVelocitiesKernel, "prevPositions", prevPositionsBuffer); - if (orientationsBuffer != null) solverShader.SetBuffer(updateVelocitiesKernel, "orientations", orientationsBuffer); - if (prevOrientationsBuffer != null) solverShader.SetBuffer(updateVelocitiesKernel, "prevOrientations", prevOrientationsBuffer); - if (velocitiesBuffer != null) solverShader.SetBuffer(updateVelocitiesKernel, "velocities", velocitiesBuffer); - if (angularVelocitiesBuffer != null) solverShader.SetBuffer(updateVelocitiesKernel, "angularVelocities", angularVelocitiesBuffer); - if (invMassesBuffer != null) solverShader.SetBuffer(updateVelocitiesKernel, "invMasses", invMassesBuffer); - if (invRotationalMassesBuffer != null) solverShader.SetBuffer(updateVelocitiesKernel, "invRotationalMasses", invRotationalMassesBuffer); - - if (positionsBuffer != null) solverShader.SetBuffer(updatePositionsKernel, "positions", positionsBuffer); - if (prevPositionsBuffer != null) solverShader.SetBuffer(updatePositionsKernel, "prevPositions", prevPositionsBuffer); - if (orientationsBuffer != null) solverShader.SetBuffer(updatePositionsKernel, "orientations", orientationsBuffer); - if (prevOrientationsBuffer != null) solverShader.SetBuffer(updatePositionsKernel, "prevOrientations", prevOrientationsBuffer); - if (velocitiesBuffer != null) solverShader.SetBuffer(updatePositionsKernel, "velocities", velocitiesBuffer); - if (angularVelocitiesBuffer != null) solverShader.SetBuffer(updatePositionsKernel, "angularVelocities", angularVelocitiesBuffer); - - if (positionsBuffer != null) solverShader.SetBuffer(enforceLimitsKernel, "positions", positionsBuffer); - if (prevPositionsBuffer != null) solverShader.SetBuffer(enforceLimitsKernel, "prevPositions", prevPositionsBuffer); - if (lifeBuffer != null) solverShader.SetBuffer(enforceLimitsKernel, "life", lifeBuffer); - if (phasesBuffer != null) solverShader.SetBuffer(enforceLimitsKernel, "phases", phasesBuffer); - - if (positionsBuffer != null) solverShader.SetBuffer(interpolateKernel, "positions", positionsBuffer); - if (startPositionsBuffer != null) solverShader.SetBuffer(interpolateKernel, "startPositions", startPositionsBuffer); - if (endPositionsBuffer != null) solverShader.SetBuffer(interpolateKernel, "endPositions", endPositionsBuffer); - if (renderablePositionsBuffer != null) solverShader.SetBuffer(interpolateKernel, "renderablePositions", renderablePositionsBuffer); - if (orientationsBuffer != null) solverShader.SetBuffer(interpolateKernel, "orientations", orientationsBuffer); - if (startOrientationsBuffer != null) solverShader.SetBuffer(interpolateKernel, "startOrientations", startOrientationsBuffer); - if (endOrientationsBuffer != null) solverShader.SetBuffer(interpolateKernel, "endOrientations", endOrientationsBuffer); - if (renderableOrientationsBuffer != null) solverShader.SetBuffer(interpolateKernel, "renderableOrientations", renderableOrientationsBuffer); - if (principalRadiiBuffer != null) solverShader.SetBuffer(interpolateKernel, "principalRadii", principalRadiiBuffer); - if (renderableRadiiBuffer != null) solverShader.SetBuffer(interpolateKernel, "renderableRadii", renderableRadiiBuffer); - } - - public void MaxFoamParticleCountChanged(ObiSolver solver) - { - auxPositions?.Dispose(); - auxVelocities?.Dispose(); - auxColors?.Dispose(); - auxAttributes?.Dispose(); - auxOffsetInCell?.Dispose(); - auxSortedToOriginal?.Dispose(); - - if (m_Solver.maxFoamParticles > 0) - { - solver.foamPositions.AsComputeBuffer(); - solver.foamVelocities.AsComputeBuffer(); - solver.foamColors.AsComputeBuffer(); - solver.foamAttributes.AsComputeBuffer(); - - auxPositions = new GraphicsBuffer(GraphicsBuffer.Target.Structured, (int)m_Solver.maxFoamParticles, 16); - auxVelocities = new GraphicsBuffer(GraphicsBuffer.Target.Structured, (int)m_Solver.maxFoamParticles, 16); - auxColors = new GraphicsBuffer(GraphicsBuffer.Target.Structured, (int)m_Solver.maxFoamParticles, 16); - auxAttributes = new GraphicsBuffer(GraphicsBuffer.Target.Structured, (int)m_Solver.maxFoamParticles, 16); - auxOffsetInCell = new GraphicsBuffer(GraphicsBuffer.Target.Structured, (int)m_Solver.maxFoamParticles, 4); - auxSortedToOriginal = new GraphicsBuffer(GraphicsBuffer.Target.Structured, (int)m_Solver.maxFoamParticles, 4); - } - } - - public void SetRigidbodyArrays(ObiSolver solver) - { - rigidbodyLinearDeltasBuffer = solver.rigidbodyLinearDeltas.SafeAsComputeBuffer(); - rigidbodyAngularDeltasBuffer = solver.rigidbodyAngularDeltas.SafeAsComputeBuffer(); - - if (rigidbodyLinearDeltasIntBuffer != null) - { - rigidbodyLinearDeltasIntBuffer.Dispose(); - rigidbodyLinearDeltasIntBuffer = null; - } - - if (rigidbodyAngularDeltasIntBuffer != null) - { - rigidbodyAngularDeltasIntBuffer.Dispose(); - rigidbodyAngularDeltasIntBuffer = null; - } - - rigidbodyLinearDeltasIntBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, rigidbodyLinearDeltasBuffer.count, solver.rigidbodyLinearDeltas.stride); - rigidbodyLinearDeltasIntBuffer.SetData(new Vector4[rigidbodyLinearDeltasBuffer.count]); - - rigidbodyAngularDeltasIntBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, rigidbodyAngularDeltasBuffer.count, solver.rigidbodyAngularDeltas.stride); - rigidbodyAngularDeltasIntBuffer.SetData(new Vector4[rigidbodyAngularDeltasBuffer.count]); - } - - public IConstraintsBatchImpl CreateConstraintsBatch(Oni.ConstraintType type) - { - if (constraints[(int)type] != null) - return constraints[(int)type].CreateConstraintsBatch(); - return null; - } - - public void DestroyConstraintsBatch(IConstraintsBatchImpl batch) - { - if (batch != null && constraints[(int)batch.constraintType] != null) - constraints[(int)batch.constraintType].RemoveBatch(batch); - } - - public void FinishSimulation() - { - // Make sure GPU->CPU readbacks have finished. - // by default, only positions and velocities are read back. - // ObiActors can request whatever data they need in RequestData, - // then wait for it in SimulationEnd. - abstraction.positions.WaitForReadback(); - abstraction.velocities.WaitForReadback(); - - abstraction.rigidbodyLinearDeltas.WaitForReadback(); - abstraction.rigidbodyAngularDeltas.WaitForReadback(); - - var sm = constraints[(int)Oni.ConstraintType.ShapeMatching] as ComputeShapeMatchingConstraints; - if (sm != null) - sm.WaitForReadback(); - - var dm = constraints[(int)Oni.ConstraintType.Distance] as ComputeDistanceConstraints; - if (dm != null) - dm.WaitForReadback(); - - var pm = constraints[(int)Oni.ConstraintType.Pin] as ComputePinConstraints; - if (pm != null) - pm.WaitForReadback(); - - var phm = constraints[(int)Oni.ConstraintType.Pinhole] as ComputePinholeConstraints; - if (phm != null) - phm.WaitForReadback(); - - abstraction.externalForces.WipeToZero(); - abstraction.externalTorques.WipeToZero(); - abstraction.externalForces.Upload(); - abstraction.externalTorques.Upload(); - - // copy end to start positions. - abstraction.startPositions.CopyFrom(abstraction.endPositions); abstraction.startOrientations.CopyFrom(abstraction.endOrientations); - - // now that we got position / orientation data in the CPU set them as this step's end positions / orientations. - abstraction.endPositions.CopyFrom(abstraction.positions); abstraction.endOrientations.CopyFrom(abstraction.orientations); - - abstraction.startPositions.Upload(true); - abstraction.startOrientations.Upload(true); - abstraction.endPositions.Upload(true); - abstraction.endOrientations.Upload(true); - } - - public IObiJobHandle CollisionDetection(IObiJobHandle inputDeps, float stepTime) - { - var collisionParameters = abstraction.GetConstraintParameters(Oni.ConstraintType.Collision); var particleCollisionParameters = abstraction.GetConstraintParameters(Oni.ConstraintType.ParticleCollision); var densityParameters = abstraction.GetConstraintParameters(Oni.ConstraintType.Density); - - if (particleCollisionParameters.enabled || - densityParameters.enabled) { - UpdateDiffuseDensity(stepTime); - - UnityEngine.Profiling.Profiler.BeginSample("Build Simplex Grid"); - particleGrid.BuildGrid(this, stepTime); - UnityEngine.Profiling.Profiler.EndSample(); - - if (densityParameters.enabled) { - UnityEngine.Profiling.Profiler.BeginSample("Generate Fluid Neighborhoods"); - particleGrid.GenerateFluidNeighborhoods(this); - UnityEngine.Profiling.Profiler.EndSample(); - } - - if (particleCollisionParameters.enabled) { - UnityEngine.Profiling.Profiler.BeginSample("Generate Particle Contacts"); - particleGrid.GenerateContacts(this); - UnityEngine.Profiling.Profiler.EndSample(); - } - } - - if (collisionParameters.enabled) - { - UnityEngine.Profiling.Profiler.BeginSample("Generate Collider Contacts"); - colliderGrid.GenerateContacts(this, stepTime); - UnityEngine.Profiling.Profiler.EndSample(); - - UnityEngine.Profiling.Profiler.BeginSample("Apply Force Zones"); - colliderGrid.ApplyForceZones(this, stepTime); - UnityEngine.Profiling.Profiler.EndSample(); - } - - return inputDeps; - } - - public IObiJobHandle Substep(IObiJobHandle handle, float stepTime, float substepTime, int steps, float timeLeft) - { - int threadGroups = ComputeMath.ThreadGroupCount(activeParticleCount, 128); - solverShader.SetInt("particleCount", activeParticleCount); - - // if there's no active particles yet, don't do anything: - if (activeParticleCount > 0) - { - solverShader.SetFloat("deltaTime", substepTime); - solverShader.SetFloat("velocityScale", Mathf.Pow(1 - Mathf.Clamp(m_Solver.parameters.damping, 0, 1), substepTime)); - - // Predict positions: - solverShader.Dispatch(predictPositionsKernel, threadGroups, 1, 1); - - ApplyConstraints(stepTime, substepTime, steps, timeLeft); - - EnforceLimits(threadGroups); - - // Update velocities: - solverShader.Dispatch(updateVelocitiesKernel, threadGroups, 1, 1); - - // Calculate velocity adjustments (forces, etc): - CalculateVelocityCorrections(stepTime, substepTime, steps, timeLeft); - } - - // Update diffuse particles: (need to have calculated velocity corrections first, to measure vorticity/velocity) - int substepsLeft = Mathf.RoundToInt(timeLeft / substepTime); - int foamPadding = Mathf.CeilToInt(abstraction.substeps / (float)abstraction.foamSubsteps); - - if (substepsLeft % foamPadding == 0) - { - UpdateDiffuseParticles(substepTime * foamPadding); - UpdateDiffuseCollisions(substepTime * foamPadding); - IntegrateDiffuseParticles(substepTime * foamPadding); - } - - // Update particle positions: - if (activeParticleCount > 0) - { - UpdatePositions(substepTime, threadGroups); - } - - return handle; - } - - private void CalculateVelocityCorrections(float stepTime, float substepTime, int steps, float timeLeft) - { - // Apply aerodynamic constraints: - constraints[(int)Oni.ConstraintType.Aerodynamics].Project(stepTime, substepTime, steps, timeLeft); - - var densityParameters = m_Solver.GetConstraintParameters(Oni.ConstraintType.Density); - - if (densityParameters.enabled) - { - var d = constraints[(int)Oni.ConstraintType.Density] as ComputeDensityConstraints; - if (d != null) - d.CalculateVelocityCorrections(substepTime); - } - } - - private void UpdatePositions(float deltaTime, int threadGroups) - { - var densityParameters = m_Solver.GetConstraintParameters(Oni.ConstraintType.Density); - - if (densityParameters.enabled) - { - var d = constraints[(int)Oni.ConstraintType.Density] as ComputeDensityConstraints; - if (d != null) - d.ApplyVelocityCorrections(deltaTime); - } - - // Update positions: - solverShader.Dispatch(updatePositionsKernel, threadGroups, 1, 1); - } - - private void ApplyConstraints(float stepTime, float substepTime, int steps, float timeLeft) - { - // calculate max amount of iterations required, and initialize constraints.. - int maxIterations = 0; for (int i = 0; i < Oni.ConstraintTypeCount; ++i) { var parameters = m_Solver.GetConstraintParameters((Oni.ConstraintType)i); if (parameters.enabled) { maxIterations = Mathf.Max(maxIterations, parameters.iterations); constraints[i].Initialize(stepTime, substepTime, steps, timeLeft); } } - - // calculate iteration paddings: - for (int i = 0; i < Oni.ConstraintTypeCount; ++i) { var parameters = m_Solver.GetConstraintParameters((Oni.ConstraintType)i); if (parameters.enabled && parameters.iterations > 0) padding[i] = Mathf.CeilToInt(maxIterations / (float)parameters.iterations); else padding[i] = maxIterations; } - - // perform projection iterations: - for (int i = 1; i < maxIterations; ++i) { for (int j = 0; j < Oni.ConstraintTypeCount; ++j) { if (j != (int)Oni.ConstraintType.Aerodynamics) { var parameters = m_Solver.GetConstraintParameters((Oni.ConstraintType)j); if (parameters.enabled && i % padding[j] == 0) constraints[j].Project(stepTime, substepTime, steps, timeLeft); } } } - - // final iteration, all groups together: - for (int i = 0; i < Oni.ConstraintTypeCount; ++i) { if (i != (int)Oni.ConstraintType.Aerodynamics) { var parameters = m_Solver.GetConstraintParameters((Oni.ConstraintType)i); if (parameters.enabled && parameters.iterations > 0) constraints[i].Project(stepTime, substepTime, steps, timeLeft); } } - - // Despite friction constraints being applied after collision (since coulomb friction depends on normal impulse) - // we perform a collision iteration right at the end to ensure the final state meets the Signorini-Fichera conditions. - var param = m_Solver.GetConstraintParameters(Oni.ConstraintType.ParticleCollision); if (param.enabled && param.iterations > 0) constraints[(int)Oni.ConstraintType.ParticleCollision].Project(stepTime, substepTime, steps, timeLeft); param = m_Solver.GetConstraintParameters(Oni.ConstraintType.Collision); if (param.enabled && param.iterations > 0) constraints[(int)Oni.ConstraintType.Collision].Project(stepTime, substepTime, steps, timeLeft); - } - - private void EnforceLimits(int threadGroups) - { - if (abstraction.useLimits) - { - // keep particles within bounds: - solverShader.SetBool("killOffLimits", abstraction.killOffLimitsParticles); - solverShader.SetVector("boundaryLimitsMin", abstraction.boundaryLimits.min); - solverShader.SetVector("boundaryLimitsMax", abstraction.boundaryLimits.max); - solverShader.Dispatch(enforceLimitsKernel, threadGroups, 1, 1); - } - } - - public IObiJobHandle ApplyInterpolation(IObiJobHandle inputDeps, ObiNativeVector4List startPositions, ObiNativeQuaternionList startOrientations, float stepTime, float unsimulatedTime) - { - if (particleCount <= 0) - return inputDeps; - - int threadGroups = ComputeMath.ThreadGroupCount(particleCount, 128); - solverShader.SetInt("particleCount", particleCount); - - solverShader.SetFloat("deltaTime", stepTime); - solverShader.SetFloat("blendFactor", stepTime > 0 ? unsimulatedTime / stepTime : 0); - solverShader.SetInt("interpolate", (int)m_Solver.parameters.interpolation); - - // Interpolate particle state: - solverShader.Dispatch(interpolateKernel, threadGroups, 1, 1); - - // Reset normals: - if ((deformableTriangleCount > 0 || deformableEdgeCount > 0) && normalsBuffer != null) - { - threadGroups = ComputeMath.ThreadGroupCount(normalsBuffer.count, 128); - deformableTrisShader.SetInt("normalsCount", normalsBuffer.count); - deformableTrisShader.SetBuffer(resetNormalsKernel, "phases", phasesBuffer); - deformableTrisShader.SetBuffer(resetNormalsKernel, "normals", normalsBuffer); - deformableTrisShader.SetBuffer(resetNormalsKernel, "tangentsInt", tangentsIntBuffer); - - deformableTrisShader.Dispatch(resetNormalsKernel, threadGroups, 1, 1); - - // Update deformable triangle normals - if (deformableTriangleCount > 0) - { - threadGroups = ComputeMath.ThreadGroupCount(deformableTriangleCount, 128); - deformableTrisShader.SetBuffer(updateNormalsKernel, "renderablePositions", renderablePositionsBuffer); - deformableTrisShader.SetBuffer(updateNormalsKernel, "normalsInt", normalsBuffer); - deformableTrisShader.SetBuffer(updateNormalsKernel, "tangentsInt", tangentsIntBuffer); - - deformableTrisShader.Dispatch(updateNormalsKernel, threadGroups, 1, 1); - } - - // Update deformable edge normals - if (deformableEdgeCount > 0) - { - threadGroups = ComputeMath.ThreadGroupCount(deformableEdgeCount, 128); - deformableTrisShader.SetBuffer(updateEdgeNormalsKernel, "renderablePositions", renderablePositionsBuffer); - deformableTrisShader.SetBuffer(updateEdgeNormalsKernel, "velocities", velocitiesBuffer); - deformableTrisShader.SetBuffer(updateEdgeNormalsKernel, "wind", windBuffer); - deformableTrisShader.SetBuffer(updateEdgeNormalsKernel, "normalsInt", normalsBuffer); - - deformableTrisShader.Dispatch(updateEdgeNormalsKernel, threadGroups, 1, 1); - } - - // Update particle orientations - threadGroups = ComputeMath.ThreadGroupCount(normalsBuffer.count, 128); - deformableTrisShader.SetBuffer(orientationFromNormalsKernel, "phases", phasesBuffer); - deformableTrisShader.SetBuffer(orientationFromNormalsKernel, "renderableOrientations", renderableOrientationsBuffer); - deformableTrisShader.SetBuffer(orientationFromNormalsKernel, "normals", normalsBuffer); - deformableTrisShader.SetBuffer(orientationFromNormalsKernel, "tangentsInt", tangentsIntBuffer); - - deformableTrisShader.Dispatch(orientationFromNormalsKernel, threadGroups, 1, 1); - } - - // project renderable position/orientation of pinned particles: - var pinparam = abstraction.GetConstraintParameters(Oni.ConstraintType.Pin); if (pinparam.enabled && pinparam.iterations > 0) - { - var d = constraints[(int)Oni.ConstraintType.Pin] as ComputePinConstraints; - if (Application.isPlaying && d != null) - d.ProjectRenderablePositions(); } - - //make sure density constraints are enabled, otherwise particles have no neighbors and neighbor lists will be uninitialized. - var param = m_Solver.GetConstraintParameters(Oni.ConstraintType.Density); if (param.enabled && param.iterations > 0) - { - // Fluid laplacian/anisotropy (only if we're in play mode, in-editor we have no particlegrid/sorted data). - var d = constraints[(int)Oni.ConstraintType.Density] as ComputeDensityConstraints; - if (Application.isPlaying && d != null) - d.CalculateAnisotropyLaplacianSmoothing(); - } - - return inputDeps; - } - - private void UpdateDiffuseDensity(float deltaTime) - { - var system = abstraction.GetRenderSystem() as ComputeFoamRenderSystem; - if (system != null && m_Solver.maxFoamParticles > 0 && particleGrid.cellCounts != null) - { - for (int i = 0; i < system.renderers.Count; ++i) - { - // solver indices compute buffer may be null - if (system.renderers[i].pressure > 0 && - system.renderers[i].actor.solverIndices?.computeBuffer != null) - { - float scale = 0.01f + Mathf.Clamp01(1 - system.renderers[i].density); - float radius = system.renderers[i].size * scale; - - int cellThreadGroups = ComputeMath.ThreadGroupCount(particleGrid.cellCounts.count, 128); - foamDensityShader.SetFloat("deltaTime", deltaTime); - foamDensityShader.SetInt("maxCells", particleGrid.cellCounts.count); - foamDensityShader.SetInt("maxFoamParticles", abstraction.foamPositions.computeBuffer.count); - foamDensityShader.SetInt("mode", (int)abstraction.parameters.mode); - foamDensityShader.SetFloat("pressure", system.renderers[i].pressure); - foamDensityShader.SetFloat("particleRadius", radius); - foamDensityShader.SetFloat("smoothingRadius", radius * 2 * system.renderers[i].smoothingRadius); - foamDensityShader.SetFloat("surfaceTension", system.renderers[i].surfaceTension); - foamDensityShader.SetFloat("viscosity", system.renderers[i].viscosity); - foamDensityShader.SetVector("volumeLightDirection", system.renderers[i].volumeLight != null ? abstraction.transform.InverseTransformDirection(system.renderers[i].volumeLight.transform.forward) : Vector3.down); - - foamDensityShader.SetBuffer(clearGridKernel, "cellStart", particleGrid.cellOffsets); - foamDensityShader.SetBuffer(clearGridKernel, "cellCounts", particleGrid.cellCounts); - foamDensityShader.Dispatch(clearGridKernel, cellThreadGroups, 1, 1); - - foamDensityShader.SetBuffer(insertGridKernel, "inputPositions", abstraction.foamPositions.computeBuffer); - foamDensityShader.SetBuffer(insertGridKernel, "offsetInCell", auxOffsetInCell); - foamDensityShader.SetBuffer(insertGridKernel, "cellCounts", particleGrid.cellCounts); - foamDensityShader.SetBuffer(insertGridKernel, "dispatch", abstraction.foamCount.computeBuffer); - foamDensityShader.DispatchIndirect(insertGridKernel, abstraction.foamCount.computeBuffer); - - // prefix sum - particleGrid.cellsPrefixSum.Sum(particleGrid.cellCounts, particleGrid.cellOffsets); - - foamDensityShader.SetBuffer(sortByGridKernel, "inputPositions", abstraction.foamPositions.computeBuffer); - foamDensityShader.SetBuffer(sortByGridKernel, "inputVelocities", abstraction.foamVelocities.computeBuffer); - foamDensityShader.SetBuffer(sortByGridKernel, "sortedPositions", auxPositions); - foamDensityShader.SetBuffer(sortByGridKernel, "sortedVelocities", auxVelocities); - foamDensityShader.SetBuffer(sortByGridKernel, "sortedToOriginal", auxSortedToOriginal); - foamDensityShader.SetBuffer(sortByGridKernel, "offsetInCell", auxOffsetInCell); - foamDensityShader.SetBuffer(sortByGridKernel, "cellStart", particleGrid.cellOffsets); - foamDensityShader.SetBuffer(sortByGridKernel, "cellCounts", particleGrid.cellCounts); - foamDensityShader.SetBuffer(sortByGridKernel, "dispatch", abstraction.foamCount.computeBuffer); - foamDensityShader.DispatchIndirect(sortByGridKernel, abstraction.foamCount.computeBuffer); - - foamDensityShader.SetBuffer(computeDensityKernel, "inputPositions", abstraction.foamPositions.computeBuffer); - foamDensityShader.SetBuffer(computeDensityKernel, "sortedPositions", auxPositions); - foamDensityShader.SetBuffer(computeDensityKernel, "fluidData", auxColors); - foamDensityShader.SetBuffer(computeDensityKernel, "cellStart", particleGrid.cellOffsets); - foamDensityShader.SetBuffer(computeDensityKernel, "cellCounts", particleGrid.cellCounts); - foamDensityShader.SetBuffer(computeDensityKernel, "dispatch", abstraction.foamCount.computeBuffer); - foamDensityShader.DispatchIndirect(computeDensityKernel, abstraction.foamCount.computeBuffer); - - foamDensityShader.SetBuffer(applyDensityKernel, "inputPositions", abstraction.foamPositions.computeBuffer); - foamDensityShader.SetBuffer(applyDensityKernel, "inputVelocities", abstraction.foamVelocities.computeBuffer); - foamDensityShader.SetBuffer(applyDensityKernel, "sortedPositions", auxPositions); - foamDensityShader.SetBuffer(applyDensityKernel, "sortedVelocities", auxVelocities); - foamDensityShader.SetBuffer(applyDensityKernel, "sortedToOriginal", auxSortedToOriginal); - foamDensityShader.SetBuffer(applyDensityKernel, "fluidData", auxColors); - foamDensityShader.SetBuffer(applyDensityKernel, "cellStart", particleGrid.cellOffsets); - foamDensityShader.SetBuffer(applyDensityKernel, "cellCounts", particleGrid.cellCounts); - foamDensityShader.SetBuffer(applyDensityKernel, "dispatch", abstraction.foamCount.computeBuffer); - foamDensityShader.DispatchIndirect(applyDensityKernel, abstraction.foamCount.computeBuffer); - } - } - } - else - activeFoamParticleCount = 0; - } - - private void UpdateDiffuseCollisions(float deltaTime) - { - if (!abstraction.foamCollisions) return; - - foamCollisionShader.SetFloat("radiusScale", 0.3f); - foamCollisionShader.SetFloat("colliderCount", colliderGrid.colliderCount); - foamCollisionShader.SetInt("maxCells", ComputeColliderWorld.maxCells); - foamCollisionShader.SetInt("cellsPerCollider", ComputeColliderWorld.cellsPerCollider); - foamCollisionShader.SetInt("shapeTypeCount", Oni.ColliderShapeTypeCount); - foamCollisionShader.SetFloat("deltaTime", deltaTime); - - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "inputPositions", abstraction.foamPositions.computeBuffer); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "inputVelocities", abstraction.foamVelocities.computeBuffer); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "inputAttributes", abstraction.foamAttributes.computeBuffer); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "aabbs", colliderGrid.aabbsBuffer); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "transforms", colliderGrid.transformsBuffer); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "shapes", colliderGrid.shapesBuffer); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "rigidbodies", colliderGrid.rigidbodiesBuffer); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "sortedColliderIndices", colliderGrid.sortedColliderIndicesBuffer); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "levelPopulation", colliderGrid.levelPopulation); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "cellOffsets", colliderGrid.cellOffsetsBuffer); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "cellCounts", colliderGrid.cellCountsBuffer); - - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "triangleMeshHeaders", colliderGrid.triangleMeshHeaders); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "bihNodes", colliderGrid.bihNodes); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "triangles", colliderGrid.triangles); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "vertices", colliderGrid.vertices); - - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "edgeMeshHeaders", colliderGrid.edgeMeshHeaders); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "edgeBihNodes", colliderGrid.edgeBihNodes); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "edges", colliderGrid.edges); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "edgeVertices", colliderGrid.edgeVertices); - - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "distanceFieldHeaders", colliderGrid.distanceFieldHeaders); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "dfNodes", colliderGrid.dfNodes); - - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "heightFieldHeaders", colliderGrid.heightFieldHeaders); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "heightFieldSamples", colliderGrid.heightFieldSamples); - - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "worldToSolver", worldToSolverBuffer); - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "solverToWorld", solverToWorldBuffer); - - foamCollisionShader.SetBuffer(solveDiffuseContactsKernel, "dispatch", abstraction.foamCount.computeBuffer); - foamCollisionShader.DispatchIndirect(solveDiffuseContactsKernel, abstraction.foamCount.computeBuffer); - } - - private void UpdateDiffuseParticles(float deltaTime) - { - var system = abstraction.GetRenderSystem() as ComputeFoamRenderSystem; - if (system != null && m_Solver.maxFoamParticles > 0 && particleGrid.sortedLinearVel != null) - { - foamShader.SetFloat("deltaTime", deltaTime); - foamShader.SetFloat("randomSeed", Time.frameCount % 16535 + Random.value); - foamShader.SetVector("gravity", m_Solver.parameters.gravity * m_Solver.parameters.foamGravityScale); - foamShader.SetVector("agingOverPopulation", new Vector3(m_Solver.foamAccelAgingRange.x, m_Solver.foamAccelAgingRange.y, m_Solver.foamAccelAging)); - foamShader.SetInt("maxFoamParticles", abstraction.foamPositions.computeBuffer.count); - foamShader.SetInt("minFluidNeighbors", abstraction.foamMinNeighbors); - foamShader.SetInt("maxCells", particleGrid.maxCells); - - foamShader.SetInt("pointCount", simplexCounts.pointCount); - foamShader.SetInt("edgeCount", simplexCounts.edgeCount); - foamShader.SetInt("triangleCount", simplexCounts.triangleCount); - - foamShader.SetBuffer(sortDataKernel, "positions", positionsBuffer); - foamShader.SetBuffer(sortDataKernel, "velocities", velocitiesBuffer); - foamShader.SetBuffer(sortDataKernel, "angularVelocities", angularVelocitiesBuffer); - foamShader.SetBuffer(sortDataKernel, "orientations", renderableOrientationsBuffer); - foamShader.SetBuffer(sortDataKernel, "principalRadii", renderableRadiiBuffer); - foamShader.SetBuffer(sortDataKernel, "sortedPositions", particleGrid.sortedPositions); - foamShader.SetBuffer(sortDataKernel, "sortedVelocities", particleGrid.sortedLinearVel); - foamShader.SetBuffer(sortDataKernel, "sortedAngularVelocities", particleGrid.sortedAngularVel); - foamShader.SetBuffer(sortDataKernel, "sortedOrientations", particleGrid.sortedPrevPosOrientations); - foamShader.SetBuffer(sortDataKernel, "sortedRadii", particleGrid.sortedPrincipalRadii); - foamShader.SetBuffer(sortDataKernel, "sortedToOriginal", particleGrid.sortedFluidIndices); - foamShader.SetBuffer(sortDataKernel, "dispatch", fluidDispatchBuffer); - foamShader.DispatchIndirect(sortDataKernel, fluidDispatchBuffer); - - int threadGroups; - foamShader.SetBuffer(emitFoamKernel, "positions", positionsBuffer); - foamShader.SetBuffer(emitFoamKernel, "velocities", velocitiesBuffer); - foamShader.SetBuffer(emitFoamKernel, "angularVelocities", angularVelocitiesBuffer); - foamShader.SetBuffer(emitFoamKernel, "fluidData", fluidDataBuffer); - foamShader.SetBuffer(emitFoamKernel, "principalRadii", principalRadiiBuffer); - foamShader.SetBuffer(emitFoamKernel, "outputPositions", abstraction.foamPositions.computeBuffer); - foamShader.SetBuffer(emitFoamKernel, "outputVelocities", abstraction.foamVelocities.computeBuffer); - foamShader.SetBuffer(emitFoamKernel, "outputColors", abstraction.foamColors.computeBuffer); - foamShader.SetBuffer(emitFoamKernel, "outputAttributes", abstraction.foamAttributes.computeBuffer); - foamShader.SetBuffer(emitFoamKernel, "dispatch", abstraction.foamCount.computeBuffer); - - foamShader.SetBuffer(emitShapeFoamKernel, "outputPositions", abstraction.foamPositions.computeBuffer); - foamShader.SetBuffer(emitShapeFoamKernel, "outputVelocities", abstraction.foamVelocities.computeBuffer); - foamShader.SetBuffer(emitShapeFoamKernel, "outputColors", abstraction.foamColors.computeBuffer); - foamShader.SetBuffer(emitShapeFoamKernel, "outputAttributes", abstraction.foamAttributes.computeBuffer); - foamShader.SetBuffer(emitShapeFoamKernel, "dispatch", abstraction.foamCount.computeBuffer); - for (int i = 0; i < system.renderers.Count; ++i) - { - // solver indices compute buffer may be null - if (system.renderers[i].actor.solverIndices?.computeBuffer != null) - { - threadGroups = ComputeMath.ThreadGroupCount(system.renderers[i].actor.activeParticleCount, 128); - foamShader.SetInt("activeParticleCount", system.renderers[i].actor.activeParticleCount); - foamShader.SetVector("vorticityRange", system.renderers[i].vorticityRange); - foamShader.SetVector("velocityRange", system.renderers[i].velocityRange); - foamShader.SetFloat("foamGenerationRate", system.renderers[i].foamGenerationRate); - foamShader.SetFloat("potentialIncrease", system.renderers[i].foamPotential); - foamShader.SetFloat("potentialDiffusion", Mathf.Pow(1 - Mathf.Clamp01(system.renderers[i].foamPotentialDiffusion), deltaTime)); - foamShader.SetFloat("buoyancy", system.renderers[i].buoyancy); - foamShader.SetFloat("drag", system.renderers[i].drag); - foamShader.SetFloat("airDrag", Mathf.Pow(1 - Mathf.Clamp01(system.renderers[i].atmosphericDrag), deltaTime)); - foamShader.SetFloat("airAging", system.renderers[i].airAging); - foamShader.SetFloat("isosurface", system.renderers[i].isosurface); - - foamShader.SetFloat("particleSize", system.renderers[i].size); - foamShader.SetFloat("sizeRandom", system.renderers[i].sizeRandom); - foamShader.SetFloat("lifetime", system.renderers[i].lifetime); - foamShader.SetFloat("lifetimeRandom", system.renderers[i].lifetimeRandom); - foamShader.SetVector("foamColor", system.renderers[i].color); - - if (system.renderers[i] is ObiFoamEmitter) - { - var emitter = system.renderers[i] as ObiFoamEmitter; - int particlesToEmit = emitter.GetParticleNumberToEmit(deltaTime); - threadGroups = ComputeMath.ThreadGroupCount(particlesToEmit, 128); - foamShader.SetInt("particlesToEmit", particlesToEmit); - foamShader.SetInt("emitterShape", (int)emitter.shape); - foamShader.SetVector("emitterPosition", emitter.shapeTransform != null? abstraction.transform.InverseTransformPoint(emitter.shapeTransform.position) : Vector3.zero); - foamShader.SetVector("emitterRotation", (emitter.shapeTransform != null ? emitter.shapeTransform.rotation * Quaternion.Inverse(abstraction.transform.rotation): Quaternion.identity).AsVector4()); - foamShader.SetVector("emitterSize", emitter.shapeSize); - foamShader.Dispatch(emitShapeFoamKernel, threadGroups, 1, 1); - } - else // generator - { - foamShader.SetBuffer(emitFoamKernel, "activeParticles", system.renderers[i].actor.solverIndices.computeBuffer); - foamShader.Dispatch(emitFoamKernel, threadGroups, 1, 1); - } - } - } - - foamShader.SetBuffer(copyAliveKernel, "dispatch", abstraction.foamCount.computeBuffer); - foamShader.Dispatch(copyAliveKernel, 1, 1, 1); - - foamShader.SetBuffer(updateFoamKernel, "cellOffsets", particleGrid.cellOffsets); - foamShader.SetBuffer(updateFoamKernel, "cellCounts", particleGrid.cellCounts); - foamShader.SetBuffer(updateFoamKernel, "gridHashToSortedIndex", particleGrid.cellHashToMortonIndex); - foamShader.SetBuffer(updateFoamKernel, "levelPopulation", particleGrid.levelPopulation); - foamShader.SetBuffer(updateFoamKernel, "solverBounds", reducedBounds); - - foamShader.SetBuffer(updateFoamKernel, "positions", particleGrid.sortedPositions); - foamShader.SetBuffer(updateFoamKernel, "orientations", particleGrid.sortedPrevPosOrientations); - foamShader.SetBuffer(updateFoamKernel, "principalRadii", particleGrid.sortedPrincipalRadii); - foamShader.SetBuffer(updateFoamKernel, "velocities", particleGrid.sortedLinearVel); - foamShader.SetBuffer(updateFoamKernel, "angularVelocities", particleGrid.sortedAngularVel); - foamShader.SetBuffer(updateFoamKernel, "fluidMaterial", particleGrid.sortedFluidMaterials); - foamShader.SetBuffer(updateFoamKernel, "fluidData", particleGrid.sortedFluidData); - foamShader.SetBuffer(updateFoamKernel, "fluidSimplices", particleGrid.sortedSimplexToFluid); - foamShader.SetBuffer(updateFoamKernel, "sortedToOriginal", particleGrid.sortedFluidIndices); - foamShader.SetBuffer(updateFoamKernel, "inputPositions", abstraction.foamPositions.computeBuffer); - foamShader.SetBuffer(updateFoamKernel, "inputVelocities", abstraction.foamVelocities.computeBuffer); - foamShader.SetBuffer(updateFoamKernel, "inputColors", abstraction.foamColors.computeBuffer); - foamShader.SetBuffer(updateFoamKernel, "inputAttributes", abstraction.foamAttributes.computeBuffer); - foamShader.SetBuffer(updateFoamKernel, "outputPositions", auxPositions); - foamShader.SetBuffer(updateFoamKernel, "outputVelocities", auxVelocities); - foamShader.SetBuffer(updateFoamKernel, "outputColors", auxColors); - foamShader.SetBuffer(updateFoamKernel, "outputAttributes", auxAttributes); - foamShader.SetBuffer(updateFoamKernel, "dispatch", abstraction.foamCount.computeBuffer); - foamShader.DispatchIndirect(updateFoamKernel, abstraction.foamCount.computeBuffer); - - // copy aux buffers to solver buffers: - foamShader.SetBuffer(copyKernel, "inputPositions", auxPositions); - foamShader.SetBuffer(copyKernel, "inputVelocities", auxVelocities); - foamShader.SetBuffer(copyKernel, "inputColors", auxColors); - foamShader.SetBuffer(copyKernel, "inputAttributes", auxAttributes); - foamShader.SetBuffer(copyKernel, "outputPositions", abstraction.foamPositions.computeBuffer); - foamShader.SetBuffer(copyKernel, "outputVelocities", abstraction.foamVelocities.computeBuffer); - foamShader.SetBuffer(copyKernel, "outputColors", abstraction.foamColors.computeBuffer); - foamShader.SetBuffer(copyKernel, "outputAttributes", abstraction.foamAttributes.computeBuffer); - foamShader.SetBuffer(copyKernel, "dispatch", abstraction.foamCount.computeBuffer); - foamShader.DispatchIndirect(copyKernel, abstraction.foamCount.computeBuffer, 16); - - AsyncGPUReadback.Request(abstraction.foamCount.computeBuffer, 4, 12, (AsyncGPUReadbackRequest obj) => - { - if (obj.done && !obj.hasError) - this.activeFoamParticleCount = obj.GetData()[0]; - }); - } - else - activeFoamParticleCount = 0; - } - - private void IntegrateDiffuseParticles(float deltaTime) - { - foamShader.SetFloat("deltaTime", deltaTime); - - foamShader.SetBuffer(integrateFoamKernel, "outputPositions", abstraction.foamPositions.computeBuffer); - foamShader.SetBuffer(integrateFoamKernel, "outputVelocities", abstraction.foamVelocities.computeBuffer); - - foamShader.SetBuffer(integrateFoamKernel, "dispatch", abstraction.foamCount.computeBuffer); - foamShader.DispatchIndirect(integrateFoamKernel, abstraction.foamCount.computeBuffer); - } - - public void SpatialQuery(ObiNativeQueryShapeList shapes, ObiNativeAffineTransformList transforms, ObiNativeQueryResultList results) { - if (abstraction.queryResults.count != abstraction.maxQueryResults) - { - abstraction.queryResults.ResizeUninitialized((int)abstraction.maxQueryResults); - abstraction.queryResults.SafeAsComputeBuffer(GraphicsBuffer.Target.Counter); - } - - spatialQueries.SpatialQuery(this, shapes.SafeAsComputeBuffer(), - transforms.SafeAsComputeBuffer(), - results.computeBuffer); - } - - public int GetParticleGridSize() - { - //return particleGrid.grid.usedCells.Length; - return 0; - } - public void GetParticleGrid(ObiNativeAabbList cells) - { - //particleGrid.GetCells(cells); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Compute/Solver/ComputeSolverImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Compute/Solver/ComputeSolverImpl.cs.meta deleted file mode 100644 index 53995cd7a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Compute/Solver/ComputeSolverImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9bd37b35dc8b04d69bd0c88ac12b2c5d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface.meta b/Assets/Obi/Scripts/Common/Backends/Interface.meta deleted file mode 100644 index 21a345be7..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: d4b76e41a8d95486abaf6cefe4451e85 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Collisions.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Collisions.meta deleted file mode 100644 index 3d5633851..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Collisions.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 26d4fb7ae70404953b2fe6daed5564d7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs deleted file mode 100644 index 56a124c12..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs +++ /dev/null @@ -1,24 +0,0 @@ -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/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.meta deleted file mode 100644 index 074d487dd..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 89f411e99368641bda6ba6dd0864c8c6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.orig b/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.orig deleted file mode 100644 index 640762fba..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.orig +++ /dev/null @@ -1,27 +0,0 @@ -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/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.orig.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.orig.meta deleted file mode 100644 index 3eac5a6a4..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Collisions/IColliderWorldImpl.cs.orig.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 1a37affa245de4938b08eb9ff13f2c13 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints.meta deleted file mode 100644 index f569b9ec1..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 92371fdf7eced49a58fe7a78f21d85e0 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IAerodynamicConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IAerodynamicConstraintsBatchImpl.cs deleted file mode 100644 index d895a7351..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IAerodynamicConstraintsBatchImpl.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UnityEngine; -using System.Collections; - -namespace Obi -{ - public interface IAerodynamicConstraintsBatchImpl : IConstraintsBatchImpl - { - void SetAerodynamicConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList aerodynamicCoeffs, int count); - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IAerodynamicConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IAerodynamicConstraintsBatchImpl.cs.meta deleted file mode 100644 index ec621fcb7..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IAerodynamicConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a0f082ce0011f44c68afb3e08a94174f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendConstraintsBatchImpl.cs deleted file mode 100644 index b193e7f5a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendConstraintsBatchImpl.cs +++ /dev/null @@ -1,10 +0,0 @@ -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/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendConstraintsBatchImpl.cs.meta deleted file mode 100644 index 7cf161a99..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 04ed7586a63754fedac80c4d72ccc001 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendTwistConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendTwistConstraintsBatchImpl.cs deleted file mode 100644 index 497717078..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendTwistConstraintsBatchImpl.cs +++ /dev/null @@ -1,10 +0,0 @@ -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/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendTwistConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendTwistConstraintsBatchImpl.cs.meta deleted file mode 100644 index dbf23c82e..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IBendTwistConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 80c2392ca65914fdbac721d82d5266d5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IChainConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IChainConstraintsBatchImpl.cs deleted file mode 100644 index 5cb62079f..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IChainConstraintsBatchImpl.cs +++ /dev/null @@ -1,10 +0,0 @@ -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/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IChainConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IChainConstraintsBatchImpl.cs.meta deleted file mode 100644 index c606a1e25..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IChainConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 51e802e7c035e4ce799a5afb80a5da5c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderCollisionConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderCollisionConstraintsBatchImpl.cs deleted file mode 100644 index 89eeba090..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderCollisionConstraintsBatchImpl.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UnityEngine; -using System.Collections; - -namespace Obi -{ - public interface IColliderCollisionConstraintsBatchImpl : IConstraintsBatchImpl - { - - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderCollisionConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderCollisionConstraintsBatchImpl.cs.meta deleted file mode 100644 index c1bf39c6c..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderCollisionConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bad55e75f72144e6b992f17ad436af57 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderFrictionConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderFrictionConstraintsBatchImpl.cs deleted file mode 100644 index 8e5d68be1..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderFrictionConstraintsBatchImpl.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UnityEngine; -using System.Collections; - -namespace Obi -{ - public interface IColliderFrictionConstraintsBatchImpl : IConstraintsBatchImpl - { - - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderFrictionConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderFrictionConstraintsBatchImpl.cs.meta deleted file mode 100644 index b5cb7ccdc..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IColliderFrictionConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ce5da28cc60854096a6af5377bc0b9ba -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsBatchImpl.cs deleted file mode 100644 index 88141ec34..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsBatchImpl.cs +++ /dev/null @@ -1,29 +0,0 @@ - -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/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsBatchImpl.cs.meta deleted file mode 100644 index c35570b34..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6631e8d65517d4eb7adfaec19126e754 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsImpl.cs deleted file mode 100644 index 27f4159b9..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsImpl.cs +++ /dev/null @@ -1,22 +0,0 @@ - -using UnityEngine; -using System.Collections; - -namespace Obi -{ - public interface IConstraints - { - Oni.ConstraintType constraintType - { - get; - } - - ISolverImpl solver - { - get; - } - - int GetConstraintCount(); - } - -} diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsImpl.cs.meta deleted file mode 100644 index f594dc1a0..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IConstraintsImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8198ad7e2d14140879a794fc8f90e61d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDensityConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDensityConstraintsBatchImpl.cs deleted file mode 100644 index d07840372..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDensityConstraintsBatchImpl.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UnityEngine; -using System.Collections; - -namespace Obi -{ - public interface IDensityConstraintsBatchImpl : IConstraintsBatchImpl - { - - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDensityConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDensityConstraintsBatchImpl.cs.meta deleted file mode 100644 index 5cb2c6e0a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDensityConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b2df20fbf9eee489c9999427bedc7f00 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDistanceConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDistanceConstraintsBatchImpl.cs deleted file mode 100644 index 0219bfdcd..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDistanceConstraintsBatchImpl.cs +++ /dev/null @@ -1,10 +0,0 @@ -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/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDistanceConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDistanceConstraintsBatchImpl.cs.meta deleted file mode 100644 index 547a2780d..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IDistanceConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 462485304564147b08d192696258a593 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleCollisionConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleCollisionConstraintsBatchImpl.cs deleted file mode 100644 index 1228835fc..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleCollisionConstraintsBatchImpl.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UnityEngine; -using System.Collections; - -namespace Obi -{ - public interface IParticleCollisionConstraintsBatchImpl : IConstraintsBatchImpl - { - - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleCollisionConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleCollisionConstraintsBatchImpl.cs.meta deleted file mode 100644 index 206847c60..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleCollisionConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e1fef58a2a6c74dd08e04b9df48f028e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleFrictionConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleFrictionConstraintsBatchImpl.cs deleted file mode 100644 index 5bf2fb87e..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleFrictionConstraintsBatchImpl.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UnityEngine; -using System.Collections; - -namespace Obi -{ - public interface IParticleFrictionConstraintsBatchImpl : IConstraintsBatchImpl - { - - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleFrictionConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleFrictionConstraintsBatchImpl.cs.meta deleted file mode 100644 index 93764bbf0..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IParticleFrictionConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4d283cf8766664a728b1a3372c4a423a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinConstraintsBatchImpl.cs deleted file mode 100644 index 3f934c7a3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinConstraintsBatchImpl.cs +++ /dev/null @@ -1,10 +0,0 @@ - -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/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinConstraintsBatchImpl.cs.meta deleted file mode 100644 index 49bf0532b..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 339a70e0be9984072a153f58552747e7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinholeConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinholeConstraintsBatchImpl.cs deleted file mode 100644 index 24652e5f8..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinholeConstraintsBatchImpl.cs +++ /dev/null @@ -1,8 +0,0 @@ - -namespace Obi -{ - public interface IPinholeConstraintsBatchImpl : IConstraintsBatchImpl - { - void SetPinholeConstraints(ObiNativeIntList particleIndices, ObiNativeIntList colliderIndices, ObiNativeVector4List offsets, ObiNativeFloatList edgeMus, ObiNativeIntList edgeRanges, ObiNativeFloatList edgeRangeMus, ObiNativeFloatList parameters, ObiNativeFloatList relativeVelocities, ObiNativeFloatList lambdas, int count); - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinholeConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinholeConstraintsBatchImpl.cs.meta deleted file mode 100644 index 0cc8e50df..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IPinholeConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 22a8bac3a0d2747b8ba78f201d67476a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IShapeMatchingConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IShapeMatchingConstraintsBatchImpl.cs deleted file mode 100644 index 10ed30448..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IShapeMatchingConstraintsBatchImpl.cs +++ /dev/null @@ -1,20 +0,0 @@ -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/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IShapeMatchingConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IShapeMatchingConstraintsBatchImpl.cs.meta deleted file mode 100644 index 85a812c33..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IShapeMatchingConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 793544a177038489599056d49197b4b7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ISkinConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ISkinConstraintsBatchImpl.cs deleted file mode 100644 index 8d9601377..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ISkinConstraintsBatchImpl.cs +++ /dev/null @@ -1,10 +0,0 @@ -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/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ISkinConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ISkinConstraintsBatchImpl.cs.meta deleted file mode 100644 index ada65b308..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ISkinConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7c42e394fbac64742a7d3aae172e7750 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStitchConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStitchConstraintsBatchImpl.cs deleted file mode 100644 index 72b9bf6c4..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStitchConstraintsBatchImpl.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UnityEngine; -using System.Collections; - -namespace Obi -{ - public interface IStitchConstraintsBatchImpl : IConstraintsBatchImpl - { - void SetStitchConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count); - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStitchConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStitchConstraintsBatchImpl.cs.meta deleted file mode 100644 index 94e463971..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStitchConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f42ef0ded9a564c599a8797894ea1d1e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStretchShearConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStretchShearConstraintsBatchImpl.cs deleted file mode 100644 index 92ad6e7a3..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStretchShearConstraintsBatchImpl.cs +++ /dev/null @@ -1,10 +0,0 @@ -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/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStretchShearConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStretchShearConstraintsBatchImpl.cs.meta deleted file mode 100644 index 6287a9b84..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IStretchShearConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4afb32b230ee849909c3b9b246b6a51e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ITetherConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ITetherConstraintsBatchImpl.cs deleted file mode 100644 index f4fb07ee0..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ITetherConstraintsBatchImpl.cs +++ /dev/null @@ -1,10 +0,0 @@ -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/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ITetherConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ITetherConstraintsBatchImpl.cs.meta deleted file mode 100644 index 77342bd8c..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/ITetherConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b7ea8208967a0450a85e41d98a4f0f57 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IVolumeConstraintsBatchImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IVolumeConstraintsBatchImpl.cs deleted file mode 100644 index ee1468b98..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IVolumeConstraintsBatchImpl.cs +++ /dev/null @@ -1,16 +0,0 @@ -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/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IVolumeConstraintsBatchImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IVolumeConstraintsBatchImpl.cs.meta deleted file mode 100644 index 3ec9a34ef..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Constraints/IVolumeConstraintsBatchImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f5f8748ef424c445d949c21d3528e6ee -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/IObiBackend.cs b/Assets/Obi/Scripts/Common/Backends/Interface/IObiBackend.cs deleted file mode 100644 index 47e101f85..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/IObiBackend.cs +++ /dev/null @@ -1,18 +0,0 @@ -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/Assets/Obi/Scripts/Common/Backends/Interface/IObiBackend.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/IObiBackend.cs.meta deleted file mode 100644 index 7101122fc..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/IObiBackend.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3212c809e81a349d298b283ff8b1f367 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/IObiJobHandle.cs b/Assets/Obi/Scripts/Common/Backends/Interface/IObiJobHandle.cs deleted file mode 100644 index 137e033ab..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/IObiJobHandle.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Obi -{ - public interface IObiJobHandle - { - void Complete(); - void Release(); - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/IObiJobHandle.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/IObiJobHandle.cs.meta deleted file mode 100644 index 364b7d5f0..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/IObiJobHandle.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2f2948e6b45fe44c09866380b7ebb2ff -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/JobHandlePool.cs b/Assets/Obi/Scripts/Common/Backends/Interface/JobHandlePool.cs deleted file mode 100644 index c27e279b8..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/JobHandlePool.cs +++ /dev/null @@ -1,40 +0,0 @@ -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/Assets/Obi/Scripts/Common/Backends/Interface/JobHandlePool.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/JobHandlePool.cs.meta deleted file mode 100644 index f9be91f08..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/JobHandlePool.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 41815ed20fd8a498ca433a2d90ee1136 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Rendering.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Rendering.meta deleted file mode 100644 index a168ded5e..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Rendering.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e9bb708333a524266935df041ba30a42 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Rendering/IRenderSystem.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Rendering/IRenderSystem.cs deleted file mode 100644 index 16aff0175..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Rendering/IRenderSystem.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Obi -{ - public interface IRenderSystem - { - void Setup(); // build meshes, prepare render state, etc. - void Step(); // update constraints (currently only used by skinned cloth) - void Render(); // do the actual rendering. - - void Dispose(); - - uint tier { get { return 1; } } - Oni.RenderingSystemType typeEnum { get; } - - bool isEmpty { get; } - Type GetRendererType(); - } - - public class RendererSet where T : ObiRenderer - { - private List list = new List(); - - public T this[int i] - { - get { return list[i]; } - set { list[i] = value; } - } - - public int Count - { - get { return list.Count; } - } - - public bool AddRenderer(T renderer) - { - // Even though using a HashSet would keep us from checking for - // duplicates in O(n), the only way to iterate trough a set - // causes GC. Since we iterate trough renderers every frame, - // but we only add new renderers once in a blue moon, - // it's preferable to use a list instead. - - if (!list.Contains(renderer)) - { - list.Add(renderer); - return true; - } - return false; - } - - public bool RemoveRenderer(T renderer) - { - return list.Remove(renderer); - } - - public void RemoveAt(int i) - { - if (i >= 0 && i < list.Count) - list.RemoveAt(i); - } - - public int IndexOf(T renderer) - { - return list.IndexOf(renderer); - } - - public IReadOnlyList AsReadOnly() - { - return list.AsReadOnly(); - } - - public void Clear() - { - list.Clear(); - } - } - - public interface RenderSystem : IRenderSystem where T : ObiRenderer - { - RendererSet renderers { get; } - - Type IRenderSystem.GetRendererType() { return typeof(T); } - - bool IRenderSystem.isEmpty - { - get { return renderers.Count == 0; } - } - - public virtual bool AddRenderer(T renderer) - { - return renderers.AddRenderer(renderer); - } - public virtual bool RemoveRenderer(T renderer) - { - return renderers.RemoveRenderer(renderer); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Rendering/IRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Rendering/IRenderSystem.cs.meta deleted file mode 100644 index 2828c5355..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Rendering/IRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: cd2ee05999916460aa9ee269dc8136e4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Solver.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Solver.meta deleted file mode 100644 index f46f37198..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Solver.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 05a823cecfaf946f7ab1f11139245d20 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Interface/Solver/ISolverImpl.cs b/Assets/Obi/Scripts/Common/Backends/Interface/Solver/ISolverImpl.cs deleted file mode 100644 index fb40d70f8..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Solver/ISolverImpl.cs +++ /dev/null @@ -1,64 +0,0 @@ -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/Assets/Obi/Scripts/Common/Backends/Interface/Solver/ISolverImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Interface/Solver/ISolverImpl.cs.meta deleted file mode 100644 index 7f921dc22..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Interface/Solver/ISolverImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e99a50686df1a44519aa29d8424d670e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Null.meta b/Assets/Obi/Scripts/Common/Backends/Null.meta deleted file mode 100644 index 423fa904e..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Null.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3c5d200156f104097b803ba65cd0fe72 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Null/NullBackend.cs b/Assets/Obi/Scripts/Common/Backends/Null/NullBackend.cs deleted file mode 100644 index 10cc2d691..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Null/NullBackend.cs +++ /dev/null @@ -1,15 +0,0 @@ -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/Assets/Obi/Scripts/Common/Backends/Null/NullBackend.cs.meta b/Assets/Obi/Scripts/Common/Backends/Null/NullBackend.cs.meta deleted file mode 100644 index c1937b73a..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Null/NullBackend.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 821d5c08bf0f9459698d65c3aaabaf54 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Backends/Null/NullSolverImpl.cs b/Assets/Obi/Scripts/Common/Backends/Null/NullSolverImpl.cs deleted file mode 100644 index 9e21824d9..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Null/NullSolverImpl.cs +++ /dev/null @@ -1,134 +0,0 @@ -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/Assets/Obi/Scripts/Common/Backends/Null/NullSolverImpl.cs.meta b/Assets/Obi/Scripts/Common/Backends/Null/NullSolverImpl.cs.meta deleted file mode 100644 index 4352d9f84..000000000 --- a/Assets/Obi/Scripts/Common/Backends/Null/NullSolverImpl.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f25a17b2fd1424dde851a7751e41d7b3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints.meta b/Assets/Obi/Scripts/Common/Blueprints.meta deleted file mode 100644 index 415cf4b20..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: ce5ca5ebbe1f0418bb05de240bf6692c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints.meta deleted file mode 100644 index 60b71b4d5..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e272b09fdfb9d401aa0514e09d3eb842 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches.meta deleted file mode 100644 index 984456295..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 12f3679c3b69b41b68f65afab6db4c56 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/IStructuralConstraintBatch.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/IStructuralConstraintBatch.cs deleted file mode 100644 index 66deaf902..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/IStructuralConstraintBatch.cs +++ /dev/null @@ -1,13 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/IStructuralConstraintBatch.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/IStructuralConstraintBatch.cs.meta deleted file mode 100644 index ab69460e0..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/IStructuralConstraintBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f23dea5b75e2c432282b0f62513267ed -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiAerodynamicConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiAerodynamicConstraintsBatch.cs deleted file mode 100644 index 6e7c6c3be..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiAerodynamicConstraintsBatch.cs +++ /dev/null @@ -1,107 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiAerodynamicConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiAerodynamicConstraintsBatch.cs.meta deleted file mode 100644 index 3fabfe160..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiAerodynamicConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 679cceabc60a345df8d9c3e0ac00eca3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 8626b43f419d1466a9dc1c1509308b13, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendConstraintsBatch.cs deleted file mode 100644 index a1cf35289..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendConstraintsBatch.cs +++ /dev/null @@ -1,128 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendConstraintsBatch.cs.meta deleted file mode 100644 index 19f55f8d4..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2d25c1516f81f44b190e2ef893151ea0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: f9aac3aba3ca7456d807e7fab120eb8a, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendTwistConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendTwistConstraintsBatch.cs deleted file mode 100644 index 522dd1930..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendTwistConstraintsBatch.cs +++ /dev/null @@ -1,129 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendTwistConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendTwistConstraintsBatch.cs.meta deleted file mode 100644 index c4ab7a404..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiBendTwistConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fd870f7d936fb46178a58eed5f6d4f7e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 91de8d14a7b7a42d88d336323c428b20, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiChainConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiChainConstraintsBatch.cs deleted file mode 100644 index 1104490b7..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiChainConstraintsBatch.cs +++ /dev/null @@ -1,133 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiChainConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiChainConstraintsBatch.cs.meta deleted file mode 100644 index ae544fbb1..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiChainConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4a957d8a661ad464085e9f64cfc57406 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 1a42905220c3544c99b3ec98f88b080b, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiConstraintsBatch.cs deleted file mode 100644 index 53c42dff5..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiConstraintsBatch.cs +++ /dev/null @@ -1,212 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiConstraintsBatch.cs.meta deleted file mode 100644 index 46083e7c6..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7aacef50ee7794d0c9d6c77ef761d142 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiDistanceConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiDistanceConstraintsBatch.cs deleted file mode 100644 index 92673df9a..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiDistanceConstraintsBatch.cs +++ /dev/null @@ -1,148 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiDistanceConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiDistanceConstraintsBatch.cs.meta deleted file mode 100644 index 69910becf..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiDistanceConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6b0df8a8dbd9143dca2d51705e597db4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 8be685232a6ad41508d8bbe9d003a892, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinConstraintsBatch.cs deleted file mode 100644 index 08270d5c5..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinConstraintsBatch.cs +++ /dev/null @@ -1,146 +0,0 @@ -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(); - - 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, bool projectRenderable = false) - { - RegisterConstraint(); - - particleIndices.Add(solverIndex); - pinBodies.Add(body != null ? body.Handle : new ObiColliderHandle()); - colliderIndices.Add(body != null ? body.Handle.index : -1); - offsets.Add(new Vector4(offset.x, offset.y, offset.z, projectRenderable ? 1:0)); - restDarbouxVectors.Add(restDarboux); - stiffnesses.Add(linearCompliance); - stiffnesses.Add(rotationalCompliance); - } - - 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); - 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); - - 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(); - - if (solver != null && solver.implementation != null) - solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IConstraintsBatchImpl); - } - - } -} diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinConstraintsBatch.cs.meta deleted file mode 100644 index 31c2122e6..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c2de2f97e7edf4bedb38202be59122ae -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 85e4f507907784b9eb4637afe5c2e3a4, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinholeConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinholeConstraintsBatch.cs deleted file mode 100644 index 3ae11a2ca..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinholeConstraintsBatch.cs +++ /dev/null @@ -1,220 +0,0 @@ -using UnityEngine; -using System; -using System.Collections.Generic; - -namespace Obi -{ - [Serializable] - public class ObiPinholeConstraintsBatch : ObiConstraintsBatch - { - [Serializable] - public struct PinholeEdge - { - public int edgeIndex; - public float coordinate; - - public PinholeEdge(int edgeIndex, float coordinate) - { - this.edgeIndex = edgeIndex; - this.coordinate = coordinate; - } - - public float GetRopeCoordinate(ObiActor actor) - { - int edgeCount = actor.GetDeformableEdgeCount(); - return edgeCount > 0 ? Mathf.Clamp01((edgeIndex + coordinate) / edgeCount) : 0; - } - } - - protected IPinholeConstraintsBatchImpl m_BatchImpl; - - /// - /// for each constraint, handle of the pinned collider. - /// - [HideInInspector] public List pinBodies = new List(); - - /// - /// for each constraint, reference to the actor pinned. - /// - [HideInInspector] public List pinActors = new List(); - - /// - /// index of the pinned collider in the collider world. - /// - [HideInInspector] public ObiNativeIntList colliderIndices = new ObiNativeIntList(); - - /// - /// Pinhole position expressed in the attachment's local space. - /// - [HideInInspector] public ObiNativeVector4List offsets = new ObiNativeVector4List(); - - /// - // Normalized coordinate along current edge. - /// - [HideInInspector] public ObiNativeFloatList edgeMus = new ObiNativeFloatList(); - - /// - /// Edge range as 2 ints (first edge, last edge) for each constraint. - /// - [HideInInspector] public ObiNativeIntList edgeRanges = new ObiNativeIntList(); - - /// - /// Min/max cooridnate in each of the first and last edges as 2 floats for each constraint. - /// - [HideInInspector] public ObiNativeFloatList edgeRangeMus = new ObiNativeFloatList(); - - /// - /// Parameters of pinhole constraints. 5 floats per constraint (compliance, friction, motor speed, motor force and normalized coordinate along edge). - /// - [HideInInspector] public ObiNativeFloatList parameters = new ObiNativeFloatList(); - - /// - /// Relative velocities between rope and pinhole. - /// - [HideInInspector] public ObiNativeFloatList relativeVelocities = new ObiNativeFloatList(); - - - public override Oni.ConstraintType constraintType - { - get { return Oni.ConstraintType.Pinhole; } - } - - public override IConstraintsBatchImpl implementation - { - get { return m_BatchImpl; } - } - - public ObiPinholeConstraintsBatch(ObiPinholeConstraintsData constraints = null) : base() - { - } - - public void AddConstraint(PinholeEdge edge, PinholeEdge firstEdge, PinholeEdge lastEdge, ObiActor actor, ObiColliderBase body, Vector3 offset, float compliance, float friction, float motorSpeed, float motorForce, bool clampAtEnds) - { - RegisterConstraint(); - - particleIndices.Add(edge.edgeIndex); - edgeMus.Add(edge.coordinate); - edgeRanges.Add(firstEdge.edgeIndex); - edgeRanges.Add(lastEdge.edgeIndex); - edgeRangeMus.Add(firstEdge.coordinate); - edgeRangeMus.Add(lastEdge.coordinate); - - pinBodies.Add(body != null ? body.Handle : new ObiColliderHandle()); - pinActors.Add(actor); - colliderIndices.Add(body != null ? body.Handle.index : -1); - offsets.Add(offset); - parameters.Add(compliance); - parameters.Add(friction); - parameters.Add(motorSpeed); - parameters.Add(motorForce); - parameters.Add(clampAtEnds ? 1 : 0); - relativeVelocities.Add(0); - } - - public override void Clear() - { - base.Clear(); - particleIndices.Clear(); - pinBodies.Clear(); - colliderIndices.Clear(); - offsets.Clear(); - edgeMus.Clear(); - edgeRanges.Clear(); - edgeRangeMus.Clear(); - parameters.Clear(); - relativeVelocities.Clear(); - } - - public override void GetParticlesInvolved(int index, List particles) - { - particles.Add(particleIndices[index]); - } - - protected override void SwapConstraints(int sourceIndex, int destIndex) - { - particleIndices.Swap(sourceIndex, destIndex); - pinBodies.Swap(sourceIndex, destIndex); - colliderIndices.Swap(sourceIndex, destIndex); - offsets.Swap(sourceIndex, destIndex); - edgeMus.Swap(sourceIndex, destIndex); - edgeRanges.Swap(sourceIndex * 2, destIndex * 2); - edgeRanges.Swap(sourceIndex * 2 + 1, destIndex * 2 + 1); - edgeRangeMus.Swap(sourceIndex * 2, destIndex * 2); - edgeRangeMus.Swap(sourceIndex * 2 + 1, destIndex * 2 + 1); - - for (int i = 0; i < 5; ++i) - parameters.Swap(sourceIndex * 5 + i, destIndex * 5 + i); - - relativeVelocities.Swap(sourceIndex, destIndex); - } - - public override void Merge(ObiActor actor, IObiConstraintsBatch other) - { - var batch = other as ObiPinholeConstraintsBatch; - - if (batch != null) - { - - particleIndices.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); - - colliderIndices.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); - offsets.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); - edgeRanges.ResizeUninitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 2); - edgeRangeMus.ResizeUninitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 2); - edgeMus.ResizeUninitialized(m_ActiveConstraintCount + batch.activeConstraintCount); - parameters.ResizeUninitialized((m_ActiveConstraintCount + batch.activeConstraintCount) * 5); - relativeVelocities.ResizeInitialized(m_ActiveConstraintCount + batch.activeConstraintCount); - lambdas.ResizeInitialized(m_ActiveConstraintCount + batch.activeConstraintCount); - - edgeMus.CopyFrom(batch.edgeMus, 0, m_ActiveConstraintCount, batch.activeConstraintCount); - edgeRangeMus.CopyFrom(batch.edgeRangeMus, 0, m_ActiveConstraintCount * 2, batch.activeConstraintCount * 2); - offsets.CopyFrom(batch.offsets, 0, m_ActiveConstraintCount, batch.activeConstraintCount); - relativeVelocities.CopyFrom(batch.relativeVelocities, 0, m_ActiveConstraintCount, batch.activeConstraintCount); - parameters.CopyFrom(batch.parameters, 0, m_ActiveConstraintCount * 5, batch.activeConstraintCount * 5); - - for (int i = 0; i < batch.activeConstraintCount; ++i) - { - int currentEdge = -1, firstEdge = -1, lastEdge = -1; - if (batch.pinActors[i] != null) - { - currentEdge = batch.pinActors[i].deformableEdgesOffset + batch.particleIndices[i]; - firstEdge = batch.pinActors[i].deformableEdgesOffset + batch.edgeRanges[i * 2]; - lastEdge = batch.pinActors[i].deformableEdgesOffset + batch.edgeRanges[i * 2 + 1]; - } - - edgeRanges[(m_ActiveConstraintCount + i) * 2] = firstEdge; - edgeRanges[(m_ActiveConstraintCount + i) * 2 + 1] = lastEdge; - particleIndices[m_ActiveConstraintCount + i] = Mathf.Clamp(currentEdge, firstEdge, lastEdge); - colliderIndices[m_ActiveConstraintCount + i] = batch.pinBodies[i] != null ? batch.pinBodies[i].index : -1; - } - - base.Merge(actor, other); - } - } - - public override void AddToSolver(ObiSolver solver) - { - if (solver != null && solver.implementation != null) - { - m_BatchImpl = solver.implementation.CreateConstraintsBatch(constraintType) as IPinholeConstraintsBatchImpl; - - if (m_BatchImpl != null) - m_BatchImpl.SetPinholeConstraints(particleIndices, colliderIndices, offsets, edgeMus, edgeRanges, edgeRangeMus, parameters, relativeVelocities, lambdas, m_ActiveConstraintCount); - } - } - - public override void RemoveFromSolver(ObiSolver solver) - { - base.RemoveFromSolver(solver); - - edgeRanges.Dispose(); - colliderIndices.Dispose(); - offsets.Dispose(); - parameters.Dispose(); - - if (solver != null && solver.implementation != null) - solver.implementation.DestroyConstraintsBatch(m_BatchImpl as IConstraintsBatchImpl); - } - - } -} diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinholeConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinholeConstraintsBatch.cs.meta deleted file mode 100644 index a225abd0c..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiPinholeConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d642dbf4a869c4761b38ce3f65e22f05 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiShapeMatchingConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiShapeMatchingConstraintsBatch.cs deleted file mode 100644 index 4c87bc322..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiShapeMatchingConstraintsBatch.cs +++ /dev/null @@ -1,235 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiShapeMatchingConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiShapeMatchingConstraintsBatch.cs.meta deleted file mode 100644 index 4c7f8f602..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiShapeMatchingConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7b626d541fade4c159a4373343c8f0bd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: a2686776a1c104bfd8868f056a5cd335, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiSkinConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiSkinConstraintsBatch.cs deleted file mode 100644 index f7b738cf1..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiSkinConstraintsBatch.cs +++ /dev/null @@ -1,146 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiSkinConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiSkinConstraintsBatch.cs.meta deleted file mode 100644 index bd0be6678..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiSkinConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a7643c39396894308b222447b842c2b5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: e58e2a3c37c7547a8a791a56e0a1ace6, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiStretchShearConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiStretchShearConstraintsBatch.cs deleted file mode 100644 index cce356d4b..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiStretchShearConstraintsBatch.cs +++ /dev/null @@ -1,156 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiStretchShearConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiStretchShearConstraintsBatch.cs.meta deleted file mode 100644 index ea17106be..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiStretchShearConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 915edc2d24cba477e8a942210f7ea8a0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: b3583331769a946aab1e4c59859547b2, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiTetherConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiTetherConstraintsBatch.cs deleted file mode 100644 index 313e6ecaa..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiTetherConstraintsBatch.cs +++ /dev/null @@ -1,156 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiTetherConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiTetherConstraintsBatch.cs.meta deleted file mode 100644 index ebed69f8e..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiTetherConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6cf16f1dcc0c34dbd816110ce4b29ed9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 45a4a839cd07d49f698be261ce71ee3c, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiVolumeConstraintsBatch.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiVolumeConstraintsBatch.cs deleted file mode 100644 index 882f1a77d..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiVolumeConstraintsBatch.cs +++ /dev/null @@ -1,147 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiVolumeConstraintsBatch.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiVolumeConstraintsBatch.cs.meta deleted file mode 100644 index cd298e6eb..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Batches/ObiVolumeConstraintsBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 38adc52900fa64209829b6db86f4fd40 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: d9d3ddf824bd449e5b405439ee034b12, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups.meta deleted file mode 100644 index 9c61b7fc0..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a4c68760109fb4c9a9fe6cd000123940 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiAerodynamicConstraintsData.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiAerodynamicConstraintsData.cs deleted file mode 100644 index 96657c004..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiAerodynamicConstraintsData.cs +++ /dev/null @@ -1,28 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiAerodynamicConstraintsData.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiAerodynamicConstraintsData.cs.meta deleted file mode 100644 index 98ac57b33..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiAerodynamicConstraintsData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f82b39fc2deaa46d9bbec616c2e7aaf5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendConstraintsData.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendConstraintsData.cs deleted file mode 100644 index dfed54a54..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendConstraintsData.cs +++ /dev/null @@ -1,49 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendConstraintsData.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendConstraintsData.cs.meta deleted file mode 100644 index 02b7052bf..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendConstraintsData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b1c1bcd52cdf746fc8f62059ba5bb9e9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendTwistConstraintsData.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendTwistConstraintsData.cs deleted file mode 100644 index 36d4709c7..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendTwistConstraintsData.cs +++ /dev/null @@ -1,28 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendTwistConstraintsData.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendTwistConstraintsData.cs.meta deleted file mode 100644 index eb547ee14..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiBendTwistConstraintsData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e2e8e3c3251694dcfbb9aabbd5ed1a4a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiChainConstraintsData.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiChainConstraintsData.cs deleted file mode 100644 index 7a09a7ba7..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiChainConstraintsData.cs +++ /dev/null @@ -1,32 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiChainConstraintsData.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiChainConstraintsData.cs.meta deleted file mode 100644 index 75868c484..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiChainConstraintsData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 33365683dad7c4ad395bce89c5381081 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiDistanceConstraintsData.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiDistanceConstraintsData.cs deleted file mode 100644 index 11f175d9c..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiDistanceConstraintsData.cs +++ /dev/null @@ -1,43 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiDistanceConstraintsData.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiDistanceConstraintsData.cs.meta deleted file mode 100644 index a5723c0c7..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiDistanceConstraintsData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 782174d96bf484b98b0dbb103eeb2d1c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinConstraintsData.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinConstraintsData.cs deleted file mode 100644 index 0b1201a64..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinConstraintsData.cs +++ /dev/null @@ -1,16 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinConstraintsData.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinConstraintsData.cs.meta deleted file mode 100644 index 593e47902..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinConstraintsData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b7a2147b44dc24d59a5b57314325ae6c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinholeConstraintsData.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinholeConstraintsData.cs deleted file mode 100644 index 522ff740f..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinholeConstraintsData.cs +++ /dev/null @@ -1,16 +0,0 @@ -using UnityEngine; -using System.Collections; -using System; - -namespace Obi -{ - [Serializable] - public class ObiPinholeConstraintsData : ObiConstraints - { - - public override ObiPinholeConstraintsBatch CreateBatch(ObiPinholeConstraintsBatch source = null) - { - return new ObiPinholeConstraintsBatch(); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinholeConstraintsData.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinholeConstraintsData.cs.meta deleted file mode 100644 index 8df74c63a..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiPinholeConstraintsData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: caeaf013c17424e0884d22017414ee1c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiShapeMatchingConstraintsData.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiShapeMatchingConstraintsData.cs deleted file mode 100644 index 69e4f3ec2..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiShapeMatchingConstraintsData.cs +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiShapeMatchingConstraintsData.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiShapeMatchingConstraintsData.cs.meta deleted file mode 100644 index 9476adec7..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiShapeMatchingConstraintsData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0d275158a9006411cb1a69f84653efcb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiSkinConstraintsData.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiSkinConstraintsData.cs deleted file mode 100644 index 4beddc7b9..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiSkinConstraintsData.cs +++ /dev/null @@ -1,26 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiSkinConstraintsData.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiSkinConstraintsData.cs.meta deleted file mode 100644 index 45d605e9e..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiSkinConstraintsData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0bb567aa0489c4b38bf7e6f9b43d953f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiStretchShearConstraintsData.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiStretchShearConstraintsData.cs deleted file mode 100644 index 54db995bf..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiStretchShearConstraintsData.cs +++ /dev/null @@ -1,28 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiStretchShearConstraintsData.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiStretchShearConstraintsData.cs.meta deleted file mode 100644 index 825e8e613..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiStretchShearConstraintsData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f8ae3ab8eafd74991858032375e5444f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiTetherConstraintsData.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiTetherConstraintsData.cs deleted file mode 100644 index a0269d984..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiTetherConstraintsData.cs +++ /dev/null @@ -1,38 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiTetherConstraintsData.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiTetherConstraintsData.cs.meta deleted file mode 100644 index 7e7cbcbed..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiTetherConstraintsData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 10997226d34c34554a17c69f27627e5d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiVolumeConstraintsData.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiVolumeConstraintsData.cs deleted file mode 100644 index 3b76209bd..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiVolumeConstraintsData.cs +++ /dev/null @@ -1,37 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiVolumeConstraintsData.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiVolumeConstraintsData.cs.meta deleted file mode 100644 index 559f0d834..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/Groups/ObiVolumeConstraintsData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 55945e863f03047c18b48088708c2935 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/ObiConstraints.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/ObiConstraints.cs deleted file mode 100644 index b8810adc6..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/ObiConstraints.cs +++ /dev/null @@ -1,178 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/ObiConstraints.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/ObiConstraints.cs.meta deleted file mode 100644 index 53ddd38c4..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/ObiConstraints.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ef958cf590b69495999edd2bbdd290f7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/Constraints/StructuralConstraint.cs b/Assets/Obi/Scripts/Common/Blueprints/Constraints/StructuralConstraint.cs deleted file mode 100644 index 927e99ac0..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/StructuralConstraint.cs +++ /dev/null @@ -1,37 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/Constraints/StructuralConstraint.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/Constraints/StructuralConstraint.cs.meta deleted file mode 100644 index 0d46eb5e3..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/Constraints/StructuralConstraint.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 553bc976d8dc04e3fa4a38926a713231 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/GraphColoring.cs b/Assets/Obi/Scripts/Common/Blueprints/GraphColoring.cs deleted file mode 100644 index 3101bf7be..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/GraphColoring.cs +++ /dev/null @@ -1 +0,0 @@ -using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Obi { /** * General greedy graph coloring algorithm for constraints. Input: * - List of particle indices used by all constraints. * - List of per-constraint offsets of the first constrained particle in the previous array, with the total amount of particle indices in the last position. * * The output is a color for each constraint. Constraints of the same color are guaranteed to not share any partices. */ public class GraphColoring { private List m_ParticleIndices; private List m_ConstraintIndices; private List> m_ConstraintsPerParticle; public IReadOnlyList particleIndices => m_ParticleIndices.AsReadOnly(); public IReadOnlyList constraintIndices => m_ConstraintIndices.AsReadOnly(); public GraphColoring(int particleCount = 0) { m_ParticleIndices = new List(); m_ConstraintIndices = new List(); m_ConstraintsPerParticle = new List>(particleCount); for (int i = 0; i < particleCount; ++i) m_ConstraintsPerParticle.Add(new List()); } public void Clear() { m_ParticleIndices.Clear(); m_ConstraintIndices.Clear(); for (int i = 0; i < m_ConstraintsPerParticle.Count; ++i) m_ConstraintsPerParticle[i].Clear(); } public void AddConstraint(int[] particles) { for (int i = 0; i < particles.Length; ++i) { while (particles[i] >= m_ConstraintsPerParticle.Count) m_ConstraintsPerParticle.Add(new List()); m_ConstraintsPerParticle[particles[i]].Add(m_ConstraintIndices.Count); } m_ConstraintIndices.Add(m_ParticleIndices.Count); m_ParticleIndices.AddRange(particles); } public IEnumerator Colorize(string progressDescription, List colors) { m_ConstraintIndices.Add(m_ParticleIndices.Count); int constraintCount = Mathf.Max(0, m_ConstraintIndices.Count - 1); colors.Clear(); if (constraintCount == 0) yield break; colors.Capacity = constraintCount; bool[] availability = new bool[constraintCount]; for (int i = 0; i < constraintCount; ++i) { colors.Add(-1); availability[i] = true; } // For each constraint: for (int i = 0; i < constraintCount; ++i) { // iterate over its particles: for (int j = m_ConstraintIndices[i]; j < m_ConstraintIndices[i + 1]; ++j) { // for each particle, get constraints affecting it: foreach (int k in m_ConstraintsPerParticle[m_ParticleIndices[j]]) { // skip ourselves: if (i == k) continue; // both constraints share a particle so mark the neighbour color as unavailable: if (colors[k] >= 0) availability[colors[k]] = false; } } // Assign the first available color: for (colors[i] = 0; colors[i] < constraintCount; ++colors[i]) if (availability[colors[i]]) break; // Reset availability flags: for (int j = 0; j < constraintCount; ++j) availability[j] = true; if (i % 250 == 0) yield return new CoroutineJob.ProgressInfo(progressDescription, i / (float)constraintCount); } } } } \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Blueprints/GraphColoring.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/GraphColoring.cs.meta deleted file mode 100644 index ff8811308..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/GraphColoring.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9fd5c54becb84484b9b524f897fa9f23 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/ObiActorBlueprint.cs b/Assets/Obi/Scripts/Common/Blueprints/ObiActorBlueprint.cs deleted file mode 100644 index a4ba94fdb..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/ObiActorBlueprint.cs +++ /dev/null @@ -1,706 +0,0 @@ -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 Vector4[] restNormals = null; /**< Particle local-space normal in xyz, SDF in w. Used for softbody collisions.*/ - - [HideInInspector] public Quaternion[] orientations = null; /**< Particle orientations.*/ - [HideInInspector] public Quaternion[] restOrientations = null; /**< Particle rest orientations.*/ - - [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); - restNormals.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; - restNormals = 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/Assets/Obi/Scripts/Common/Blueprints/ObiActorBlueprint.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/ObiActorBlueprint.cs.meta deleted file mode 100644 index 599d5ac93..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/ObiActorBlueprint.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e041cee7fba0844ba933278f278090ce -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: d0123218ec6144d0983c099fc7339924, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/ObiMeshBasedActorBlueprint.cs b/Assets/Obi/Scripts/Common/Blueprints/ObiMeshBasedActorBlueprint.cs deleted file mode 100644 index cd4792baf..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/ObiMeshBasedActorBlueprint.cs +++ /dev/null @@ -1,13 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/ObiMeshBasedActorBlueprint.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/ObiMeshBasedActorBlueprint.cs.meta deleted file mode 100644 index 1f175fe2e..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/ObiMeshBasedActorBlueprint.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5a20734f05b7e41d89888f99cc0e88f2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Blueprints/ObiParticleGroup.cs b/Assets/Obi/Scripts/Common/Blueprints/ObiParticleGroup.cs deleted file mode 100644 index 2f6bf501c..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/ObiParticleGroup.cs +++ /dev/null @@ -1,35 +0,0 @@ -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/Assets/Obi/Scripts/Common/Blueprints/ObiParticleGroup.cs.meta b/Assets/Obi/Scripts/Common/Blueprints/ObiParticleGroup.cs.meta deleted file mode 100644 index c7293e092..000000000 --- a/Assets/Obi/Scripts/Common/Blueprints/ObiParticleGroup.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 775ad4994fda946d1a5936c7e2dfc785 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions.meta b/Assets/Obi/Scripts/Common/Collisions.meta deleted file mode 100644 index f69d80900..000000000 --- a/Assets/Obi/Scripts/Common/Collisions.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 0507b097be2324070b9912008b71a4a8 -folderAsset: yes -timeCreated: 1448942565 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers.meta b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers.meta deleted file mode 100644 index 8f55bd387..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 16e8693eb314d42888bd5a08daebe03a -folderAsset: yes -timeCreated: 1501157275 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D.meta b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D.meta deleted file mode 100644 index 98f5ed000..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: e56c9feb62e6b4f9ea6517ebb106419b -folderAsset: yes -timeCreated: 1503483313 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiBoxShapeTracker2D.cs b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiBoxShapeTracker2D.cs deleted file mode 100644 index 23fc16994..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiBoxShapeTracker2D.cs +++ /dev/null @@ -1,48 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiBoxShapeTracker2D.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiBoxShapeTracker2D.cs.meta deleted file mode 100644 index 90d91f6c4..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiBoxShapeTracker2D.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: e3701e56c1528404daa61e704345b750 -timeCreated: 1501960568 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCapsuleShapeTracker2D.cs b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCapsuleShapeTracker2D.cs deleted file mode 100644 index 96c23dd86..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCapsuleShapeTracker2D.cs +++ /dev/null @@ -1,53 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCapsuleShapeTracker2D.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCapsuleShapeTracker2D.cs.meta deleted file mode 100644 index 9e5005722..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCapsuleShapeTracker2D.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: fe1cd08d83cfe4785b8d5bb8e0bd3dd9 -timeCreated: 1501961541 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCircleShapeTracker2D.cs b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCircleShapeTracker2D.cs deleted file mode 100644 index c2e702c7d..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCircleShapeTracker2D.cs +++ /dev/null @@ -1,52 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCircleShapeTracker2D.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCircleShapeTracker2D.cs.meta deleted file mode 100644 index e2c7b7f36..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiCircleShapeTracker2D.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 4290734bafa8c46d8862202365a9f83b -timeCreated: 1501960324 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiEdgeShapeTracker2D.cs b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiEdgeShapeTracker2D.cs deleted file mode 100644 index e303037db..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiEdgeShapeTracker2D.cs +++ /dev/null @@ -1,72 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiEdgeShapeTracker2D.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiEdgeShapeTracker2D.cs.meta deleted file mode 100644 index 07524ca77..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers2D/ObiEdgeShapeTracker2D.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 2d2b0912e5ba74985bb209d365e52f4b -timeCreated: 1502808634 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D.meta b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D.meta deleted file mode 100644 index 859897cc2..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 3eba36295266249e08782d3327db66cd -folderAsset: yes -timeCreated: 1503483325 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiBoxShapeTracker.cs b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiBoxShapeTracker.cs deleted file mode 100644 index db6c08ae4..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiBoxShapeTracker.cs +++ /dev/null @@ -1,51 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiBoxShapeTracker.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiBoxShapeTracker.cs.meta deleted file mode 100644 index 9e3ef16f6..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiBoxShapeTracker.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 7f9acb590fcdd47838d4e1929e463712 -timeCreated: 1501960568 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCapsuleShapeTracker.cs b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCapsuleShapeTracker.cs deleted file mode 100644 index 252e13694..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCapsuleShapeTracker.cs +++ /dev/null @@ -1,49 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCapsuleShapeTracker.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCapsuleShapeTracker.cs.meta deleted file mode 100644 index 488258d09..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCapsuleShapeTracker.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ab81f697ad33c47c0b487129c7ef1761 -timeCreated: 1501961541 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCharacterControllerShapeTracker.cs b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCharacterControllerShapeTracker.cs deleted file mode 100644 index d53e98095..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCharacterControllerShapeTracker.cs +++ /dev/null @@ -1,52 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCharacterControllerShapeTracker.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCharacterControllerShapeTracker.cs.meta deleted file mode 100644 index ccbb3adbb..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiCharacterControllerShapeTracker.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3c77ed89a210345ce9e9e549d11263db -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiDistanceFieldShapeTracker.cs b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiDistanceFieldShapeTracker.cs deleted file mode 100644 index 4f36a755b..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiDistanceFieldShapeTracker.cs +++ /dev/null @@ -1,88 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiDistanceFieldShapeTracker.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiDistanceFieldShapeTracker.cs.meta deleted file mode 100644 index 71b25fc82..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiDistanceFieldShapeTracker.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b9b443b752c21400ca6cfc151526f107 -timeCreated: 1504879085 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiMeshShapeTracker.cs b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiMeshShapeTracker.cs deleted file mode 100644 index d9bb7dfc1..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiMeshShapeTracker.cs +++ /dev/null @@ -1,91 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiMeshShapeTracker.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiMeshShapeTracker.cs.meta deleted file mode 100644 index f7911fbb5..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiMeshShapeTracker.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: c955001531e3444fd9615a5272954dea -timeCreated: 1502875710 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiShapeTracker.cs b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiShapeTracker.cs deleted file mode 100644 index 69bd4ba41..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiShapeTracker.cs +++ /dev/null @@ -1,20 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiShapeTracker.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiShapeTracker.cs.meta deleted file mode 100644 index 749c718f6..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiShapeTracker.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 5f455a735ac894ee7bddecd2b5a64ca8 -timeCreated: 1501960324 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiSphereShapeTracker.cs b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiSphereShapeTracker.cs deleted file mode 100644 index 3c1f59df1..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiSphereShapeTracker.cs +++ /dev/null @@ -1,50 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiSphereShapeTracker.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiSphereShapeTracker.cs.meta deleted file mode 100644 index 946853609..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiSphereShapeTracker.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 221c651500acc4cbfa30ed329aebb822 -timeCreated: 1501960324 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiTerrainShapeTracker.cs b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiTerrainShapeTracker.cs deleted file mode 100644 index 69619683f..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiTerrainShapeTracker.cs +++ /dev/null @@ -1,75 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiTerrainShapeTracker.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiTerrainShapeTracker.cs.meta deleted file mode 100644 index 21b385e35..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ColliderTrackers/Trackers3D/ObiTerrainShapeTracker.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 601187ba897f54e20b787637df64e96b -timeCreated: 1502808634 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ObiCollider.cs b/Assets/Obi/Scripts/Common/Collisions/ObiCollider.cs deleted file mode 100644 index 71ad68ae9..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiCollider.cs +++ /dev/null @@ -1,117 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ObiCollider.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ObiCollider.cs.meta deleted file mode 100644 index 430e54775..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiCollider.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6757b231cedd544c583ef8aeaf773b2a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 6da22d6bce08a4f3d86542bb903de689, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ObiCollider2D.cs b/Assets/Obi/Scripts/Common/Collisions/ObiCollider2D.cs deleted file mode 100644 index 2ebcd494f..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiCollider2D.cs +++ /dev/null @@ -1,82 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ObiCollider2D.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ObiCollider2D.cs.meta deleted file mode 100644 index 06928c2a9..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiCollider2D.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ObiColliderBase.cs b/Assets/Obi/Scripts/Common/Collisions/ObiColliderBase.cs deleted file mode 100644 index 76471cf39..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiColliderBase.cs +++ /dev/null @@ -1,228 +0,0 @@ -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; - ForceUpdate(); - } - } - get { return material; } - } - - public int Filter - { - set - { - if (filter != value) - { - filter = value; - ForceUpdate(); - } - } - get { return filter; } - } - - public float Thickness - { - set - { - if (!Mathf.Approximately(thickness, value)) - { - thickness = value; - ForceUpdate(); - } - } - get { return thickness; } - } - - public bool Inverted - { - set - { - if (inverted != value) - { - inverted = value; - ForceUpdate(); - } - } - 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 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; - } - } - - /** - * Flags the collider as needing to be updated from now on. If the object it's on has any editor static flag enabled, - * the collider will be again flagged as *not* needing to be updated after its next update. - */ - public void ForceUpdate() - { - ObiColliderWorld.GetInstance().MarkColliderAsNeedingUpdate(shapeHandle); - } - - /** - * Check if the collider transform or its shape have changed any relevant property, and update their Oni counterparts. - */ - 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(); - } - - // check isStatic, *after* updating the tracker at least once. - if (unityCollider.gameObject.isStatic) - ObiColliderWorld.GetInstance().MarkColliderAsNotNeedingUpdate(shapeHandle); - } - // If the unity collider is null but its handle is valid, the unity collider has been destroyed. - else if (shapeHandle != null && shapeHandle.isValid) - RemoveCollider(); - } - - private void OnEnable() - { - // Initialize using the source collider specified by the user (or find an appropiate one). - FindSourceCollider(); - } - - private void OnDisable() - { - RemoveCollider(); - } - - } -} - diff --git a/Assets/Obi/Scripts/Common/Collisions/ObiColliderBase.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ObiColliderBase.cs.meta deleted file mode 100644 index 7bc649a2f..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiColliderBase.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 5a055da07c6fe4debad9680a4b251f7a -timeCreated: 1503477796 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs b/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs deleted file mode 100644 index 0adbb9551..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs +++ /dev/null @@ -1,704 +0,0 @@ -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; - - public int collidersToUpdateCount { private set; get; } = 0; // amount of colliders that need to be updated. These are always grouped at the start of the collider arrays (handles, shapes, etc). - - private bool dirty = false; - - private static ObiColliderWorld instance; - - public static ObiColliderWorld GetInstance() - { - 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() - { - dirty = 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 is no data and no implementations, the world gets destroyed. - // don't check materialHandles.Count == 0, as these are scriptable objects and may outlive the world. - if (colliderHandles.Count == 0 && - rigidbodyHandles.Count == 0 && - forceZoneHandles.Count == 0 && - implementations.Count == 0) - - Destroy(); - } - - 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; - - // invalidate our handle: - // (after updating the swapped one! - // in case there's just one handle in the array, - // we need to write -1 after 0) - handle.Invalidate(); - - // remove last index: - colliderHandles.RemoveAt(lastIndex); - colliderShapes.count--; - colliderAabbs.count--; - colliderTransforms.count--; - - // force all colliders to update next frame, as the index of the data they reference - // (eg the mesh in a MeshCollider) may have changed as a result of deleting this collider's data. - collidersToUpdateCount = colliderHandles.Count; - - DestroyIfUnused(); - } - } - - private void DestroyForceZoneData(ObiForceZoneHandle handle) - { - if (forceZones != null && handle != null && handle.isValid && handle.index < forceZoneHandles.Count) - { - int index = handle.index; - int lastIndex = forceZoneHandles.Count - 1; - - // swap all force zone info: - forceZoneHandles.Swap(index, lastIndex); - forceZones.Swap(index, lastIndex); - - // update the index of the handle we swapped with: - forceZoneHandles[index].index = index; - - // invalidate our handle: - // (after updating the swapped one! - // in case there's just one handle in the array, - // we need to write -1 after 0) - handle.Invalidate(); - - // remove last index: - forceZoneHandles.RemoveAt(lastIndex); - forceZones.count--; - - DestroyIfUnused(); - } - } - - private void DestroyRigidbodyData(ObiRigidbodyHandle handle) - { - if (rigidbodies != null && handle != null && handle.isValid && handle.index < rigidbodyHandles.Count) - { - int index = handle.index; - int lastIndex = rigidbodyHandles.Count - 1; - - // swap all collider info: - rigidbodyHandles.Swap(index, lastIndex); - rigidbodies.Swap(index, lastIndex); - - // update the index of the handle we swapped with: - rigidbodyHandles[index].index = index; - - // invalidate our handle: - // (after updating the swapped one! - // in case there's just one handle in the array, - // we need to write -1 after 0) - handle.Invalidate(); - - // remove last index: - rigidbodyHandles.RemoveAt(lastIndex); - rigidbodies.count--; - - DestroyIfUnused(); - } - - } - - private void CreateColliderData(ObiColliderHandle handle) - { - handle.index = colliderHandles.Count; - colliderHandles.Add(handle); - colliderShapes.Add(new ColliderShape { materialIndex = -1, rigidbodyIndex = -1, dataIndex = -1 }); - colliderAabbs.Add(new Aabb()); - colliderTransforms.Add(new AffineTransform()); - - MarkColliderAsNeedingUpdate(handle); - } - - private void CreateForceZoneData(ObiForceZoneHandle handle) - { - handle.index = forceZoneHandles.Count; - forceZoneHandles.Add(handle); - forceZones.Add(new ForceZone()); - } - - private void CreateRigidbodyData(ObiRigidbodyHandle handle) - { - handle.index = rigidbodyHandles.Count; - rigidbodyHandles.Add(handle); - rigidbodies.Add(new ColliderRigidbody()); - } - - public bool DoesColliderRequireToBeUpdated(ObiColliderHandle handle) - { - if (handle != null && handle.isValid && - handle.index < colliderHandles.Count && handle.index < collidersToUpdateCount) - return true; - return false; - } - - public void MarkColliderAsNeedingUpdate(ObiColliderHandle handle) - { - if (colliderShapes != null && handle != null && handle.isValid && - handle.index < colliderHandles.Count && handle.index >= collidersToUpdateCount && - collidersToUpdateCount < colliderHandles.Count) - { - int index = handle.index; - int lastIndex = collidersToUpdateCount; - - // swap all collider info: - colliderHandles.Swap(index, lastIndex); - colliderShapes.Swap(index, lastIndex); - colliderAabbs.Swap(index, lastIndex); - colliderTransforms.Swap(index, lastIndex); - - // update handles: - colliderHandles[lastIndex].index = lastIndex; - colliderHandles[index].index = index; - - collidersToUpdateCount++; - } - } - - public void MarkColliderAsNotNeedingUpdate(ObiColliderHandle handle) - { - if (colliderShapes != null && handle != null && handle.isValid && - handle.index < colliderHandles.Count && handle.index < collidersToUpdateCount) - { - int index = handle.index; - int lastIndex = collidersToUpdateCount-1; - - // swap all collider info: - colliderHandles.Swap(index, lastIndex); - colliderShapes.Swap(index, lastIndex); - colliderAabbs.Swap(index, lastIndex); - colliderTransforms.Swap(index, lastIndex); - - // update handles: - colliderHandles[lastIndex].index = lastIndex; - colliderHandles[index].index = index; - - collidersToUpdateCount--; - } - } - - public void FlushHandleBuffers() - { - // First process destruction, then process creation. - // In case we create a handle and then destroy it, - // we should enqueue it for destruction only if it's not in the creation queue. - // If it is, just remove if from the creation queue. - - if (collidersToDestroy != null) - { - foreach (var handle in collidersToDestroy) - DestroyColliderData(handle); - collidersToDestroy?.Clear(); - } - - if (forceZonesToDestroy != null) - { - foreach (var handle in forceZonesToDestroy) - DestroyForceZoneData(handle); - forceZonesToDestroy?.Clear(); - } - - if (rigidbodiesToDestroy != null) - { - foreach (var handle in rigidbodiesToDestroy) - DestroyRigidbodyData(handle); - rigidbodiesToDestroy?.Clear(); - } - - if (collidersToCreate != null) - { - foreach (var handle in collidersToCreate) - CreateColliderData(handle); - collidersToCreate?.Clear(); - } - - if (forceZonesToCreate != null) - { - foreach (var handle in forceZonesToCreate) - CreateForceZoneData(handle); - forceZonesToCreate?.Clear(); - } - - if (rigidbodiesToCreate != null) - { - foreach (var handle in rigidbodiesToCreate) - CreateRigidbodyData(handle); - rigidbodiesToCreate?.Clear(); - } - - } - - public void UpdateWorld(float deltaTime, bool updateDynamics = true) - { - if (!dirty) - return; - - dirty = false; - - // ensure all objects have valid handles. - // May destroy the world if it's empty, - // so we next check that handle/implementations are not null. - FlushHandleBuffers(); - - // update all colliders: - if (colliderHandles != null) - for (int i = 0; i < collidersToUpdateCount; ++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 && updateDynamics) - for (int i = 0; i < rigidbodyHandles.Count; ++i) - rigidbodyHandles[i].owner.UpdateIfNeeded(deltaTime); - - // update implementations: - if (implementations != null) - for (int i = 0; i < implementations.Count; ++i) - { - 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: - if (updateDynamics) - implementations[i].UpdateWorld(deltaTime); - } - } - } - - public void SetDirty() - { - dirty = true; - } - - public void UpdateCollisionMaterials() - { - if (implementations != null) - for (int i = 0; i < implementations.Count; ++i) - { - if (implementations[i].referenceCount > 0) - { - implementations[i].SetCollisionMaterials(collisionMaterials); - } - } - } - - public void UpdateRigidbodyVelocities(ObiSolver solver) - { - if (solver != null && solver.initialized) - { - int count = Mathf.Min(rigidbodyHandles.Count, solver.rigidbodyLinearDeltas.count); - - for (int i = 0; i < count; ++i) - rigidbodyHandles[i].owner.UpdateVelocities(solver.rigidbodyLinearDeltas[i], solver.rigidbodyAngularDeltas[i]); - } - - solver.rigidbodyLinearDeltas.WipeToZero(); - solver.rigidbodyAngularDeltas.WipeToZero(); - solver.rigidbodyLinearDeltas.Upload(); - solver.rigidbodyAngularDeltas.Upload(); - } - - } -} diff --git a/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.meta deleted file mode 100644 index e2753233a..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 72e79cbbc15cc42e1b3e0db8936d18a5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.orig b/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.orig deleted file mode 100644 index 46d5419e8..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.orig +++ /dev/null @@ -1,452 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.orig.meta b/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.orig.meta deleted file mode 100644 index e1c169cde..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiColliderWorld.cs.orig.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 663bb98786e3a46a3b909fa8d01073f2 -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ObiCollisionMaterial.cs b/Assets/Obi/Scripts/Common/Collisions/ObiCollisionMaterial.cs deleted file mode 100644 index 97940be21..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiCollisionMaterial.cs +++ /dev/null @@ -1,80 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ObiCollisionMaterial.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ObiCollisionMaterial.cs.meta deleted file mode 100644 index bf25cb7db..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiCollisionMaterial.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ObiDistanceField.cs b/Assets/Obi/Scripts/Common/Collisions/ObiDistanceField.cs deleted file mode 100644 index 3e5e315cd..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiDistanceField.cs +++ /dev/null @@ -1,129 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ObiDistanceField.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ObiDistanceField.cs.meta deleted file mode 100644 index 9f0681502..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiDistanceField.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ObiDistanceFieldContainer.cs b/Assets/Obi/Scripts/Common/Collisions/ObiDistanceFieldContainer.cs deleted file mode 100644 index 9d6fde096..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiDistanceFieldContainer.cs +++ /dev/null @@ -1,103 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ObiDistanceFieldContainer.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ObiDistanceFieldContainer.cs.meta deleted file mode 100644 index 6d49dbfd5..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiDistanceFieldContainer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e8fb69dfa0ce5432d83da86e05e31e12 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ObiEdgeMeshContainer.cs b/Assets/Obi/Scripts/Common/Collisions/ObiEdgeMeshContainer.cs deleted file mode 100644 index d4bc3e7e5..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiEdgeMeshContainer.cs +++ /dev/null @@ -1,163 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ObiEdgeMeshContainer.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ObiEdgeMeshContainer.cs.meta deleted file mode 100644 index 8e1c4df1b..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiEdgeMeshContainer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 26d97a1797c5d43a69fc77f77c37a3b6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ObiHeightFieldContainer.cs b/Assets/Obi/Scripts/Common/Collisions/ObiHeightFieldContainer.cs deleted file mode 100644 index 75131e753..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiHeightFieldContainer.cs +++ /dev/null @@ -1,114 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ObiHeightFieldContainer.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ObiHeightFieldContainer.cs.meta deleted file mode 100644 index 4a72e5c5c..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiHeightFieldContainer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 144f4377b36f741b3af30c9ff572733f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody.cs b/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody.cs deleted file mode 100644 index 468af6d74..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody.cs +++ /dev/null @@ -1,102 +0,0 @@ -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.linearVelocity; - 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.linearVelocity; - 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. - // Conversely, rigidbodyHandle might be non-null but invalid. - if (unityRigidbody == null || !Handle.isValid) return; - - - CacheVelocities(stepTime); - var world = ObiColliderWorld.GetInstance(); - - var rb = world.rigidbodies[Handle.index]; - 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.linearVelocity += linearDelta; - unityRigidbody.angularVelocity += angularDelta; - } - } - } - } -} - diff --git a/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody.cs.meta deleted file mode 100644 index 7a15a80f6..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody2D.cs b/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody2D.cs deleted file mode 100644 index 5f453fb06..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody2D.cs +++ /dev/null @@ -1,98 +0,0 @@ -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.linearVelocity; - angularVelocity = unityRigidbody.angularVelocity; - } - - private void CacheVelocities(float stepTime) - { - // differentiate positions/orientations to get our own velocites for kinematic objects. - // when calling Physics.Simulate, MovePosition/Rotation do not work correctly. Also useful for animations. - if (unityRigidbody.isKinematic && 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.linearVelocity; - 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.linearVelocity += new Vector2(linearDelta.x, linearDelta.y); - unityRigidbody.angularVelocity += angularDelta[2] * Mathf.Rad2Deg; - } - - } - } -} - diff --git a/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody2D.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody2D.cs.meta deleted file mode 100644 index 8b4dbc1d7..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiRigidbody2D.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ObiRigidbodyBase.cs b/Assets/Obi/Scripts/Common/Collisions/ObiRigidbodyBase.cs deleted file mode 100644 index c08d54b5f..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiRigidbodyBase.cs +++ /dev/null @@ -1,58 +0,0 @@ -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 - { - // don't check rigidbodyHandle.isValid: - // CreateRigidbody may defer creation, so we get a non-null, but invalid handle. - // If calling handle again right away before it becomes valid, it will call CreateRigidbody() again and create a second handle to the same body. - if (rigidbodyHandle == null) - { - var world = ObiColliderWorld.GetInstance(); - - // create the material: - rigidbodyHandle = world.CreateRigidbody(); - rigidbodyHandle.owner = this; - } - return rigidbodyHandle; - } - } - - protected virtual void OnEnable() - { - rigidbodyHandle = ObiColliderWorld.GetInstance().CreateRigidbody(); - rigidbodyHandle.owner = this; - } - - public void OnDisable() - { - ObiColliderWorld.GetInstance().DestroyRigidbody(rigidbodyHandle); - } - - public abstract void UpdateIfNeeded(float stepTime); - - /** - * Reads velocities back from the solver. - */ - public abstract void UpdateVelocities(Vector3 linearDelta, Vector3 angularDelta); - - } -} - diff --git a/Assets/Obi/Scripts/Common/Collisions/ObiRigidbodyBase.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ObiRigidbodyBase.cs.meta deleted file mode 100644 index 0e3cab7cc..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiRigidbodyBase.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 8f0adb129c9cf4d978dc5964711503b8 -timeCreated: 1516131526 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Collisions/ObiTriangleMeshContainer.cs b/Assets/Obi/Scripts/Common/Collisions/ObiTriangleMeshContainer.cs deleted file mode 100644 index 3858bc697..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiTriangleMeshContainer.cs +++ /dev/null @@ -1,171 +0,0 @@ -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/Assets/Obi/Scripts/Common/Collisions/ObiTriangleMeshContainer.cs.meta b/Assets/Obi/Scripts/Common/Collisions/ObiTriangleMeshContainer.cs.meta deleted file mode 100644 index a92add228..000000000 --- a/Assets/Obi/Scripts/Common/Collisions/ObiTriangleMeshContainer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ce6cc2e74afba4793acd378425158828 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures.meta b/Assets/Obi/Scripts/Common/DataStructures.meta deleted file mode 100644 index 2c79eb3bb..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c8768fedc0fc14bb484c2289f4d7b6c9 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/ASDF.meta b/Assets/Obi/Scripts/Common/DataStructures/ASDF.meta deleted file mode 100644 index 2ccf1cd06..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/ASDF.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 645b177bec2c444aaa188661f611418a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/ASDF/ASDF.cs b/Assets/Obi/Scripts/Common/DataStructures/ASDF/ASDF.cs deleted file mode 100644 index 3573506c2..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/ASDF/ASDF.cs +++ /dev/null @@ -1,187 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/ASDF/ASDF.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/ASDF/ASDF.cs.meta deleted file mode 100644 index d51108acd..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/ASDF/ASDF.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6951f2457b77d4daf9f257e128b6dfb2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/ASDF/DFNode.cs b/Assets/Obi/Scripts/Common/DataStructures/ASDF/DFNode.cs deleted file mode 100644 index 31892a9e4..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/ASDF/DFNode.cs +++ /dev/null @@ -1,66 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/ASDF/DFNode.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/ASDF/DFNode.cs.meta deleted file mode 100644 index 17405a2c1..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/ASDF/DFNode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 769e6e9ced39347bc96146f1858ab648 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/Aabb.cs b/Assets/Obi/Scripts/Common/DataStructures/Aabb.cs deleted file mode 100644 index 0ab75766d..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/Aabb.cs +++ /dev/null @@ -1,53 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/Aabb.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/Aabb.cs.meta deleted file mode 100644 index 242d31dd4..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/Aabb.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4b6d58d9b0a8a4f7ea09067526d713cf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/AffineTransform.cs b/Assets/Obi/Scripts/Common/DataStructures/AffineTransform.cs deleted file mode 100644 index e129482e5..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/AffineTransform.cs +++ /dev/null @@ -1,65 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/AffineTransform.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/AffineTransform.cs.meta deleted file mode 100644 index b15e7adca..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/AffineTransform.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0c8eff617709c457a85387e2f72187aa -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/BVH.meta b/Assets/Obi/Scripts/Common/DataStructures/BVH.meta deleted file mode 100644 index 4dd39cc26..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/BVH.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3d141c0731e7c43e8be29d786670298c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/BVH/BIH.cs b/Assets/Obi/Scripts/Common/DataStructures/BVH/BIH.cs deleted file mode 100644 index c770ed386..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/BVH/BIH.cs +++ /dev/null @@ -1,262 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/BVH/BIH.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/BVH/BIH.cs.meta deleted file mode 100644 index 767c410f2..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/BVH/BIH.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7d1727eb52e8f4619a5dc1084db72db0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/BVH/BIHNode.cs b/Assets/Obi/Scripts/Common/DataStructures/BVH/BIHNode.cs deleted file mode 100644 index 0599e5e39..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/BVH/BIHNode.cs +++ /dev/null @@ -1,25 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/BVH/BIHNode.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/BVH/BIHNode.cs.meta deleted file mode 100644 index 618215bc2..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/BVH/BIHNode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 128610647c5e64bc284f13abefda3a58 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/BVH/IBounded.cs b/Assets/Obi/Scripts/Common/DataStructures/BVH/IBounded.cs deleted file mode 100644 index f6cf2b3c1..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/BVH/IBounded.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - public interface IBounded - { - Aabb GetBounds(); - } -} diff --git a/Assets/Obi/Scripts/Common/DataStructures/BVH/IBounded.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/BVH/IBounded.cs.meta deleted file mode 100644 index 376054976..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/BVH/IBounded.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 44a65f44be3e24beca5faaa7d2c28480 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/CellSpan.cs b/Assets/Obi/Scripts/Common/DataStructures/CellSpan.cs deleted file mode 100644 index 12e7453bb..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/CellSpan.cs +++ /dev/null @@ -1,17 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/CellSpan.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/CellSpan.cs.meta deleted file mode 100644 index 4b19c3ac8..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/CellSpan.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 786fc387d096a4921bd52253d3f51b02 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/ColliderRigidbody.cs b/Assets/Obi/Scripts/Common/DataStructures/ColliderRigidbody.cs deleted file mode 100644 index e51423f4a..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/ColliderRigidbody.cs +++ /dev/null @@ -1,68 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/ColliderRigidbody.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/ColliderRigidbody.cs.meta deleted file mode 100644 index ee3318973..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/ColliderRigidbody.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2273ddd528c3a44af9ef3f985a620e24 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/ColliderShape.cs b/Assets/Obi/Scripts/Common/DataStructures/ColliderShape.cs deleted file mode 100644 index f71030e2d..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/ColliderShape.cs +++ /dev/null @@ -1,55 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/ColliderShape.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/ColliderShape.cs.meta deleted file mode 100644 index 9f1dc6e02..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/ColliderShape.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 38d82eae8f8744bdc9f0795c1fd3b317 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/CollisionMaterial.cs b/Assets/Obi/Scripts/Common/DataStructures/CollisionMaterial.cs deleted file mode 100644 index f0c815d5b..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/CollisionMaterial.cs +++ /dev/null @@ -1,35 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/CollisionMaterial.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/CollisionMaterial.cs.meta deleted file mode 100644 index 9653b5b07..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/CollisionMaterial.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ed8262093b9b44e8abb2557ed2624c4d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/ContactEffectiveMasses.cs b/Assets/Obi/Scripts/Common/DataStructures/ContactEffectiveMasses.cs deleted file mode 100644 index 1f3a8d208..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/ContactEffectiveMasses.cs +++ /dev/null @@ -1,93 +0,0 @@ -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) -using Unity.Mathematics; -#endif - -namespace Obi -{ - public struct ContactEffectiveMasses - { - public float normalInvMassA; - public float tangentInvMassA; - public float bitangentInvMassA; - - public float normalInvMassB; - public float tangentInvMassB; - public float bitangentInvMassB; - - public float TotalNormalInvMass => normalInvMassA + normalInvMassB; - public float TotalTangentInvMass => tangentInvMassA + tangentInvMassB; - public float TotalBitangentInvMass => bitangentInvMassA + bitangentInvMassB; - - public void ClearContactMassesA() - { - normalInvMassA = tangentInvMassA = bitangentInvMassA = 0; - } - - public void ClearContactMassesB() - { - normalInvMassB = tangentInvMassB = bitangentInvMassB = 0; - } - - #if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) - public void CalculateContactMassesA(float invMass, - float4 inverseInertiaTensor, - float4 position, - quaternion orientation, - float4 contactPoint, - float4 normal, - float4 tangent, - float4 bitangent, - bool rollingContacts) - { - // initialize inverse linear masses: - normalInvMassA = tangentInvMassA = bitangentInvMassA = invMass; - - if (rollingContacts) - { - float4 rA = contactPoint - position; - float4x4 solverInertiaA = BurstMath.TransformInertiaTensor(inverseInertiaTensor, orientation); - - normalInvMassA += BurstMath.RotationalInvMass(solverInertiaA, rA, normal); - tangentInvMassA += BurstMath.RotationalInvMass(solverInertiaA, rA, tangent); - bitangentInvMassA += BurstMath.RotationalInvMass(solverInertiaA, rA, bitangent); - } - } - - public void CalculateContactMassesB(float invMass, - float4 inverseInertiaTensor, - float4 position, - quaternion orientation, - float4 contactPoint, - float4 normal, - float4 tangent, - float4 bitangent, - bool rollingContacts) - { - // initialize inverse linear masses: - normalInvMassB = tangentInvMassB = bitangentInvMassB = invMass; - - if (rollingContacts) - { - float4 rB = contactPoint - position; - float4x4 solverInertiaB = BurstMath.TransformInertiaTensor(inverseInertiaTensor, orientation); - - normalInvMassB += BurstMath.RotationalInvMass(solverInertiaB, rB, normal); - tangentInvMassB += BurstMath.RotationalInvMass(solverInertiaB, rB, tangent); - bitangentInvMassB += BurstMath.RotationalInvMass(solverInertiaB, rB, bitangent); - } - } - - - public void CalculateContactMassesB(in BurstRigidbody rigidbody, in BurstAffineTransform solver2World, float4 pointB, float4 normal, float4 tangent, float4 bitangent) - { - float4 rB = solver2World.TransformPoint(pointB) - rigidbody.com; - - // initialize inverse linear masses: - normalInvMassB = tangentInvMassB = bitangentInvMassB = rigidbody.inverseMass; - normalInvMassB += BurstMath.RotationalInvMass(rigidbody.inverseInertiaTensor, rB, normal); - tangentInvMassB += BurstMath.RotationalInvMass(rigidbody.inverseInertiaTensor, rB, tangent); - bitangentInvMassB += BurstMath.RotationalInvMass(rigidbody.inverseInertiaTensor, rB, bitangent); - } - #endif - } -} diff --git a/Assets/Obi/Scripts/Common/DataStructures/ContactEffectiveMasses.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/ContactEffectiveMasses.cs.meta deleted file mode 100644 index bf8ca76fc..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/ContactEffectiveMasses.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7b11c7db3414246668eb72ef55dd737f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/EmitPoint.cs b/Assets/Obi/Scripts/Common/DataStructures/EmitPoint.cs deleted file mode 100644 index dfa50f31a..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/EmitPoint.cs +++ /dev/null @@ -1,40 +0,0 @@ -using UnityEngine; -using System; - -namespace Obi -{ - [Serializable] - public struct EmitPoint - { - public Vector4 position; - public Vector4 direction; - public Vector4 velocity; - public Color color; - - public EmitPoint(Vector3 position, Vector3 direction) - { - this.position = position; - this.direction = direction; - this.velocity = Vector4.zero; - this.color = Color.white; - } - - public EmitPoint(Vector3 position, Vector3 direction, Color color) - { - this.position = position; - this.direction = direction; - this.velocity = Vector4.zero; - this.color = color; - } - - public EmitPoint GetTransformed(Matrix4x4 transform, Matrix4x4 prevTransform, Color multiplyColor, float deltaTime) - { - var ep = new EmitPoint(transform.MultiplyPoint3x4(position), - transform.MultiplyVector(direction), - color * multiplyColor); - - ep.velocity = deltaTime > 0 ? ((Vector3)ep.position - prevTransform.MultiplyPoint3x4(position)) / deltaTime : Vector3.zero; - return ep; - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/DataStructures/EmitPoint.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/EmitPoint.cs.meta deleted file mode 100644 index cc9dd0484..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/EmitPoint.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d0c9d9016e8744477adde7f1afe28798 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/EmittedParticleData.cs b/Assets/Obi/Scripts/Common/DataStructures/EmittedParticleData.cs deleted file mode 100644 index 9cf3c3e32..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/EmittedParticleData.cs +++ /dev/null @@ -1,16 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public struct EmittedParticleData - { - public Vector4 fluidMaterial; - public Vector4 fluidMaterial2; - public Vector4 fluidInterface; - public Vector4 userData; - public int phase; - public float invMass; - public float radius; - public float volume; - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/DataStructures/EmittedParticleData.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/EmittedParticleData.cs.meta deleted file mode 100644 index d57c77842..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/EmittedParticleData.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 032673eb10713468fb72d04ad5cc6b26 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/ForceZone.cs b/Assets/Obi/Scripts/Common/DataStructures/ForceZone.cs deleted file mode 100644 index f2bcd63cf..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/ForceZone.cs +++ /dev/null @@ -1,41 +0,0 @@ -using UnityEngine; -using System; - -namespace Obi -{ - [Serializable] - public struct ForceZone - { - public enum ForceMode - { - Force, - Acceleration, - Wind, - } - - public enum ZoneType - { - Directional, - Radial, - Vortex, - Void - } - - public enum DampingDirection - { - All, // damps motion in all directions - ForceDirection, // damps motion in the direction of force. - SurfaceDirection // damps motion toward/away from the surface of the zone. - } - - public Color color; - public ZoneType type; - public ForceMode mode; - public DampingDirection dampingDir; - public float intensity; - public float minDistance; - public float maxDistance; - public float falloffPower; - public float damping; - } -} diff --git a/Assets/Obi/Scripts/Common/DataStructures/ForceZone.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/ForceZone.cs.meta deleted file mode 100644 index f39f401cb..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/ForceZone.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5c189f8dc8ade4e14a960f3b6eb11f14 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/InertialFrame.cs b/Assets/Obi/Scripts/Common/DataStructures/InertialFrame.cs deleted file mode 100644 index 4f2561f92..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/InertialFrame.cs +++ /dev/null @@ -1,56 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public struct InertialFrame - { - public AffineTransform frame; - public AffineTransform prevFrame; - - public Vector4 velocity; - public Vector4 angularVelocity; - - public Vector4 acceleration; - public Vector4 angularAcceleration; - - public InertialFrame(Vector4 position, Vector4 scale, Quaternion rotation) - { - this.frame = new AffineTransform(position, rotation, scale); - this.prevFrame = frame; - - velocity = Vector4.zero; - angularVelocity = Vector4.zero; - acceleration = Vector4.zero; - angularAcceleration = Vector4.zero; - } - - public InertialFrame(AffineTransform frame) - { - this.frame = frame; - this.prevFrame = frame; - - velocity = Vector4.zero; - angularVelocity = Vector4.zero; - acceleration = Vector4.zero; - angularAcceleration = Vector4.zero; - } - - public void Update(Vector4 position, Vector4 scale, Quaternion rotation, float dt) - { - prevFrame = frame; - Vector4 prevVelocity = velocity; - Vector4 prevAngularVelocity = angularVelocity; - - frame.translation = position; - frame.rotation = rotation; - frame.scale = scale; - - velocity = ObiIntegration.DifferentiateLinear(frame.translation, prevFrame.translation, dt); - angularVelocity = ObiIntegration.DifferentiateAngular(frame.rotation, prevFrame.rotation, dt); - - acceleration = ObiIntegration.DifferentiateLinear(velocity, prevVelocity, dt); - angularAcceleration = ObiIntegration.DifferentiateLinear(angularVelocity, prevAngularVelocity, dt); - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/DataStructures/InertialFrame.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/InertialFrame.cs.meta deleted file mode 100644 index 56b8e9239..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/InertialFrame.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7420f38eb63f04112a965d884f75d176 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList.meta deleted file mode 100644 index c9416a7cd..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2f5d490805c6e4ee6b39c067e26e490c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAabbList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAabbList.cs deleted file mode 100644 index 0c699a24c..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAabbList.cs +++ /dev/null @@ -1,18 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAabbList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAabbList.cs.meta deleted file mode 100644 index 398a60417..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAabbList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 96e807cda064c47c1aed643600660143 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAffineTransformList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAffineTransformList.cs deleted file mode 100644 index 466b4f8d2..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAffineTransformList.cs +++ /dev/null @@ -1,18 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAffineTransformList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAffineTransformList.cs.meta deleted file mode 100644 index c5ae9d09e..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeAffineTransformList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8f741a9b23bfd4f55979eb1a18146388 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBIHNodeList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBIHNodeList.cs deleted file mode 100644 index 376276d25..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBIHNodeList.cs +++ /dev/null @@ -1,17 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBIHNodeList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBIHNodeList.cs.meta deleted file mode 100644 index 301def190..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBIHNodeList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c960e0992a4cf4d7195a513c5fd5f550 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBoneWeightList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBoneWeightList.cs deleted file mode 100644 index 83c375513..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBoneWeightList.cs +++ /dev/null @@ -1,18 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBoneWeightList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBoneWeightList.cs.meta deleted file mode 100644 index 36daa8edd..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeBoneWeightList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 50b49a1cc8de340ebb8d6a89fb044c1d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeByteList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeByteList.cs deleted file mode 100644 index 800c3046b..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeByteList.cs +++ /dev/null @@ -1,18 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeByteList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeByteList.cs.meta deleted file mode 100644 index ffe7d6fd4..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeByteList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: aefb86b129c07425fa244ada261f4184 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCellSpanList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCellSpanList.cs deleted file mode 100644 index 468759ceb..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCellSpanList.cs +++ /dev/null @@ -1,18 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCellSpanList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCellSpanList.cs.meta deleted file mode 100644 index f06f2c711..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCellSpanList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 53a29ecfe0ecb4db3a344781b333776d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColliderShapeList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColliderShapeList.cs deleted file mode 100644 index bce8165f1..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColliderShapeList.cs +++ /dev/null @@ -1,18 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColliderShapeList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColliderShapeList.cs.meta deleted file mode 100644 index 22379f03f..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColliderShapeList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 45031e9a1b74143c4a6df44e2b999373 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCollisionMaterialList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCollisionMaterialList.cs deleted file mode 100644 index 0f1a048ae..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCollisionMaterialList.cs +++ /dev/null @@ -1,18 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCollisionMaterialList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCollisionMaterialList.cs.meta deleted file mode 100644 index 1c43e6aea..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeCollisionMaterialList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f6d32cd2f844a48cab0508f798fc1ff4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs deleted file mode 100644 index 94e9cef26..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs +++ /dev/null @@ -1,17 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs.meta deleted file mode 100644 index eb41d0f72..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeColorList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f377d76dadb3945b39cfac818a54d1be -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactList.cs deleted file mode 100644 index 339b196dd..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactList.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - [Serializable] - public class ObiNativeContactList : ObiNativeList - { - public ObiNativeContactList() { } - public ObiNativeContactList(int capacity = 8, int alignment = 16) : base(capacity, alignment) - { - for (int i = 0; i < capacity; ++i) - this[i] = new Oni.Contact(); - } - } -} - diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactList.cs.meta deleted file mode 100644 index 74a33c11c..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeContactList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: aa58238d45b934704aede27415ce4242 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDFNodeList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDFNodeList.cs deleted file mode 100644 index c19ee95fb..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDFNodeList.cs +++ /dev/null @@ -1,18 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDFNodeList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDFNodeList.cs.meta deleted file mode 100644 index 447524703..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDFNodeList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 17462646d532945749479c75ba3cd0d8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDistanceFieldHeaderList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDistanceFieldHeaderList.cs deleted file mode 100644 index a784f7774..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDistanceFieldHeaderList.cs +++ /dev/null @@ -1,17 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDistanceFieldHeaderList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDistanceFieldHeaderList.cs.meta deleted file mode 100644 index 198e874f0..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeDistanceFieldHeaderList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1e18334e185814395aac025a1d4afe70 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeList.cs deleted file mode 100644 index 6589654c9..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeList.cs +++ /dev/null @@ -1,17 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeList.cs.meta deleted file mode 100644 index 1d0141367..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0d602b9fba6fc4e78a78b8dee0acd309 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeMeshHeaderList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeMeshHeaderList.cs deleted file mode 100644 index 6055829df..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeMeshHeaderList.cs +++ /dev/null @@ -1,17 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeMeshHeaderList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeMeshHeaderList.cs.meta deleted file mode 100644 index 98f0f3d8e..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEdgeMeshHeaderList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 474a95d0d9d37494f9ac5201e262b8a4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEffectiveMassesList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEffectiveMassesList.cs deleted file mode 100644 index 974f9f32a..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEffectiveMassesList.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - [Serializable] - public class ObiNativeEffectiveMassesList : ObiNativeList - { - public ObiNativeEffectiveMassesList() { } - public ObiNativeEffectiveMassesList(int capacity = 8, int alignment = 16) : base(capacity, alignment) - { - for (int i = 0; i < capacity; ++i) - this[i] = new ContactEffectiveMasses(); - } - } -} - diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEffectiveMassesList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEffectiveMassesList.cs.meta deleted file mode 100644 index 813424cbf..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEffectiveMassesList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fc8b00cd716564eff82fc19de0c458a8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEmitPointList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEmitPointList.cs deleted file mode 100644 index 39abfa12b..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEmitPointList.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; - -namespace Obi -{ - [Serializable] - public class ObiNativeEmitPointList : ObiNativeList - { - public ObiNativeEmitPointList() { } - public ObiNativeEmitPointList(int capacity = 8, int alignment = 16) : base(capacity, alignment) - { - for (int i = 0; i < capacity; ++i) - this[i] = new EmitPoint(); - } - - } -} - diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEmitPointList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEmitPointList.cs.meta deleted file mode 100644 index 13c552e66..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeEmitPointList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3cbd83091221b46c9a724f3275281d2e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeFloatList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeFloatList.cs deleted file mode 100644 index b1c418bf6..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeFloatList.cs +++ /dev/null @@ -1,18 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeFloatList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeFloatList.cs.meta deleted file mode 100644 index 332159d3d..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeFloatList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7cf0e80d841ca4425a99bc2d4beb3547 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeForceZoneList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeForceZoneList.cs deleted file mode 100644 index 442146f1d..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeForceZoneList.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - [Serializable] - public class ObiNativeForceZoneList : ObiNativeList - { - public ObiNativeForceZoneList() { } - public ObiNativeForceZoneList(int capacity = 8, int alignment = 16) : base(capacity, alignment) - { - for (int i = 0; i < capacity; ++i) - this[i] = new ForceZone(); - } - - } -} - diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeForceZoneList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeForceZoneList.cs.meta deleted file mode 100644 index 65b36912d..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeForceZoneList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2815feee105f648149e0f5b1b22954bf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeHeightFieldHeaderList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeHeightFieldHeaderList.cs deleted file mode 100644 index 1baeff23b..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeHeightFieldHeaderList.cs +++ /dev/null @@ -1,18 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeHeightFieldHeaderList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeHeightFieldHeaderList.cs.meta deleted file mode 100644 index 412b35ad4..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeHeightFieldHeaderList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 61e8d2ecda37e442aa8f24756395f12a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeInt4List.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeInt4List.cs deleted file mode 100644 index 81d9d0692..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeInt4List.cs +++ /dev/null @@ -1,22 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeInt4List.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeInt4List.cs.meta deleted file mode 100644 index 1a032a3fb..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeInt4List.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 18f572cdc044a4caabe29c40944c0987 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntList.cs deleted file mode 100644 index 63bf45700..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntList.cs +++ /dev/null @@ -1,17 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntList.cs.meta deleted file mode 100644 index be2264626..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0f8a8fd8447dc458bab16dea3dfd5580 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntPtrList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntPtrList.cs deleted file mode 100644 index 6ac489c10..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntPtrList.cs +++ /dev/null @@ -1,16 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntPtrList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntPtrList.cs.meta deleted file mode 100644 index 4d49d8b6d..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeIntPtrList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6201c3f1582cd43deaaf41286f802126 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeList.cs deleted file mode 100644 index 24b4ce45e..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeList.cs +++ /dev/null @@ -1,708 +0,0 @@ -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); - - if (m_ComputeBuffer != null && m_ComputeBuffer.IsValid() && m_ComputeBufferType == GraphicsBuffer.Target.Counter) - m_ComputeBuffer.SetCounterValue((uint)m_Count); - } - } - 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) - { - var nativeArray = AsNativeArray(readcount); - - // When using SafeAsComputeBuffer, we'll get a compute buffer of size 1 even if the list (and the NativeArray) is empty. - // Guard against trying to readback into a smaller NativeArray. Also guard against requesting zero items. - if (nativeArray.Length >= readcount && readcount > 0) - m_AsyncRequest = AsyncGPUReadback.RequestIntoNativeArray(ref nativeArray, m_ComputeBuffer, readcount * UnsafeUtility.SizeOf(), 0); - - // For counter buffers, request the counter value too: - if (m_ComputeBufferType == GraphicsBuffer.Target.Counter) - { - GraphicsBuffer.CopyCount(m_ComputeBuffer, m_CountBuffer, 0); - m_CounterAsyncRequest = AsyncGPUReadback.Request(m_CountBuffer, m_CountBuffer.stride, 0, (AsyncGPUReadbackRequest request)=> - { - if (!request.hasError) - m_Count = Mathf.Min(m_Capacity, request.GetData()[0]); - }); - } - - if (!async) - WaitForReadback(); - } - } - - public void Readback(bool async = true) - { - // On counter buffers, we shouldn't read data up to m_Count and then update m_Count with the compute buffer's counter value *afterwards*. - // This would lead to reading back less data than we should, so we need to request the entire compute buffer. - if (m_ComputeBuffer != null) - Readback(m_ComputeBuffer.count, async); - } - - public void Readback(int readcount ,bool async = true) - { - Readback(readcount, async); - } - - // Makes sure any pending changes by the CPU are sent to the GPU. - // If the list data has been changed on the CPU since the last time Unmap() was called and there's a compute buffer associated to it, - // will write the current contents of the list to the compute buffer. - public void Upload(int length, bool force = false) where U : struct - { - if ((computeBufferDirty || force) && m_ComputeBuffer != null && m_ComputeBuffer.IsValid()) - m_ComputeBuffer.SetData(AsNativeArray(length)); - - computeBufferDirty = false; - } - - public void Upload(bool force = false) - { - Upload(m_Count,force); - } - - public void UploadFullCapacity() - { - Upload(m_Capacity, true); - } - - // Waits for the last readback request to be complete, this brings back data from the GPU to the CPU: - public void WaitForReadback() - { - if (isCreated) - { - m_AsyncRequest.WaitForCompletion(); - m_CounterAsyncRequest.WaitForCompletion(); - } - } - - protected void ChangeCapacity(int newCapacity) - { - // invalidate compute buffer: - DisposeOfComputeBuffer(); - - // allocate a new buffer: - m_Stride = UnsafeUtility.SizeOf(); - var newAlignedPtr = UnsafeUtility.Malloc(newCapacity * m_Stride, 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 NativeReference GetCountReference(Allocator alloc) - { - return new NativeReference(m_Count, alloc); - } - - 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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeList.cs.meta deleted file mode 100644 index 6bfb7bb8f..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: be1183504e86c409d97f706fcfcb0b3f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs deleted file mode 100644 index 64cffb4d9..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs +++ /dev/null @@ -1,23 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs.meta deleted file mode 100644 index c90054257..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeMatrix4x4List.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 57e079b439b8f4d71966919ca4fa4838 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQuaternionList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQuaternionList.cs deleted file mode 100644 index c8552ff3e..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQuaternionList.cs +++ /dev/null @@ -1,24 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQuaternionList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQuaternionList.cs.meta deleted file mode 100644 index c60a0807b..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQuaternionList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6bad311b87fb6408793370e029c1d625 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryResultList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryResultList.cs deleted file mode 100644 index d82e9de0a..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryResultList.cs +++ /dev/null @@ -1,17 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryResultList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryResultList.cs.meta deleted file mode 100644 index 694b63a3d..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryResultList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 415658bfe3b0f45c285a26d383086a70 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryShapeList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryShapeList.cs deleted file mode 100644 index c7aa54f7e..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryShapeList.cs +++ /dev/null @@ -1,17 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryShapeList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryShapeList.cs.meta deleted file mode 100644 index c148868c0..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeQueryShapeList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a1b44ba5a49564f81bc8eeebbee71cf3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeRigidbodyList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeRigidbodyList.cs deleted file mode 100644 index 221ff10f2..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeRigidbodyList.cs +++ /dev/null @@ -1,18 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeRigidbodyList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeRigidbodyList.cs.meta deleted file mode 100644 index d5811a353..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeRigidbodyList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 28ae021335a854c3eb91c500cd4c77b6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleList.cs deleted file mode 100644 index 6fd173aa1..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleList.cs +++ /dev/null @@ -1,18 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleList.cs.meta deleted file mode 100644 index 6c43dfc5a..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0eda4a24fce5949d284395fe3a782477 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleMeshHeaderList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleMeshHeaderList.cs deleted file mode 100644 index ed34c97bb..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleMeshHeaderList.cs +++ /dev/null @@ -1,18 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleMeshHeaderList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleMeshHeaderList.cs.meta deleted file mode 100644 index f0ba2517e..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeTriangleMeshHeaderList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b7289725194bb4368a4ac8e6cd9a7062 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeUIntList.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeUIntList.cs deleted file mode 100644 index 542f40f3a..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeUIntList.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using UnityEngine; - -namespace Obi -{ - [Serializable] - public class ObiNativeUIntList : ObiNativeList - { - - public ObiNativeUIntList(int capacity = 8, int alignment = 16) : base(capacity, alignment) - { - for (int i = 0; i < capacity; ++i) - this[i] = 0; - } - - } -} - diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeUIntList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeUIntList.cs.meta deleted file mode 100644 index b6f26ce34..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeUIntList.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: cee276900c5ce412aafe4e23112537eb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector2List.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector2List.cs deleted file mode 100644 index 94f9c6b5c..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector2List.cs +++ /dev/null @@ -1,18 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector2List.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector2List.cs.meta deleted file mode 100644 index f62d13ea0..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector2List.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 097972b931df946398eb40913011ada0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector3List.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector3List.cs deleted file mode 100644 index 4fb3b0002..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector3List.cs +++ /dev/null @@ -1,18 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector3List.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector3List.cs.meta deleted file mode 100644 index c14bf94ed..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector3List.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fb8db19bcf3ce468786ed448ea6821d4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector4List.cs b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector4List.cs deleted file mode 100644 index 2f72c6381..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector4List.cs +++ /dev/null @@ -1,36 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector4List.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector4List.cs.meta deleted file mode 100644 index 681b0b726..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/NativeList/ObiNativeVector4List.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7a1016daf70074bd790b5a278c314263 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/ObiList.cs b/Assets/Obi/Scripts/Common/DataStructures/ObiList.cs deleted file mode 100644 index 6c7b86aa2..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/ObiList.cs +++ /dev/null @@ -1,165 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/ObiList.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/ObiList.cs.meta deleted file mode 100644 index c47f6adcd..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/ObiList.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d8100b324be8f46cc9578fd52193a876 -timeCreated: 1513467715 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/ParticlePair.cs b/Assets/Obi/Scripts/Common/DataStructures/ParticlePair.cs deleted file mode 100644 index 18ab9f1ff..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/ParticlePair.cs +++ /dev/null @@ -1,24 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/ParticlePair.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/ParticlePair.cs.meta deleted file mode 100644 index 03bca0884..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/ParticlePair.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 248fe94c499654ccf8bee67c72942dde -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/Queries.meta b/Assets/Obi/Scripts/Common/DataStructures/Queries.meta deleted file mode 100644 index a8d87e4f6..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/Queries.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 10c69aca53bad420799af0abb9f185ea -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryResult.cs b/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryResult.cs deleted file mode 100644 index 72245ed7e..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryResult.cs +++ /dev/null @@ -1,17 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryResult.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryResult.cs.meta deleted file mode 100644 index 7420cabfb..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryResult.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a2effdf7f81654462ac5af1735de92eb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryShape.cs b/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryShape.cs deleted file mode 100644 index a035e46c0..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryShape.cs +++ /dev/null @@ -1,36 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryShape.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryShape.cs.meta deleted file mode 100644 index 7276f4498..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/Queries/QueryShape.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6d126422956eb46eaa20e28b8d59122c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/RegularGrid.meta b/Assets/Obi/Scripts/Common/DataStructures/RegularGrid.meta deleted file mode 100644 index c9ad98ff6..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/RegularGrid.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2c4a05fed09dd4e9e9d346fa3f1ccd55 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/RegularGrid/RegularGrid.cs b/Assets/Obi/Scripts/Common/DataStructures/RegularGrid/RegularGrid.cs deleted file mode 100644 index 5b92932f2..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/RegularGrid/RegularGrid.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace Obi -{ - public class RegularGrid - { - private Dictionary> gridMap = new Dictionary>(); - private float cellSize; - private Func getPosition; - - public RegularGrid(float cellSize, Func getPosition) - { - this.cellSize = cellSize; - - if (getPosition != null) - this.getPosition = getPosition; - else - getPosition = (x) => { return Vector3.zero; }; - } - - public Vector3Int GetCellCoords(Vector3 pos) - { - return new Vector3Int(Mathf.FloorToInt(pos.x / cellSize), - Mathf.FloorToInt(pos.y / cellSize), - Mathf.FloorToInt(pos.z / cellSize)); - } - - public void AddElement(T elm) - { - var coords = GetCellCoords(getPosition(elm)); - if (gridMap.TryGetValue(coords, out List cell)) - cell.Add(elm); - else - gridMap[coords] = new List { elm }; - } - - public bool RemoveElement(T elm) - { - var coords = GetCellCoords(getPosition(elm)); - if (gridMap.TryGetValue(coords, out List cell)) - { - return cell.Remove(elm); - } - return false; - } - - public IEnumerable GetNeighborsEnumerator(T elm) - { - // if cells are infinitesimaly small, - // elements should have no neighbors. - if (cellSize < ObiUtils.epsilon) - yield break; - - var position = getPosition(elm); - var coords = GetCellCoords(position); - List cell; - - for (int x = -1; x <= 1; ++x) - for (int y = -1; y <= 1; ++y) - for (int z = -1; z <= 1; ++z) - { - if (gridMap.TryGetValue(coords + new Vector3Int(x,y,z), out cell)) - { - foreach(T n in cell) - { - if (n.Equals(elm)) - continue; - - float dist = Vector3.Distance(position, getPosition(n)); - if (dist <= cellSize) - yield return n; - } - } - } - } - - // TODO: single call passing position and element to ignore. - public IEnumerable GetNeighborsEnumerator(Vector3 position) - { - // if cells are infinitesimaly small, - // elements should have no neighbors. - if (cellSize < ObiUtils.epsilon) - yield break; - - var coords = GetCellCoords(position); - List cell; - - for (int x = -1; x <= 1; ++x) - for (int y = -1; y <= 1; ++y) - for (int z = -1; z <= 1; ++z) - { - if (gridMap.TryGetValue(coords + new Vector3Int(x, y, z), out cell)) - { - foreach (T n in cell) - { - float dist = Vector3.Distance(position, getPosition(n)); - if (dist <= cellSize) - yield return n; - } - } - } - } - } -} diff --git a/Assets/Obi/Scripts/Common/DataStructures/RegularGrid/RegularGrid.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/RegularGrid/RegularGrid.cs.meta deleted file mode 100644 index 96fcea3bc..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/RegularGrid/RegularGrid.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9506e58093a7c491f944e8e74529bf74 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/SimplexCounts.cs b/Assets/Obi/Scripts/Common/DataStructures/SimplexCounts.cs deleted file mode 100644 index f2adcf1e4..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/SimplexCounts.cs +++ /dev/null @@ -1,46 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/SimplexCounts.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/SimplexCounts.cs.meta deleted file mode 100644 index f4cb67466..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/SimplexCounts.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4a445a209f673411391c60adfe8b4766 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/VInt4.cs b/Assets/Obi/Scripts/Common/DataStructures/VInt4.cs deleted file mode 100644 index c0f3bc17e..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/VInt4.cs +++ /dev/null @@ -1,41 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/VInt4.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/VInt4.cs.meta deleted file mode 100644 index b30848186..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/VInt4.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4509cf294c582479790fe1d6307b218c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/Voxelization.meta b/Assets/Obi/Scripts/Common/DataStructures/Voxelization.meta deleted file mode 100644 index a9e8fd40b..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/Voxelization.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: dfdbb639033814f7c94f5ad7f5bdb809 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/Voxelization/MeshVoxelizer.cs b/Assets/Obi/Scripts/Common/DataStructures/Voxelization/MeshVoxelizer.cs deleted file mode 100644 index 5caa44552..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/Voxelization/MeshVoxelizer.cs +++ /dev/null @@ -1,635 +0,0 @@ - -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, Vector3Int axisMask, bool generateTriangleIndices = false) - { - voxelSize = Mathf.Max(0.0001f, voxelSize); - - var xfBounds = input.bounds.Transform(transform); - - // Calculate min and max voxels, adding a 1-voxel margin. - origin = GetPointVoxel(Vector3.Scale(xfBounds.min, axisMask)) - axisMask; - Vector3Int max = GetPointVoxel(Vector3.Scale(xfBounds.max, axisMask)) + axisMask; - - resolution = new Vector3Int(max.x - origin.x + 1, max.y - origin.y + 1, max.z - origin.z + 1); - - // 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 = Vector3.Scale(transform.MultiplyPoint3x4(vertices[triIndices[i]]), axisMask); - Vector3 v2 = Vector3.Scale(transform.MultiplyPoint3x4(vertices[triIndices[i + 1]]), axisMask); - Vector3 v3 = Vector3.Scale(transform.MultiplyPoint3x4(vertices[triIndices[i + 2]]), axisMask); - - Bounds triBounds = GetTriangleBounds(v1, v2, v3); - - 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; - } - } - - // Ensures boundary voxels are 2D. - public void MakeBoundary2D() - { - for (int x = 0; x < resolution.x; ++x) - for (int y = 0; y < resolution.y; ++y) - for (int z = 0; z < resolution.z; ++z) - if (this[x, y, z] == Voxel.Boundary) - this[x, y, z] = Voxel.Inside; - - for (int x = 0; x < resolution.x; ++x) - for (int y = 0; y < resolution.y; ++y) - for (int z = 0; z < resolution.z; ++z) - { - int sum = 0; - for (int j = 0; j < faceNeighborhood.Length; ++j) - { - var index = faceNeighborhood[j]; - if (VoxelExists(index.x + x, index.y + y, index.z + z) && this[index.x + x, index.y + y, index.z + z] != Voxel.Outside) - { - sum++; - } - } - - if (sum <= 3 && this[x, y, z] == Voxel.Inside) - this[x, y, z] = Voxel.Boundary; - } - } - - public void CreateMesh(ref Mesh mesh, int smoothingIterations) - { - if (mesh == null) - mesh = new Mesh(); - - mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32; - mesh.Clear(); - List vertices = new List(); - List vertices2 = new List(); - List tris = new List(); - vertices.Clear(); - vertices2.Clear(); - tris.Clear(); - - int[] vtxIndex = new int[voxelCount]; - for (int i = 0; i < vtxIndex.Length; ++i) - vtxIndex[i] = -1; - - // create vertices: - for (int x = 0; x < resolution.x; ++x) - for (int y = 0; y < resolution.y; ++y) - for (int z = 0; z < resolution.z; ++z) - if (this[x, y, z] == Voxel.Boundary) - { - vtxIndex[GetVoxelIndex(x, y, z)] = vertices.Count; - var vtx = new Vector3(Origin.x + x + 0.5f, Origin.y + y + 0.5f, Origin.z + z + 0.5f) * voxelSize; - vertices.Add(vtx); - vertices2.Add(vtx); - } - - List inputVertices = vertices; - List outputVertices = vertices2; - for (int i = 0; i < smoothingIterations; ++i) - { - for (int x = 0; x < resolution.x; ++x) - for (int y = 0; y < resolution.y; ++y) - for (int z = 0; z < resolution.z; ++z) - if (this[x, y, z] == Voxel.Boundary) - { - Vector3 avg = Vector3.zero; - - int count = 0; - for (int j = 0; j < faceNeighborhood.Length; ++j) - { - var index = faceNeighborhood[j]; - if (VoxelExists(index.x + x, index.y + y, index.z + z) && this[index.x + x, index.y + y, index.z + z] == Voxel.Boundary) - { - avg += inputVertices[vtxIndex[GetVoxelIndex(index.x + x, index.y + y, index.z + z)]]; - count++; - } - } - - if (count > 0) - outputVertices[vtxIndex[GetVoxelIndex(x, y, z)]] = avg / count; - } - - var aux = inputVertices; - inputVertices = outputVertices; - outputVertices = aux; - } - - // triangulate - for (int x = 0; x < resolution.x; ++x) - for (int y = 0; y < resolution.y; ++y) - for (int z = 0; z < resolution.z; ++z) - if (this[x, y, z] == Voxel.Boundary) - { - int x0y0z0 = GetVoxelIndex(x, y, z); - - int x1y0z0 = VoxelExists(x + 1, y, z) ? GetVoxelIndex(x+1, y, z) : -1; - int x1y1z0 = VoxelExists(x + 1, y + 1, z) ? GetVoxelIndex(x+1, y+1, z) : -1; - int x0y1z0 = VoxelExists(x, y + 1, z) ? GetVoxelIndex(x, y+1, z) : -1; - - int x0y0z1 = VoxelExists(x, y, z + 1) ? GetVoxelIndex(x, y , z + 1) : -1; - int x0y1z1 = VoxelExists(x, y + 1, z + 1) ? GetVoxelIndex(x, y + 1, z + 1) : -1; - int x1y0z1 = VoxelExists(x + 1, y, z + 1) ? GetVoxelIndex(x+1, y, z + 1) : -1; - - int x1y1z1 = VoxelExists(x + 1, y + 1, z + 1) ? GetVoxelIndex(x + 1, y + 1, z + 1) : -1; - - // XY plane - if (x1y0z0 >= 0 && x1y1z0 >= 0 && x0y1z0 >= 0 && - voxels[x1y0z0] == Voxel.Boundary && - voxels[x1y1z0] == Voxel.Boundary && - voxels[x0y1z0] == Voxel.Boundary) - { - if (x0y1z1 < 0 || voxels[x0y1z1] == Voxel.Outside || - x0y0z1 < 0 || voxels[x0y0z1] == Voxel.Outside || - x1y0z1 < 0 || voxels[x1y0z1] == Voxel.Outside || - x1y1z1 < 0 || voxels[x1y1z1] == Voxel.Outside) - { - tris.Add(vtxIndex[x0y0z0]); - tris.Add(vtxIndex[x1y0z0]); - tris.Add(vtxIndex[x0y1z0]); - - tris.Add(vtxIndex[x0y1z0]); - tris.Add(vtxIndex[x1y0z0]); - tris.Add(vtxIndex[x1y1z0]); - } - else - { - tris.Add(vtxIndex[x1y0z0]); - tris.Add(vtxIndex[x0y0z0]); - tris.Add(vtxIndex[x0y1z0]); - - tris.Add(vtxIndex[x1y0z0]); - tris.Add(vtxIndex[x0y1z0]); - tris.Add(vtxIndex[x1y1z0]); - } - } - - // XZ plane - if (x1y0z0 >= 0 && x1y0z1 >= 0 && x0y0z1 >= 0 && - voxels[x1y0z0] == Voxel.Boundary && - voxels[x1y0z1] == Voxel.Boundary && - voxels[x0y0z1] == Voxel.Boundary) - { - if (x0y1z0 < 0 || voxels[x0y1z0] == Voxel.Outside || - x0y1z1 < 0 || voxels[x0y1z1] == Voxel.Outside || - x1y1z0 < 0 || voxels[x1y1z0] == Voxel.Outside || - x1y1z1 < 0 || voxels[x1y1z1] == Voxel.Outside) - { - tris.Add(vtxIndex[x1y0z0]); - tris.Add(vtxIndex[x0y0z0]); - tris.Add(vtxIndex[x0y0z1]); - - tris.Add(vtxIndex[x1y0z0]); - tris.Add(vtxIndex[x0y0z1]); - tris.Add(vtxIndex[x1y0z1]); - } - else - { - tris.Add(vtxIndex[x0y0z0]); - tris.Add(vtxIndex[x1y0z0]); - tris.Add(vtxIndex[x0y0z1]); - - tris.Add(vtxIndex[x0y0z1]); - tris.Add(vtxIndex[x1y0z0]); - tris.Add(vtxIndex[x1y0z1]); - } - } - - // XY plane - if (x0y0z1 >= 0 && x0y1z1 >= 0 && x0y1z0 >= 0 && - voxels[x0y0z1] == Voxel.Boundary && - voxels[x0y1z1] == Voxel.Boundary && - voxels[x0y1z0] == Voxel.Boundary) - { - if (x1y0z0 < 0 || voxels[x1y0z0] == Voxel.Outside || - x1y0z1 < 0 || voxels[x1y0z1] == Voxel.Outside || - x1y1z0 < 0 || voxels[x1y1z0] == Voxel.Outside || - x1y1z1 < 0 || voxels[x1y1z1] == Voxel.Outside) - { - tris.Add(vtxIndex[x0y0z1]); - tris.Add(vtxIndex[x0y0z0]); - tris.Add(vtxIndex[x0y1z0]); - - tris.Add(vtxIndex[x0y0z1]); - tris.Add(vtxIndex[x0y1z0]); - tris.Add(vtxIndex[x0y1z1]); - } - else - { - tris.Add(vtxIndex[x0y0z0]); - tris.Add(vtxIndex[x0y0z1]); - tris.Add(vtxIndex[x0y1z0]); - - tris.Add(vtxIndex[x0y1z0]); - tris.Add(vtxIndex[x0y0z1]); - tris.Add(vtxIndex[x0y1z1]); - } - } - } - - mesh.SetVertices(outputVertices); - mesh.SetIndices(tris, MeshTopology.Triangles, 0); - mesh.RecalculateNormals(); - } - - private IEnumerator FloodFill() - { - Queue queue = new Queue(); - 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); - } - } -} diff --git a/Assets/Obi/Scripts/Common/DataStructures/Voxelization/MeshVoxelizer.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/Voxelization/MeshVoxelizer.cs.meta deleted file mode 100644 index 3feb9ced1..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/Voxelization/MeshVoxelizer.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: d719a609a88a842d8b4a10db447a627c -timeCreated: 1521796043 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/Voxelization/PriorityQueue.cs b/Assets/Obi/Scripts/Common/DataStructures/Voxelization/PriorityQueue.cs deleted file mode 100644 index 63c1b3dc6..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/Voxelization/PriorityQueue.cs +++ /dev/null @@ -1,101 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/Voxelization/PriorityQueue.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/Voxelization/PriorityQueue.cs.meta deleted file mode 100644 index 5b691875d..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/Voxelization/PriorityQueue.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: df456c360bde341bca8e2bfd472e9bcb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelDistanceField.cs b/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelDistanceField.cs deleted file mode 100644 index dd727dc36..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelDistanceField.cs +++ /dev/null @@ -1,231 +0,0 @@ -using System.Collections.Generic; -using System.Collections; -using UnityEngine; - -namespace Obi -{ - - /** - * Generates a sparse distance field from a voxel representation of a mesh. - */ - public class VoxelDistanceField - { - public Vector3[,,] distanceField; // for each coordinate, stores coordinates of closest surface voxel. - - private MeshVoxelizer voxelizer; - - public VoxelDistanceField(MeshVoxelizer voxelizer) - { - this.voxelizer = voxelizer; - } - - public Vector4 SampleUnfiltered(int x, int y, int z) - { - x = Mathf.Clamp(x, 0, voxelizer.resolution.x - 1); - y = Mathf.Clamp(y, 0, voxelizer.resolution.y - 1); - z = Mathf.Clamp(z, 0, voxelizer.resolution.z - 1); - - var grad = distanceField[x, y, z]; - float dist = grad.magnitude; - grad.Normalize(); - - return new Vector4(grad.x, grad.y, grad.z, -dist); - } - - public Vector4 SampleFiltered(float x, float y, float z, Vector3Int axisMask) - { - var pos = new Vector3(x, y, z); - - // clamp position inside the distance field: - var min = voxelizer.GetVoxelCenter(new Vector3Int(0, 0, 0)); - var 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); - pos.y = Mathf.Clamp(pos.y, min.y, max.y); - pos.z = Mathf.Clamp(pos.z, min.z, max.z); - - var voxel = voxelizer.GetPointVoxel(pos - (Vector3)axisMask * voxelizer.voxelSize * 0.5f) - voxelizer.Origin; - var voxelCenter = voxelizer.GetVoxelCenter(voxel); - var norm = Vector3.Scale((pos - voxelCenter) / voxelizer.voxelSize, axisMask); - - var xz00 = SampleUnfiltered(voxel.x, voxel.y, voxel.z); - var xz01 = SampleUnfiltered(voxel.x, voxel.y, voxel.z + 1); - var xz10 = SampleUnfiltered(voxel.x + 1, voxel.y, voxel.z); - var xz11 = SampleUnfiltered(voxel.x + 1, voxel.y, voxel.z + 1); - - var yz00 = SampleUnfiltered(voxel.x, voxel.y + 1, voxel.z); - var yz01 = SampleUnfiltered(voxel.x, voxel.y + 1, voxel.z + 1); - var yz10 = SampleUnfiltered(voxel.x + 1, voxel.y + 1, voxel.z); - var yz11 = SampleUnfiltered(voxel.x + 1, voxel.y + 1, voxel.z + 1); - - var X1 = Vector4.Lerp(xz00, xz10, norm.x); - var X2 = Vector4.Lerp(xz01, xz11, norm.x); - var X3 = Vector4.Lerp(yz00, yz10, norm.x); - var X4 = Vector4.Lerp(yz01, yz11, norm.x); - - var Y1 = Vector4.Lerp(X1, X2, norm.z); - var Y2 = Vector4.Lerp(X3, X4, norm.z); - - return Vector4.Lerp(Y1, Y2, norm.y); - } - - public void Smooth() - { - // create output buffer for ping-pong. - Vector3[,,] smoothed = new Vector3[voxelizer.resolution.x, - voxelizer.resolution.y, - voxelizer.resolution.z]; - - 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.Outside) - { - var p = new Vector3Int(x, y, z); - Vector3 df = distanceField[x, y, z]; - int count = 1; - foreach (var o in MeshVoxelizer.faceNeighborhood) - { - // offset voxel to get neighbor: - var n = p + o; - if (voxelizer.VoxelExists(n.x, n.y, n.z) && voxelizer[n.x, n.y, n.z] != MeshVoxelizer.Voxel.Outside) - { - df += distanceField[n.x, n.y, n.z]; - count++; - } - } - df /= count; - smoothed[x, y, z] = df; - } - } - - distanceField = smoothed; - } - - private void CalculateGradientsAndDistances(Vector3Int[,,] buffer1) - { - distanceField = new Vector3[voxelizer.resolution.x, - voxelizer.resolution.y, - voxelizer.resolution.z]; - - for (int x = 0; x < buffer1.GetLength(0); ++x) - for (int y = 0; y < buffer1.GetLength(1); ++y) - for (int z = 0; z < buffer1.GetLength(2); ++z) - { - if (voxelizer[x, y, z] != MeshVoxelizer.Voxel.Outside) - { - distanceField[x, y, z] = voxelizer.GetVoxelCenter(buffer1[x, y, z]) - - voxelizer.GetVoxelCenter(new Vector3Int(x, y, z)); - } - else - distanceField[x, y, z] = Vector3.zero; - } - } - - public IEnumerator JumpFlood() - { - // create two buffers for ping-ponging: - Vector3Int[,,] buffer1 = new Vector3Int[voxelizer.resolution.x, - voxelizer.resolution.y, - voxelizer.resolution.z]; - - Vector3Int[,,] buffer2 = new Vector3Int[voxelizer.resolution.x, - voxelizer.resolution.y, - voxelizer.resolution.z]; - - // initialize distance field: - for (int x = 0; x < buffer1.GetLength(0); ++x) - for (int y = 0; y < buffer1.GetLength(1); ++y) - for (int z = 0; z < buffer1.GetLength(2); ++z) - { - if (voxelizer[x, y, z] == MeshVoxelizer.Voxel.Outside) - buffer1[x, y, z] = new Vector3Int(x, y, z); - else - buffer1[x, y, z] = new Vector3Int(-1, -1, -1); - } - - // calculate the maximum size of the buffer: - int size = Mathf.Max(buffer1.GetLength(0), - buffer1.GetLength(1), - buffer1.GetLength(2)); - int step = (int)(size / 2.0f); - - yield return new CoroutineJob.ProgressInfo("Generating voxel distance field...", 0); - - float numPasses = (int)Mathf.Log(size, 2); - int i = 0; - - // jump flood passes: - while (step >= 1) - { - JumpFloodPass(step, buffer1, buffer2); - - // halve step: - step /= 2; - - // swap buffers: - Vector3Int[,,] temp = buffer1; - buffer1 = buffer2; - buffer2 = temp; - - yield return new CoroutineJob.ProgressInfo("Generating voxel distance field...", ++i / numPasses); - } - - CalculateGradientsAndDistances(buffer1); - } - - private void JumpFloodPass(int stride, Vector3Int[,,] input, Vector3Int[,,] output) - { - // 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: - foreach (var o in MeshVoxelizer.fullNeighborhood) - { - // offset voxel to get neighbor: - var n = p + o * stride; - - if (voxelizer.VoxelExists(n.x, n.y, n.z)) - { - // neighbors' closest seed. - Vector3Int nc = input[n.x, n.y, n.z]; - - if (nc.x >= 0) - { - // distance to neighbor's closest seed: - float newDist = (nc - 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] = nc; - dist = newDist; - } - } - } - } - } - - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelDistanceField.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelDistanceField.cs.meta deleted file mode 100644 index 84c75c21a..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelDistanceField.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c65cc27d2e30248c5afce6392f782c11 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelPathFinder.cs b/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelPathFinder.cs deleted file mode 100644 index 8ac2788b7..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelPathFinder.cs +++ /dev/null @@ -1,135 +0,0 @@ -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/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelPathFinder.cs.meta b/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelPathFinder.cs.meta deleted file mode 100644 index a41bf458c..000000000 --- a/Assets/Obi/Scripts/Common/DataStructures/Voxelization/VoxelPathFinder.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2e4d304562b1140b8a161652aaf4f122 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/ObiEditorSettings.cs b/Assets/Obi/Scripts/Common/ObiEditorSettings.cs deleted file mode 100644 index 1a48a23fb..000000000 --- a/Assets/Obi/Scripts/Common/ObiEditorSettings.cs +++ /dev/null @@ -1,94 +0,0 @@ -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/Assets/Obi/Scripts/Common/ObiEditorSettings.cs.meta b/Assets/Obi/Scripts/Common/ObiEditorSettings.cs.meta deleted file mode 100644 index ba5f33789..000000000 --- a/Assets/Obi/Scripts/Common/ObiEditorSettings.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7971633b9741349f3add282a07b0d69b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Rendering.meta b/Assets/Obi/Scripts/Common/Rendering.meta deleted file mode 100644 index 750a354b2..000000000 --- a/Assets/Obi/Scripts/Common/Rendering.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 01dd4c104c0244e66a3ed4b9824df2b3 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Rendering/DataBatches.meta b/Assets/Obi/Scripts/Common/Rendering/DataBatches.meta deleted file mode 100644 index 3fd71cf29..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/DataBatches.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 13ef5aa25fc194dda8d453b36a50e5d0 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Rendering/DataBatches/MeshDataBatch.cs b/Assets/Obi/Scripts/Common/Rendering/DataBatches/MeshDataBatch.cs deleted file mode 100644 index 7f8362043..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/DataBatches/MeshDataBatch.cs +++ /dev/null @@ -1,316 +0,0 @@ -using UnityEngine; -using Unity.Collections; -using System.Collections.Generic; -using System.Linq; - -namespace Obi -{ - public interface IMeshDataProvider - { - Mesh sourceMesh { get; } - uint meshInstances { get; } - - int vertexCount { get; } - int triangleCount { get; } - - void GetVertices(List vertices); - void GetNormals(List normals); - void GetTangents(List tangents); - void GetColors(List colors); - void GetUVs(int channel, List uvs); - - void GetTriangles(List triangles); - } - - public class MeshDataBatch - { - public struct MeshData - { - public int firstVertex; - public int vertexCount; - - public int firstTriangle; - public int triangleCount; - } - - private Dictionary meshToIndex; - - // per mesh data: - public ObiNativeList meshData; - - public ObiNativeList restPositions; - public ObiNativeList restNormals; - public ObiNativeList restTangents; - public ObiNativeList restColors; - public ObiNativeList uv; - public ObiNativeList uv2; - public ObiNativeList uv3; - public ObiNativeList uv4; - public ObiNativeList triangles; - - private List tempVertices; - private List tempNormals; - private List tempTangents; - private List tempColors; - private List tempUV; - private List tempUV2; - private List tempUV3; - private List tempUV4; - private List tempTriangles; - - public int Count { get { return meshData.count; } } - - public MeshDataBatch() - { - meshToIndex = new Dictionary(); - meshData = new ObiNativeList(); - - InitializeTempData(); - InitializeDynamicData(); - InitializeStaticData(); - } - - public void InitializeTempData() - { - tempVertices = new List(); - tempNormals = new List(); - tempTangents = new List(); - tempColors = new List(); - - tempUV = new List(); - tempUV2 = new List(); - tempUV3 = new List(); - tempUV4 = new List(); - tempTriangles = new List(); - } - - public void InitializeDynamicData() - { - if (restPositions == null) - restPositions = new ObiNativeList(); - - if (restNormals == null) - restNormals = new ObiNativeList(); - - if (restTangents == null) - restTangents = new ObiNativeList(); - - if (restColors == null) - restColors = new ObiNativeList(); - } - - public void InitializeStaticData() - { - if (uv == null) - uv = new ObiNativeList(); - - if (uv2 == null) - uv2 = new ObiNativeList(); - - if (uv3 == null) - uv3 = new ObiNativeList(); - - if (uv4 == null) - uv4 = new ObiNativeList(); - - if (triangles == null) - triangles = new ObiNativeList(); - } - - public void Dispose() - { - if (meshData != null) meshData.Dispose(); - DisposeOfTempData(); - DisposeOfDynamicData(); - DisposeOfStaticData(); - } - - public void DisposeOfTempData() - { - tempVertices = null; - tempNormals = null; - tempTangents = null; - tempColors = null; - - tempUV = null; - tempUV2 = null; - tempUV3 = null; - tempUV4 = null; - tempTriangles = null; - } - - public void DisposeOfDynamicData() - { - if (restPositions != null) restPositions.Dispose(); restPositions = null; - if (restNormals != null) restNormals.Dispose(); restNormals = null; - if (restTangents != null) restTangents.Dispose(); restTangents = null; - if (restColors != null) restColors.Dispose(); restColors = null; - } - - public void DisposeOfStaticData() - { - if (uv != null) uv.Dispose(); uv = null; - if (uv2 != null) uv2.Dispose(); uv2 = null; - if (uv3 != null) uv3.Dispose(); uv3 = null; - if (uv4 != null) uv4.Dispose(); uv4 = null; - if (triangles != null) triangles.Dispose(); triangles = null; - } - - public void Clear() - { - if (meshToIndex != null) meshToIndex.Clear(); - if (meshData != null) meshData.Clear(); - - if (restPositions != null) restPositions.Clear(); - if (restNormals != null) restNormals.Clear(); - if (restTangents != null) restTangents.Clear(); - if (restColors != null) restColors.Clear(); - if (uv != null) uv.Clear(); - if (uv2 != null) uv2.Clear(); - if (uv3 != null) uv3.Clear(); - if (uv4 != null) uv4.Clear(); - if (triangles != null) triangles.Clear(); - } - - public int AddMesh(IMeshDataProvider meshProvider) - { - if (!meshToIndex.TryGetValue(meshProvider.sourceMesh, out int index)) - { - index = meshData.count; - meshToIndex[meshProvider.sourceMesh] = index; - - meshProvider.GetVertices(tempVertices); - meshProvider.GetNormals(tempNormals); - meshProvider.GetTangents(tempTangents); - meshProvider.GetColors(tempColors); - - meshProvider.GetUVs(0, tempUV); - meshProvider.GetUVs(1, tempUV2); - meshProvider.GetUVs(2, tempUV3); - meshProvider.GetUVs(3, tempUV4); - - meshProvider.GetTriangles(tempTriangles); - - if (tempTangents.Count == 0) - tempTangents.AddRange(Enumerable.Repeat(Vector4.zero, tempVertices.Count)); - - if (tempColors.Count == 0) - tempColors.AddRange(Enumerable.Repeat(Color.white, tempVertices.Count)); - - if (tempUV.Count == 0) - tempUV.AddRange(Enumerable.Repeat(Vector2.zero, tempVertices.Count)); - - if (tempUV2.Count == 0) - tempUV2.AddRange(Enumerable.Repeat(Vector2.zero, tempVertices.Count)); - - if (tempUV3.Count == 0) - tempUV3.AddRange(Enumerable.Repeat(Vector2.zero, tempVertices.Count)); - - if (tempUV4.Count == 0) - tempUV4.AddRange(Enumerable.Repeat(Vector2.zero, tempVertices.Count)); - - meshData.Add(new MeshData - { - firstVertex = restPositions.count, - vertexCount = tempVertices.Count, - - firstTriangle = triangles.count, - triangleCount = tempTriangles.Count - }); - - restPositions.AddRange(tempVertices); - restNormals.AddRange(tempNormals); - restTangents.AddRange(tempTangents); - restColors.AddRange(tempColors); - uv.AddRange(tempUV); - uv2.AddRange(tempUV2); - uv3.AddRange(tempUV3); - uv4.AddRange(tempUV4); - triangles.AddRange(tempTriangles); - } - return index; - } - - public void PrepareForCompute() - { - meshData.AsComputeBuffer(); - restPositions.AsComputeBuffer(); - restNormals.AsComputeBuffer(); - restTangents.AsComputeBuffer(); - restColors.AsComputeBuffer(); - } - - public int GetVertexCount(int meshIndex) - { - return meshData[meshIndex].vertexCount; - } - - public int GetTriangleCount(int meshIndex) - { - return meshData[meshIndex].triangleCount; - } - - public NativeSlice GetVertices(int meshIndex) - { - int start = meshData[meshIndex].firstVertex; - int count = meshData[meshIndex].vertexCount; - return restPositions.AsNativeArray().Slice(start,count); - } - - public NativeSlice GetNormals(int meshIndex) - { - int start = meshData[meshIndex].firstVertex; - int count = meshData[meshIndex].vertexCount; - return restNormals.AsNativeArray().Slice(start, count); - } - - public NativeSlice GetTangents(int meshIndex) - { - int start = meshData[meshIndex].firstVertex; - int count = meshData[meshIndex].vertexCount; - return restTangents.AsNativeArray().Slice(start, count); - } - - public NativeSlice GetColors(int meshIndex) - { - int start = meshData[meshIndex].firstVertex; - int count = meshData[meshIndex].vertexCount; - return restColors.AsNativeArray().Slice(start, count); - } - - public NativeSlice GetUV(int meshIndex) - { - int start = meshData[meshIndex].firstVertex; - int count = meshData[meshIndex].vertexCount; - return uv.AsNativeArray().Slice(start, count); - } - - public NativeSlice GetUV2(int meshIndex) - { - int start = meshData[meshIndex].firstVertex; - int count = meshData[meshIndex].vertexCount; - return uv2.AsNativeArray().Slice(start, count); - } - - public NativeSlice GetUV3(int meshIndex) - { - int start = meshData[meshIndex].firstVertex; - int count = meshData[meshIndex].vertexCount; - return uv3.AsNativeArray().Slice(start, count); - } - - public NativeSlice GetUV4(int meshIndex) - { - int start = meshData[meshIndex].firstVertex; - int count = meshData[meshIndex].vertexCount; - return uv4.AsNativeArray().Slice(start, count); - } - - public NativeSlice GetTriangles(int meshIndex) - { - int start = meshData[meshIndex].firstTriangle; - int count = meshData[meshIndex].triangleCount; - return triangles.AsNativeArray().Slice(start, count); - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Rendering/DataBatches/MeshDataBatch.cs.meta b/Assets/Obi/Scripts/Common/Rendering/DataBatches/MeshDataBatch.cs.meta deleted file mode 100644 index a116f658a..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/DataBatches/MeshDataBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 51631a4146e8e4501adcbe8ff6f039c9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Rendering/DataBatches/SkeletonDataBatch.cs b/Assets/Obi/Scripts/Common/Rendering/DataBatches/SkeletonDataBatch.cs deleted file mode 100644 index a2c0337aa..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/DataBatches/SkeletonDataBatch.cs +++ /dev/null @@ -1,117 +0,0 @@ - -using UnityEngine; - -namespace Obi -{ - public class SkeletonDataBatch - { - public struct SkeletonData - { - public int firstBone; - public int boneCount; - } - - // per skinMap data: - public ObiNativeList skeletonData; - public ObiNativeList world2Solver; - - // bone data: - public ObiNativeList bonePositions; - public ObiNativeList boneRotations; - public ObiNativeList boneScales; - - public int Count { get { return skeletonData.count; } } - - public SkeletonDataBatch() - { - skeletonData = new ObiNativeList(); - world2Solver = new ObiNativeList(); - - bonePositions = new ObiNativeList(); - boneRotations = new ObiNativeList(); - boneScales = new ObiNativeList(); - } - - public void Dispose() - { - skeletonData.Dispose(); - world2Solver.Dispose(); - - bonePositions.Dispose(); - boneRotations.Dispose(); - boneScales.Dispose(); - } - - public void Clear() - { - skeletonData.Clear(); - world2Solver.Clear(); - - bonePositions.Clear(); - boneRotations.Clear(); - boneScales.Clear(); - } - - public int AddSkeleton(Transform[] bones, Matrix4x4 worldToSolver) - { - var data = new SkeletonData - { - firstBone = bonePositions.count, - }; - - foreach (var bone in bones) - { - if (bone != null) - { - bonePositions.Add(bone.position); - boneRotations.Add(bone.rotation); - boneScales.Add(bone.localScale); - } - } - - data.boneCount = bonePositions.count; - - skeletonData.Add(data); - world2Solver.Add(worldToSolver); - - return skeletonData.count - 1; - } - - public void PrepareForCompute() - { - skeletonData.SafeAsComputeBuffer(); - world2Solver.SafeAsComputeBuffer(); - bonePositions.SafeAsComputeBuffer(); - boneRotations.SafeAsComputeBuffer(); - boneScales.SafeAsComputeBuffer(); - } - - public void SetBoneTransform(int index, int boneIndex, Transform transform) - { - if (transform != null) - { - var i = skeletonData[index].firstBone + boneIndex; - bonePositions[i] = transform.position; - boneScales[i] = transform.lossyScale; - boneRotations[i] = transform.rotation; - } - } - - public void UpdateBoneTransformsCompute() - { - bonePositions.Upload(); - boneScales.Upload(); - boneRotations.Upload(); - } - - public Matrix4x4 GetWorldToSolverTransform(int index) - { - return world2Solver[index]; - } - - public void SetWorldToSolverTransform(int index, Matrix4x4 trfm) - { - world2Solver[index] = trfm; - } - } -} diff --git a/Assets/Obi/Scripts/Common/Rendering/DataBatches/SkeletonDataBatch.cs.meta b/Assets/Obi/Scripts/Common/Rendering/DataBatches/SkeletonDataBatch.cs.meta deleted file mode 100644 index cad0d32ba..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/DataBatches/SkeletonDataBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6b609b47dfb88424c9ae3e32c64bfaeb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Rendering/ISurfaceChunkUser.cs b/Assets/Obi/Scripts/Common/Rendering/ISurfaceChunkUser.cs deleted file mode 100644 index 91f76b019..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ISurfaceChunkUser.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UnityEngine; -using UnityEngine.Rendering; - -namespace Obi -{ - public interface ISurfaceChunkUser - { - uint usedChunkCount { get; } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Rendering/ISurfaceChunkUser.cs.meta b/Assets/Obi/Scripts/Common/Rendering/ISurfaceChunkUser.cs.meta deleted file mode 100644 index ffcc1476e..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ISurfaceChunkUser.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5e544f8db79af4a6a91df85c5df0dee7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Rendering/ObiActorRenderer.cs b/Assets/Obi/Scripts/Common/Rendering/ObiActorRenderer.cs deleted file mode 100644 index 3fc670692..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ObiActorRenderer.cs +++ /dev/null @@ -1,48 +0,0 @@ - -namespace Obi -{ - public interface IActorRenderer - { - public ObiActor actor - { - get; - } - } - - public interface ObiActorRenderer : IActorRenderer, ObiRenderer where T : ObiActorRenderer - { - public void EnableRenderer() - { - actor.OnBlueprintLoaded += ObiActorRenderer_OnBlueprintLoaded; - actor.OnBlueprintUnloaded += ObiActorRenderer_OnBlueprintUnloaded; - - if (actor.isLoaded) - RegisterRenderer(actor.solver); - } - - public void DisableRenderer() - { - if (actor.isLoaded) - UnregisterRenderer(actor.solver); - - actor.OnBlueprintLoaded -= ObiActorRenderer_OnBlueprintLoaded; - actor.OnBlueprintUnloaded -= ObiActorRenderer_OnBlueprintUnloaded; - } - - public void SetRendererDirty(Oni.RenderingSystemType type) - { - if (actor != null) - actor.SetRenderingDirty(type); - } - - private void ObiActorRenderer_OnBlueprintLoaded(ObiActor act, ObiActorBlueprint blueprint) - { - RegisterRenderer(act.solver); - } - - protected void ObiActorRenderer_OnBlueprintUnloaded(ObiActor act, ObiActorBlueprint blueprint) - { - UnregisterRenderer(act.solver); - } - } -} diff --git a/Assets/Obi/Scripts/Common/Rendering/ObiActorRenderer.cs.meta b/Assets/Obi/Scripts/Common/Rendering/ObiActorRenderer.cs.meta deleted file mode 100644 index 8dd784516..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ObiActorRenderer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8f86d1462578d497182bb58c20b89d42 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Rendering/ObiDistanceFieldRenderer.cs b/Assets/Obi/Scripts/Common/Rendering/ObiDistanceFieldRenderer.cs deleted file mode 100644 index 2f0344d66..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ObiDistanceFieldRenderer.cs +++ /dev/null @@ -1,166 +0,0 @@ -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/Assets/Obi/Scripts/Common/Rendering/ObiDistanceFieldRenderer.cs.meta b/Assets/Obi/Scripts/Common/Rendering/ObiDistanceFieldRenderer.cs.meta deleted file mode 100644 index daf2292b3..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ObiDistanceFieldRenderer.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -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/Assets/Obi/Scripts/Common/Rendering/ObiFoamRenderSystem.cs b/Assets/Obi/Scripts/Common/Rendering/ObiFoamRenderSystem.cs deleted file mode 100644 index 93b906200..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ObiFoamRenderSystem.cs +++ /dev/null @@ -1,96 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using System.Runtime.InteropServices; -using Unity.Profiling; -using UnityEngine; -using UnityEngine.Rendering; - -namespace Obi -{ - [StructLayout(LayoutKind.Sequential)] - public struct DiffuseParticleVertex - { - public Vector4 pos; - public Vector3 offset; - public Vector4 color; - public Vector4 velocity; - public Vector4 attributes; - } - - public class ObiFoamRenderSystem : RenderSystem - { - public Oni.RenderingSystemType typeEnum { get => Oni.RenderingSystemType.FoamParticles; } - - public RendererSet renderers { get; } = new RendererSet(); - public bool isSetup => true; - - protected VertexAttributeDescriptor[] layout = - { - new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 4), - new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float32, 3), - new VertexAttributeDescriptor(VertexAttribute.Color, VertexAttributeFormat.Float32, 4), - new VertexAttributeDescriptor(VertexAttribute.TexCoord0, VertexAttributeFormat.Float32, 4), // velocity - new VertexAttributeDescriptor(VertexAttribute.TexCoord1, VertexAttributeFormat.Float32, 4), // attributes - }; - - static protected ProfilerMarker m_SetupRenderMarker = new ProfilerMarker("SetupSurfaceMeshing"); - static protected ProfilerMarker m_RenderMarker = new ProfilerMarker("SurfaceMeshing"); - - protected HashSet cameras = new HashSet(); - protected MaterialPropertyBlock matProps; - - protected ObiSolver m_Solver; - public ProceduralRenderBatch renderBatch; - -#if (UNITY_2019_1_OR_NEWER) - System.Action renderCallback; -#endif - - // must be done before fluid meshing. - public uint tier - { - get { return 0; } - } - - public ObiFoamRenderSystem(ObiSolver solver) - { - m_Solver = solver; - matProps = new MaterialPropertyBlock(); - -#if (UNITY_2019_1_OR_NEWER) - renderCallback = new System.Action((cntxt, cam) => { RenderFromCamera(cam); }); - RenderPipelineManager.beginCameraRendering += renderCallback; -#endif - Camera.onPreCull += RenderFromCamera; - } - - public virtual void Dispose() - { - -#if (UNITY_2019_1_OR_NEWER) - RenderPipelineManager.beginCameraRendering -= renderCallback; -#endif - Camera.onPreCull -= RenderFromCamera; - - renderBatch.Dispose(); - cameras.Clear(); - } - - public void RenderFromCamera(Camera camera) - { - cameras.Add(camera); - } - - public virtual void Setup() - { - } - - public virtual void Step() - { - } - - public virtual void Render() - { - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Rendering/ObiFoamRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Rendering/ObiFoamRenderSystem.cs.meta deleted file mode 100644 index 7536fe664..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ObiFoamRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 96d883432ef854a8598e264c73232bdc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderSystem.cs b/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderSystem.cs deleted file mode 100644 index 1977c446f..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderSystem.cs +++ /dev/null @@ -1,151 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using UnityEngine.Rendering; -using Unity.Collections; -using Unity.Profiling; -using System.Runtime.InteropServices; - -namespace Obi -{ - - public abstract class ObiInstancedParticleRenderSystem : RenderSystem - { - public Oni.RenderingSystemType typeEnum { get => Oni.RenderingSystemType.InstancedParticles; } - - public RendererSet renderers { get; } = new RendererSet(); - public bool isSetup => activeParticles != null; - - - static protected ProfilerMarker m_SetupRenderMarker = new ProfilerMarker("SetupParticleRendering"); - static protected ProfilerMarker m_RenderMarker = new ProfilerMarker("ParticleRendering"); - - protected ObiSolver m_Solver; - - protected List batchList = new List(); - - protected ObiNativeList activeParticles; - protected ObiNativeList rendererIndex; - protected ObiNativeList rendererData; - - protected ObiNativeList instanceTransforms; - protected ObiNativeList invInstanceTransforms; - protected ObiNativeList instanceColors; - - public ObiInstancedParticleRenderSystem(ObiSolver solver) - { - m_Solver = solver; - - activeParticles = new ObiNativeList(); - rendererIndex = new ObiNativeList(); - rendererData = new ObiNativeList(); - instanceTransforms = new ObiNativeList(); - invInstanceTransforms = new ObiNativeList(); - instanceColors = new ObiNativeList(); - } - - public virtual void Dispose() - { - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Dispose(); - batchList.Clear(); - - if (activeParticles != null) - activeParticles.Dispose(); - if (rendererData != null) - rendererData.Dispose(); - if (rendererIndex != null) - rendererIndex.Dispose(); - if (instanceTransforms != null) - instanceTransforms.Dispose(); - if (invInstanceTransforms != null) - invInstanceTransforms.Dispose(); - if (instanceColors != null) - instanceColors.Dispose(); - } - - protected virtual void Clear() - { - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Dispose(); - batchList.Clear(); - - activeParticles.Clear(); - rendererData.Clear(); - rendererIndex.Clear(); - instanceTransforms.Clear(); - invInstanceTransforms.Clear(); - instanceColors.Clear(); - } - - protected virtual void CreateBatches() - { - // generate batches: - for (int i = 0; i < renderers.Count; ++i) - { - renderers[i].renderParameters.layer = renderers[i].gameObject.layer; - - // Create multiple batches of at most maxInstancesPerBatch particles each: - int instanceCount = 0; - while (instanceCount < renderers[i].actor.particleCount) - { - var batch = new InstancedRenderBatch(i, renderers[i].mesh, renderers[i].material, renderers[i].renderParameters); - batch.firstInstance = instanceCount; - batch.instanceCount = Mathf.Min(renderers[i].actor.particleCount - instanceCount, Constants.maxInstancesPerBatch); - instanceCount += batch.instanceCount; - batchList.Add(batch); - } - } - - // sort batches: - batchList.Sort(); - - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - var renderer = renderers[batch.firstRenderer]; - int particlesSoFar = activeParticles.count; - - // add active particles here, respecting batch order: - activeParticles.AddRange(renderer.actor.solverIndices, batch.firstInstance, batch.instanceCount); - rendererIndex.AddReplicate(i, batch.instanceCount); - rendererData.Add(new ParticleRendererData(renderer.instanceColor, renderer.instanceScale)); - - batch.firstInstance = particlesSoFar; - } - - instanceTransforms.ResizeUninitialized(activeParticles.count); - invInstanceTransforms.ResizeUninitialized(activeParticles.count); - instanceColors.ResizeUninitialized(activeParticles.count); - } - - protected virtual void CloseBatches() - { - // Initialize each batch: - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Initialize(); - } - - public virtual void Setup() - { - using (m_SetupRenderMarker.Auto()) - { - Clear(); - - CreateBatches(); - - ObiUtils.MergeBatches(batchList); - - CloseBatches(); - } - } - - public virtual void Step() - { - } - - public virtual void Render() - { - } - } -} - diff --git a/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderSystem.cs.meta deleted file mode 100644 index d62f80c8d..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fd33018010abc46be9ac6cc091142ccf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderer.cs b/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderer.cs deleted file mode 100644 index e76814594..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderer.cs +++ /dev/null @@ -1,63 +0,0 @@ -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/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderer.cs.meta b/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderer.cs.meta deleted file mode 100644 index 028428626..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ObiInstancedParticleRenderer.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -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/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderSystem.cs b/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderSystem.cs deleted file mode 100644 index b84ed1b37..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderSystem.cs +++ /dev/null @@ -1,145 +0,0 @@ -using UnityEngine; -using System.Collections.Generic; -using UnityEngine.Rendering; -using Unity.Profiling; -using System.Runtime.InteropServices; - -namespace Obi -{ - [StructLayout(LayoutKind.Sequential)] - public struct ParticleVertex - { - public Vector4 pos; - public Vector3 offset; - public Vector4 color; - public Vector4 b1; - public Vector4 b2; - public Vector4 b3; - } - - public abstract class ObiParticleRenderSystem : RenderSystem - { - public Oni.RenderingSystemType typeEnum { get => Oni.RenderingSystemType.Particles; } - - public RendererSet renderers { get; } = new RendererSet(); - public bool isSetup => activeParticles != null; - - protected VertexAttributeDescriptor[] layout = - { - new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 4), - new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float32, 3), - new VertexAttributeDescriptor(VertexAttribute.Color, VertexAttributeFormat.Float32, 4), - new VertexAttributeDescriptor(VertexAttribute.TexCoord0, VertexAttributeFormat.Float32, 4), - new VertexAttributeDescriptor(VertexAttribute.TexCoord1, VertexAttributeFormat.Float32, 4), - new VertexAttributeDescriptor(VertexAttribute.TexCoord2, VertexAttributeFormat.Float32, 4) - }; - - static protected ProfilerMarker m_SetupRenderMarker = new ProfilerMarker("SetupParticleRendering"); - static protected ProfilerMarker m_RenderMarker = new ProfilerMarker("ParticleRendering"); - - protected ObiSolver m_Solver; - - protected List> batchList = new List>(); - - protected ObiNativeList activeParticles; - protected ObiNativeList rendererIndex; - protected ObiNativeList rendererData; - - public ObiParticleRenderSystem(ObiSolver solver) - { - m_Solver = solver; - - activeParticles = new ObiNativeList(); - rendererIndex = new ObiNativeList(); - rendererData = new ObiNativeList(); - } - - public virtual void Dispose() - { - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Dispose(); - batchList.Clear(); - - if (activeParticles != null) - activeParticles.Dispose(); - if (rendererData != null) - rendererData.Dispose(); - if (rendererIndex != null) - rendererIndex.Dispose(); - } - - protected virtual void Clear() - { - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Dispose(); - batchList.Clear(); - - activeParticles.Clear(); - rendererData.Clear(); - rendererIndex.Clear(); - } - - protected virtual void CreateBatches() - { - // generate batches: - for (int i = 0; i < renderers.Count; ++i) - { - renderers[i].renderParameters.layer = renderers[i].gameObject.layer; - batchList.Add(new ProceduralRenderBatch(i, renderers[i].material, renderers[i].renderParameters)); - } - - // sort batches: - batchList.Sort(); - - int particleCount = 0; - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - var renderer = renderers[batch.firstRenderer]; - int actorParticleCount = renderer.actor.particleCount; - - batch.vertexCount += actorParticleCount * 4; - batch.triangleCount += actorParticleCount * 2; - - batch.firstParticle = particleCount; - particleCount += actorParticleCount; - - // add particles here, respecting batch order: - activeParticles.AddRange(renderer.actor.solverIndices, actorParticleCount); - rendererData.Add(new ParticleRendererData(renderer.particleColor, renderer.radiusScale)); - rendererIndex.AddReplicate(i, actorParticleCount); - } - } - - protected virtual void CloseBatches() - { - // Initialize each batch: - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Initialize(layout); - } - - public virtual void Setup() - { - using (m_SetupRenderMarker.Auto()) - { - Clear(); - - CreateBatches(); - - ObiUtils.MergeBatches(batchList); - - CloseBatches(); - - } - } - - public virtual void Step() - { - } - - public virtual void Render() - { - } - } -} - diff --git a/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderSystem.cs.meta b/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderSystem.cs.meta deleted file mode 100644 index e2307d239..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5e36441d408a548d29fbc80dfa4fffc1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs b/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs deleted file mode 100644 index ab677004d..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs +++ /dev/null @@ -1,78 +0,0 @@ -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/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs.meta b/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs.meta deleted file mode 100644 index 58bfe07b6..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ObiParticleRenderer.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -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/Assets/Obi/Scripts/Common/Rendering/ObiRenderer.cs b/Assets/Obi/Scripts/Common/Rendering/ObiRenderer.cs deleted file mode 100644 index 8d8622deb..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ObiRenderer.cs +++ /dev/null @@ -1,65 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - public interface ObiRenderer where T : ObiRenderer - { - protected RenderSystem CreateRenderSystem(ObiSolver solver); - - public bool ValidateRenderer() { return true; } - public void CleanupRenderer() { } - - protected bool UnregisterRenderer(ObiSolver solver) - { - CleanupRenderer(); - - // try to get a render system from the solver: - var system = solver.GetRenderSystem(); - - // if there's an existing render system for this kind of renderer, - // unregister from it. - if (system != null && system.RemoveRenderer((T)this)) - { - // if the render system is empty, destroy it: - if (system.isEmpty) - { - solver.UnregisterRenderSystem(system); - system.Dispose(); - } - - solver.dirtyRendering |= (int)system.typeEnum; - return true; - } - - return false; - } - - protected bool RegisterRenderer(ObiSolver solver) - { - if (ValidateRenderer()) - { - // try to get a render system from the solver: - var system = solver.GetRenderSystem(); - - // if no appropiate system has been created yet, create it: - if (system == null) - { - system = CreateRenderSystem(solver) as RenderSystem; - solver.RegisterRenderSystem(system); - } - - // register in the renderer: - if (system != null) - { - if (system.AddRenderer((T)this)) - { - solver.dirtyRendering |= (int)system.typeEnum; - return true; - } - } - } - - return false; - } - } -} diff --git a/Assets/Obi/Scripts/Common/Rendering/ObiRenderer.cs.meta b/Assets/Obi/Scripts/Common/Rendering/ObiRenderer.cs.meta deleted file mode 100644 index ae92becb7..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ObiRenderer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7d4f237ec9acf4df0a30d5a0139e0f36 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Rendering/ParticleImpostorRendering.cs b/Assets/Obi/Scripts/Common/Rendering/ParticleImpostorRendering.cs deleted file mode 100644 index 5a90e2774..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ParticleImpostorRendering.cs +++ /dev/null @@ -1,164 +0,0 @@ -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/Assets/Obi/Scripts/Common/Rendering/ParticleImpostorRendering.cs.meta b/Assets/Obi/Scripts/Common/Rendering/ParticleImpostorRendering.cs.meta deleted file mode 100644 index 2ee95bbf2..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/ParticleImpostorRendering.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bf17f48345c0f42a9a419ec65398dcd8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Rendering/RenderBatches.meta b/Assets/Obi/Scripts/Common/Rendering/RenderBatches.meta deleted file mode 100644 index 66adb0b7a..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/RenderBatches.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7f9c5efc94e964016b39c7778b3af164 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Rendering/RenderBatches/DynamicRenderBatch.cs b/Assets/Obi/Scripts/Common/Rendering/RenderBatches/DynamicRenderBatch.cs deleted file mode 100644 index ba2f0949b..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/RenderBatches/DynamicRenderBatch.cs +++ /dev/null @@ -1,368 +0,0 @@ -using System; -using UnityEngine; -using System.Collections.Generic; -using System.Runtime.InteropServices; -using UnityEngine.Rendering; - -namespace Obi -{ - [StructLayout(LayoutKind.Sequential)] - public struct DynamicBatchVertex - { - public Vector3 pos; - public Vector3 normal; - public Vector4 tangent; - public Vector4 color; - } - - [StructLayout(LayoutKind.Sequential)] - public struct StaticBatchVertex - { - public Vector2 uv; - public Vector2 uv2; - public Vector2 uv3; - public Vector2 uv4; - } - - public class DynamicRenderBatch : IRenderBatch where T : IMeshDataProvider, IActorRenderer - { - private VertexAttributeDescriptor[] vertexLayout; - - private RenderBatchParams renderBatchParams; - public RenderParams renderParams { get; private set; } - - public Material[] materials; - public Mesh mesh; - - public int firstRenderer; - public int rendererCount; - - public ObiNativeList vertexToRenderer; // for each vertex in the batch, index of its renderer - public ObiNativeList particleToRenderer; // for each particle in the batch, index of its renderer - - public ObiNativeList particleIndices; // solver indices for all renderers in the batch - - public ObiNativeList dynamicVertexData; - public ObiNativeList staticVertexData; - public ObiNativeList triangles; - - public GraphicsBuffer gpuVertexBuffer; - - public int vertexCount; - public int triangleCount => triangles.count / 3; - public int particleCount => particleIndices.count; - - public DynamicRenderBatch(int rendererIndex, int vertexCount, Material[] materials, RenderBatchParams param) - { - this.renderBatchParams = param; - this.materials = materials; - this.vertexCount = vertexCount; - - this.firstRenderer = rendererIndex; - this.rendererCount = 1; - } - - public void Initialize(List renderers, - MeshDataBatch meshData, - ObiNativeList meshIndices, - VertexAttributeDescriptor[] layout, - bool gpu = false) - { - renderParams = renderBatchParams.ToRenderParams(); - vertexLayout = layout; - - mesh = new Mesh(); - - vertexToRenderer = new ObiNativeList(); - particleToRenderer = new ObiNativeList(); - particleIndices = new ObiNativeList(); - - dynamicVertexData = new ObiNativeList(); - staticVertexData = new ObiNativeList(); - triangles = new ObiNativeList(); - - // there will be exactly one submesh per material in the output batch. - // so we iterate trough materials, and for each one, build a submesh by merging the - // renderer's submeshes. If a renderer has less submeshes than materials, reuse the last one. - - SubMeshDescriptor[] descriptors = new SubMeshDescriptor[materials.Length]; - - for (int m = 0; m < materials.Length; ++m) - { - int vertexOffset = 0; - var desc = new SubMeshDescriptor(); - desc.indexStart = triangles.count; - - for (int i = firstRenderer; i < firstRenderer + rendererCount; ++i) - { - var renderer = renderers[i]; - int meshIndex = meshIndices[i]; - int submeshIndex = Mathf.Min(m, renderer.sourceMesh.subMeshCount - 1); - var submeshInfo = renderer.sourceMesh.GetSubMesh(submeshIndex); - - var meshTriangles = meshData.GetTriangles(meshIndex); - for (int k = 0; k < renderer.meshInstances; ++k) - { - // append submesh triangles: - for (int t = submeshInfo.indexStart; t < submeshInfo.indexStart + submeshInfo.indexCount; ++t) - triangles.Add(vertexOffset + meshTriangles[t]); - - vertexOffset += meshData.GetVertexCount(meshIndex); - } - } - - desc.indexCount = triangles.count - desc.indexStart; - descriptors[m] = desc; - } - - // vertices: - for (int i = firstRenderer; i < firstRenderer + rendererCount; ++i) - { - var renderer = renderers[i]; - int meshIndex = meshIndices[i]; - - int vCount = meshData.GetVertexCount(meshIndex); - - for (int k = 0; k < renderer.meshInstances; ++k) - { - vertexToRenderer.AddReplicate(i, vCount); - particleToRenderer.AddReplicate(i, renderer.actor.solverIndices.count); - particleIndices.AddRange(renderer.actor.solverIndices); - - var verts = meshData.GetVertices(meshIndex); - var norms = meshData.GetNormals(meshIndex); - var tan = meshData.GetTangents(meshIndex); - var col = meshData.GetColors(meshIndex); - - var uv = meshData.GetUV(meshIndex); - var uv2 = meshData.GetUV2(meshIndex); - var uv3 = meshData.GetUV3(meshIndex); - var uv4 = meshData.GetUV4(meshIndex); - - for (int j = 0; j < vCount; ++j) - { - dynamicVertexData.Add(new DynamicBatchVertex - { - pos = verts[j], - normal = norms[j], - tangent = tan[j], - color = j < col.Length ? (Vector4)col[j] : Vector4.one - }); - - staticVertexData.Add(new StaticBatchVertex - { - uv = j < uv.Length ? uv[j] : Vector2.zero, - uv2 = j < uv2.Length ? uv2[j] : Vector2.zero, - uv3 = j < uv3.Length ? uv3[j] : Vector2.zero, - uv4 = j < uv4.Length ? uv4[j] : Vector2.zero, - }); - } - } - } - - // setup combined mesh: - mesh.SetVertexBufferParams(vertexCount, layout); - mesh.SetIndexBufferParams(triangles.count, IndexFormat.UInt32); - - mesh.SetVertexBufferData(dynamicVertexData.AsNativeArray(), 0, 0, dynamicVertexData.count, 0, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); - mesh.SetVertexBufferData(staticVertexData.AsNativeArray(), 0, 0, staticVertexData.count, 1, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); - - mesh.SetIndexBufferData(triangles.AsNativeArray(), 0, 0, triangles.count, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); - - // set submeshes: - mesh.subMeshCount = materials.Length; - for (int m = 0; m < materials.Length; ++m) - mesh.SetSubMesh(m, descriptors[m], MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); - - if (gpu) - { - dynamicVertexData.Dispose(); - - mesh.vertexBufferTarget |= GraphicsBuffer.Target.Raw; - - // meshes with no vertices will have no vertex buffer, and Unity will throw an exception. - try - { - if (mesh.vertexCount > 0) - { - gpuVertexBuffer ??= mesh.GetVertexBuffer(0); - } - } - catch (Exception e) - { - Debug.LogException(e); - } - - particleIndices.AsComputeBuffer(); - vertexToRenderer.AsComputeBuffer(); - particleToRenderer.AsComputeBuffer(); - } - } - - public void Dispose() - { - if (vertexToRenderer != null) - vertexToRenderer.Dispose(); - if (particleToRenderer != null) - particleToRenderer.Dispose(); - - if (particleIndices != null) - particleIndices.Dispose(); - - if (dynamicVertexData != null) - dynamicVertexData.Dispose(); - if (staticVertexData != null) - staticVertexData.Dispose(); - if (triangles != null) - triangles.Dispose(); - - gpuVertexBuffer?.Dispose(); - gpuVertexBuffer = null; - - GameObject.DestroyImmediate(mesh); - } - - public bool TryMergeWith(IRenderBatch other) - { - var pbatch = other as DynamicRenderBatch; - if (pbatch != null) - { - if (CompareTo(pbatch) == 0 && - vertexCount + pbatch.vertexCount < Constants.maxVertsPerMesh) - { - rendererCount += pbatch.rendererCount; - vertexCount += pbatch.vertexCount; - return true; - } - } - return false; - } - - private static int CompareMaterialLists(Material[] a, Material[] b) - { - int l = Mathf.Min(a.Length, b.Length); - for (int i = 0; i < l; ++i) - { - if (a[i] == null && b[i] == null) - return 0; - - if (a[i] == null) return -1; - if (b[i] == null) return 1; - - int compare = a[i].GetInstanceID().CompareTo(b[i].GetInstanceID()); - if (compare != 0) - return compare; - } - return a.Length.CompareTo(b.Length); - } - - public int CompareTo(IRenderBatch other) - { - var pbatch = other as DynamicRenderBatch; - int result = CompareMaterialLists(materials, pbatch.materials); - if (result == 0) - return renderBatchParams.CompareTo(pbatch.renderBatchParams); - return result; - } - - public void BakeMesh(List renderers, - T renderer, - ref Mesh bakedMesh, bool transformToActorLocalSpace = false) - { - // if the dynamic data is not available (such as when the batch is intended for GPU use), read it back: - bool gpu = !dynamicVertexData.isCreated || dynamicVertexData == null; - if (gpu) - { - dynamicVertexData = new ObiNativeList(); - dynamicVertexData.ResizeUninitialized(this.vertexCount); - var nativeArray = dynamicVertexData.AsNativeArray(); - AsyncGPUReadback.RequestIntoNativeArray(ref nativeArray, gpuVertexBuffer, this.vertexCount * dynamicVertexData.stride, 0).WaitForCompletion(); - } - - bakedMesh.Clear(); - - int vOffset = 0; - int tOffset = 0; - - for (int i = firstRenderer; i < firstRenderer + rendererCount; ++i) - { - // Count vertices of all instances: - int vCount = 0; - for (int k = 0; k < renderers[i].meshInstances; ++k) - vCount += renderers[i].sourceMesh.vertexCount; - - // Count triangles of all submeshes/instances: - int tCount = 0; - for (int m = 0; m < materials.Length; ++m) - { - int submeshIndex = Mathf.Min(m, renderers[i].sourceMesh.subMeshCount - 1); - var submeshInfo = renderers[i].sourceMesh.GetSubMesh(submeshIndex); - tCount += submeshInfo.indexCount * (int)renderers[i].meshInstances; - } - - // if this is the renderer we're interested in, populate the mesh: - if (renderers[i].Equals(renderer)) - { - bakedMesh.SetVertexBufferParams(vCount, vertexLayout); - bakedMesh.SetVertexBufferData(dynamicVertexData.AsNativeArray(), vOffset, 0, vCount, 0, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); - bakedMesh.SetVertexBufferData(staticVertexData.AsNativeArray(), vOffset, 0, vCount, 1, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); - - // transform vertices from solver space to actor space: - if (transformToActorLocalSpace) - { - var solver2Actor = renderer.actor.actorSolverToLocalMatrix; - var verts = bakedMesh.vertices; - for (int v = 0; v < verts.Length; ++v) - verts[v] = solver2Actor.MultiplyPoint3x4(verts[v]); - bakedMesh.vertices = verts; - } - - ObiNativeList indices = new ObiNativeList(tCount); - - // calculate submeshes (one submesh per material): - SubMeshDescriptor[] descriptors = new SubMeshDescriptor[materials.Length]; - for (int m = 0; m < materials.Length; ++m) - { - int vertexOffset = 0; - var desc = new SubMeshDescriptor(); - desc.indexStart = indices.count; - - int submeshIndex = Mathf.Min(m, renderer.sourceMesh.subMeshCount - 1); - var submeshInfo = renderer.sourceMesh.GetSubMesh(submeshIndex); - - for (int k = 0; k < renderer.meshInstances; ++k) - { - // append submesh triangles: - var meshTriangles = renderer.sourceMesh.triangles; - for (int t = submeshInfo.indexStart; t < submeshInfo.indexStart + submeshInfo.indexCount; ++t) - indices.Add(vertexOffset + meshTriangles[t]); - - vertexOffset += renderer.sourceMesh.vertexCount; - } - - desc.indexCount = indices.count - desc.indexStart; - descriptors[m] = desc; - } - - bakedMesh.SetIndexBufferParams(tCount, IndexFormat.UInt32); - bakedMesh.SetIndexBufferData(indices.AsNativeArray(), 0, 0, tCount, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); - - bakedMesh.subMeshCount = materials.Length; - for (int m = 0; m < materials.Length; ++m) - bakedMesh.SetSubMesh(m, descriptors[m], MeshUpdateFlags.DontValidateIndices); - - bakedMesh.RecalculateBounds(); - return; - } - - vOffset += vCount; - tOffset += tCount; - } - - if (gpu) - { - dynamicVertexData.Dispose(); - } - } - } -} diff --git a/Assets/Obi/Scripts/Common/Rendering/RenderBatches/DynamicRenderBatch.cs.meta b/Assets/Obi/Scripts/Common/Rendering/RenderBatches/DynamicRenderBatch.cs.meta deleted file mode 100644 index 4d34bf848..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/RenderBatches/DynamicRenderBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5bee4cda10f5944149b6f8c90a947c49 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Rendering/RenderBatches/IRenderBatch.cs b/Assets/Obi/Scripts/Common/Rendering/RenderBatches/IRenderBatch.cs deleted file mode 100644 index ef526a53c..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/RenderBatches/IRenderBatch.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System; -using System.Collections.Generic; - -using UnityEngine; -using UnityEngine.Rendering; - -namespace Obi -{ - public interface IRenderBatch : IComparable - { - bool TryMergeWith(IRenderBatch other); - } - - [Serializable] - public struct RenderBatchParams - { - [HideInInspector] public int layer; - public LightProbeUsage lightProbeUsage; - public ReflectionProbeUsage reflectionProbeUsage; - public ShadowCastingMode shadowCastingMode; - public bool receiveShadows; - public MotionVectorGenerationMode motionVectors; - public uint renderingLayerMask; - - public RenderBatchParams(bool receiveShadow) - { - layer = 0; - lightProbeUsage = LightProbeUsage.BlendProbes; - reflectionProbeUsage = ReflectionProbeUsage.BlendProbes; - shadowCastingMode = ShadowCastingMode.On; - receiveShadows = receiveShadow; - motionVectors = MotionVectorGenerationMode.Camera; - renderingLayerMask = 0xffffffff; - } - - public RenderBatchParams(Renderer renderer) - { - this.layer = renderer.gameObject.layer; - this.lightProbeUsage = renderer.lightProbeUsage; - this.reflectionProbeUsage = renderer.reflectionProbeUsage; - this.shadowCastingMode = renderer.shadowCastingMode; - this.receiveShadows = renderer.receiveShadows; - this.motionVectors = renderer.motionVectorGenerationMode; - this.renderingLayerMask = renderer.renderingLayerMask; - } - - public int CompareTo(RenderBatchParams param) - { - int cmp = layer.CompareTo(param.layer); - if (cmp == 0) cmp = renderingLayerMask.CompareTo(param.renderingLayerMask); - if (cmp == 0) cmp = lightProbeUsage.CompareTo(param.lightProbeUsage); - if (cmp == 0) cmp = reflectionProbeUsage.CompareTo(param.reflectionProbeUsage); - if (cmp == 0) cmp = shadowCastingMode.CompareTo(param.shadowCastingMode); - if (cmp == 0) cmp = receiveShadows.CompareTo(param.receiveShadows); - if (cmp == 0) cmp = motionVectors.CompareTo(param.motionVectors); - - return cmp; - } - - public RenderParams ToRenderParams() - { - var renderParams = new RenderParams(); - - // URP and HDRP don't work without this line. - renderParams.renderingLayerMask = GraphicsSettings.defaultRenderingLayerMask; - - renderParams.lightProbeUsage = lightProbeUsage; - renderParams.reflectionProbeUsage = reflectionProbeUsage; - renderParams.shadowCastingMode = shadowCastingMode; - renderParams.receiveShadows = receiveShadows; - renderParams.motionVectorMode = motionVectors; - renderParams.renderingLayerMask = renderingLayerMask; - renderParams.layer = layer; - return renderParams; - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Rendering/RenderBatches/IRenderBatch.cs.meta b/Assets/Obi/Scripts/Common/Rendering/RenderBatches/IRenderBatch.cs.meta deleted file mode 100644 index ae666aba2..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/RenderBatches/IRenderBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4a827293101844d32bed440c32d08c83 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Rendering/RenderBatches/InstanceRenderBatch.cs b/Assets/Obi/Scripts/Common/Rendering/RenderBatches/InstanceRenderBatch.cs deleted file mode 100644 index 7883fba49..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/RenderBatches/InstanceRenderBatch.cs +++ /dev/null @@ -1,141 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; -using UnityEngine; - -namespace Obi -{ - - [StructLayout(LayoutKind.Sequential)] - public struct ChunkData - { - public int rendererIndex; - public int offset; // index of the first element for each chunk. - - public ChunkData(int rendererIndex, int offset) - { - this.rendererIndex = rendererIndex; - this.offset = offset; - } - } - - public class InstancedRenderBatch : IRenderBatch - { - private RenderBatchParams renderBatchParams; - public RenderParams renderParams { get; private set; } - - public Mesh mesh; - public Material material; - - public int firstRenderer; - public int rendererCount; - - public int firstInstance; - public int instanceCount; - - public GraphicsBuffer argsBuffer; - - public InstancedRenderBatch(int rendererIndex, Mesh mesh, Material material, RenderBatchParams renderBatchParams) - { - this.renderBatchParams = renderBatchParams; - this.firstRenderer = rendererIndex; - this.rendererCount = 1; - this.mesh = mesh; - this.material = material; - this.firstInstance = 0; - this.instanceCount = 0; - } - - public void Initialize(bool gpu = false) - { - renderParams = renderBatchParams.ToRenderParams(); - - if (gpu) - argsBuffer = new GraphicsBuffer(GraphicsBuffer.Target.IndirectArguments, 1, 5 * sizeof(uint)); - } - - public void Dispose() - { - argsBuffer?.Dispose(); - argsBuffer = null; - } - - public bool TryMergeWith(IRenderBatch other) - { - var ibatch = other as InstancedRenderBatch; - if (ibatch != null) - { - if (CompareTo(ibatch) == 0 && - instanceCount + ibatch.instanceCount < Constants.maxInstancesPerBatch) - { - rendererCount += ibatch.rendererCount; - instanceCount += ibatch.instanceCount; - return true; - } - } - return false; - } - - public int CompareTo(IRenderBatch other) - { - var ibatch = other as InstancedRenderBatch; - - int idA = material != null ? material.GetInstanceID() : 0; int idB = (ibatch != null && ibatch.material != null) ? ibatch.material.GetInstanceID() : 0; - - int compareMat = idA.CompareTo(idB); - if (compareMat == 0) - { - idA = mesh != null ? mesh.GetInstanceID() : 0; - idB = (ibatch != null && ibatch.mesh != null) ? ibatch.mesh.GetInstanceID() : 0; - compareMat = idA.CompareTo(idB); - - if (compareMat == 0) - return renderBatchParams.CompareTo(ibatch.renderBatchParams); - } - - return compareMat; - } - - public void BakeMesh(RendererSet renderers, T renderer, ObiNativeList chunkData, - ObiNativeList instanceTransforms, - Matrix4x4 transform, - ref Mesh bakedMesh, bool transformVertices = false) where T:ObiRenderer - { - - // if the data is not available in the CPU (such as when the batch is intended for GPU use), read it back: - bool gpu = argsBuffer != null && argsBuffer.IsValid(); - if (gpu) - { - instanceTransforms.Readback(false); - } - - List combineInstances = new List(); - - bakedMesh.Clear(); - - for (int i = 0; i < chunkData.count; ++i) - { - // if this chunk's renderer is the renderer we are interested in, - // append its instances to the mesh. - if (renderers[chunkData[i].rendererIndex].Equals(renderer)) - { - int firstIndex = i > 0 ? chunkData[i - 1].offset : 0; - int elementCount = chunkData[i].offset - firstIndex; - - for (int m = 0; m < elementCount; ++m) - { - combineInstances.Add(new CombineInstance - { - mesh = mesh, - transform = transformVertices ? transform * instanceTransforms[firstIndex + m] : instanceTransforms[firstIndex + m] - }); - } - } - } - - bakedMesh.CombineMeshes(combineInstances.ToArray(), true, true, false); - bakedMesh.RecalculateBounds(); - - } - } -} diff --git a/Assets/Obi/Scripts/Common/Rendering/RenderBatches/InstanceRenderBatch.cs.meta b/Assets/Obi/Scripts/Common/Rendering/RenderBatches/InstanceRenderBatch.cs.meta deleted file mode 100644 index 9c35abb11..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/RenderBatches/InstanceRenderBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 74d879a363c7040229e215fe6c48a581 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Rendering/RenderBatches/ProceduralRenderBatch.cs b/Assets/Obi/Scripts/Common/Rendering/RenderBatches/ProceduralRenderBatch.cs deleted file mode 100644 index f43e853d4..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/RenderBatches/ProceduralRenderBatch.cs +++ /dev/null @@ -1,186 +0,0 @@ - -using UnityEngine; -using UnityEngine.Rendering; -using Unity.Collections; -using System.Collections.Generic; -using Unity.Collections.LowLevel.Unsafe; - -namespace Obi -{ - - public class ProceduralRenderBatch : IRenderBatch where T : struct - { - private RenderBatchParams renderBatchParams; - public RenderParams renderParams { get; private set; } - - public Material material; - public Mesh mesh; - - public int firstRenderer; - public int rendererCount; - - public int firstParticle; - - public NativeArray vertices; - public NativeArray triangles; - - public GraphicsBuffer gpuVertexBuffer; - public GraphicsBuffer gpuIndexBuffer; - - public int vertexCount; - public int triangleCount; - - public ProceduralRenderBatch(int rendererIndex, Material material, RenderBatchParams param) - { - this.renderBatchParams = param; - - this.material = material; - this.firstRenderer = rendererIndex; - this.firstParticle = 0; - this.rendererCount = 1; - this.vertexCount = 0; - this.triangleCount = 0; - } - - public void Initialize(VertexAttributeDescriptor[] layout, bool gpu = false) - { - var rp = renderBatchParams.ToRenderParams(); - rp.material = material; - renderParams = rp; - - mesh = new Mesh(); - - mesh.SetVertexBufferParams(vertexCount, layout); - mesh.SetIndexBufferParams(triangleCount * 3, IndexFormat.UInt32); - - vertices = new NativeArray(vertexCount, Allocator.Persistent); - mesh.SetVertexBufferData(vertices, 0, 0, vertices.Length, 0, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); - - triangles = new NativeArray(triangleCount * 3, Allocator.Persistent); - mesh.SetIndexBufferData(triangles, 0, 0, triangles.Length, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); - - mesh.subMeshCount = 1; - SubMeshDescriptor subMeshDescriptor = new SubMeshDescriptor(); - subMeshDescriptor.indexCount = triangleCount * 3; - mesh.SetSubMesh(0, subMeshDescriptor, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); - - if (gpu) - { - vertices.Dispose(); - triangles.Dispose(); - - mesh.vertexBufferTarget |= GraphicsBuffer.Target.Raw; - mesh.indexBufferTarget |= GraphicsBuffer.Target.Raw; - - // particles with no vertices will have no vertex buffer, and Unity will throw an exception. - if (mesh.vertexCount > 0) - { - gpuVertexBuffer ??= mesh.GetVertexBuffer(0); - gpuIndexBuffer ??= mesh.GetIndexBuffer(); - } - } - } - - public void Dispose() - { - gpuVertexBuffer?.Dispose(); - gpuIndexBuffer?.Dispose(); - - gpuVertexBuffer = null; - gpuIndexBuffer = null; - - if (vertices.IsCreated) - vertices.Dispose(); - if (triangles.IsCreated) - triangles.Dispose(); - - GameObject.DestroyImmediate(mesh); - } - - public bool TryMergeWith(IRenderBatch other) - { - var pbatch = other as ProceduralRenderBatch; - if (pbatch != null) - { - if (CompareTo(pbatch) == 0 && - vertexCount + pbatch.vertexCount < Constants.maxVertsPerMesh) - { - rendererCount += pbatch.rendererCount; - triangleCount += pbatch.triangleCount; - vertexCount += pbatch.vertexCount; - return true; - } - } - return false; - } - - public int CompareTo(IRenderBatch other) - { - var pbatch = other as ProceduralRenderBatch; int idA = material != null ? material.GetInstanceID() : 0; int idB = (pbatch != null && pbatch.material != null) ? pbatch.material.GetInstanceID() : 0; int result = idA.CompareTo(idB); if (result == 0) return renderBatchParams.CompareTo(pbatch.renderBatchParams); return result; - } - - public void BakeMesh(int vertexOffset, int vertexCount, int triangleOffset, int triangleCount, - Matrix4x4 transform, - ref Mesh bakedMesh, bool transformVertices = false) - { - - // if the data is not available in the CPU (such as when the batch is intended for GPU use), read it back: - bool gpu = !vertices.IsCreated; - if (gpu) - { - vertices = new NativeArray(this.vertexCount, Allocator.Persistent); - triangles = new NativeArray(this.triangleCount * 3, Allocator.Persistent); - AsyncGPUReadback.RequestIntoNativeArray(ref vertices, gpuVertexBuffer, this.vertexCount * UnsafeUtility.SizeOf(), 0).WaitForCompletion(); - AsyncGPUReadback.RequestIntoNativeArray(ref triangles, gpuIndexBuffer, this.triangleCount * 3 * 4, 0).WaitForCompletion(); - } - - bakedMesh.Clear(); - - bakedMesh.SetVertexBufferParams(vertexCount, mesh.GetVertexAttributes()); - bakedMesh.SetVertexBufferData(vertices, vertexOffset, 0, vertexCount, 0, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); - - // transform vertices from solver space to actor space: - if (transformVertices) - { - var solver2Actor = transform; - var verts = bakedMesh.vertices; - for (int v = 0; v < verts.Length; ++v) - verts[v] = solver2Actor.MultiplyPoint3x4(verts[v]); - bakedMesh.vertices = verts; - } - - ObiNativeList indices = new ObiNativeList(triangleCount * 3); - - // offset indices: - for (int i = 0; i < triangleCount * 3; ++i) - { - int index = triangles[triangleOffset * 3 + i] - vertexOffset; - - // clamp indices to zero, since decimated ropes have unused triangles - // that reference vertex 0. Subtracting the vertex offset from these results in a negative index. - indices.Add(Mathf.Max(0,index)); - } - - bakedMesh.SetIndexBufferParams(triangleCount * 3, IndexFormat.UInt32); - bakedMesh.SetIndexBufferData(indices.AsNativeArray(), 0, 0, triangleCount * 3, MeshUpdateFlags.DontRecalculateBounds | MeshUpdateFlags.DontValidateIndices); - - bakedMesh.subMeshCount = 1; - SubMeshDescriptor subMeshDescriptor = new SubMeshDescriptor(); - subMeshDescriptor.indexCount = triangleCount * 3; // mesh triangle count. - bakedMesh.SetSubMesh(0, subMeshDescriptor, MeshUpdateFlags.DontValidateIndices); - - if (gpu) - { - if (vertices.IsCreated) - vertices.Dispose(); - if (triangles.IsCreated) - triangles.Dispose(); - } - - bakedMesh.RecalculateBounds(); - return; - - } - } - -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Rendering/RenderBatches/ProceduralRenderBatch.cs.meta b/Assets/Obi/Scripts/Common/Rendering/RenderBatches/ProceduralRenderBatch.cs.meta deleted file mode 100644 index 326186ae2..000000000 --- a/Assets/Obi/Scripts/Common/Rendering/RenderBatches/ProceduralRenderBatch.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ded06625ac9f94b1fa77fd845bb28ec9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Solver.meta b/Assets/Obi/Scripts/Common/Solver.meta deleted file mode 100644 index be27f8436..000000000 --- a/Assets/Obi/Scripts/Common/Solver.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 9b70354c2a8424c0d85f24922c2fd48d -folderAsset: yes -timeCreated: 1448942583 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Solver/ObiActorEditorSelectionHandler.cs b/Assets/Obi/Scripts/Common/Solver/ObiActorEditorSelectionHandler.cs deleted file mode 100644 index 5f2ecf8d9..000000000 --- a/Assets/Obi/Scripts/Common/Solver/ObiActorEditorSelectionHandler.cs +++ /dev/null @@ -1,225 +0,0 @@ -using System.Collections.Generic; -using System.Linq; - -#if UNITY_EDITOR -using UnityEditor; -using UnityEditor.SceneManagement; -#endif -using UnityEngine; - -namespace Obi -{ - [ExecuteAlways] - public class ObiActorEditorSelectionHandler - { - private static HashSet solvers = new HashSet(); - private static ObiSolver clickedSolver; - private static int particleIndex; - - #if UNITY_EDITOR - internal static void SolverInitialized(ObiSolver solver) - { - if (solver != null) - { - if (solvers.Count == 0) - Init(); - - if (solver != null) - solvers.Add(solver); - } - - } - - internal static void SolverTeardown(ObiSolver solver) - { - if (solver != null) - { - solvers.Remove(solver); - - if (solvers.Count == 0) - Dispose(); - } - } - - internal static void Init() - { - SceneView.duringSceneGui += SceneGui; - } - - internal static void Dispose() - { - SceneView.duringSceneGui -= SceneGui; - } - - private static bool RaycastAgainstSolver(ObiSolver solver, Ray ray, float thickness, out int pIndex, out float distance) - { - float closestDistanceToRay = float.MaxValue; - pIndex = -1; - distance = float.MaxValue; - - Matrix4x4 solver2World = solver.transform.localToWorldMatrix; - - // Find the closest particle hit by the ray: - for (int i = 0; i < solver.activeParticleCount; ++i) - { - int p = solver.activeParticles[i]; - - Vector3 worldPos = solver2World.MultiplyPoint3x4(solver.positions[p]); - Vector3 projected = ObiUtils.ProjectPointLine(ray.origin, ray.origin + ray.direction, worldPos, out float mu, false); - - // Disregard particles behind the camera: - if (mu < 0) - continue; - - float radius = solver.principalRadii[p][0] + thickness; - float distanceToRay = Vector3.SqrMagnitude(worldPos - projected); - - if (distanceToRay <= radius * radius && - distanceToRay < closestDistanceToRay && - mu < closestDistanceToRay) - { - distance = mu; - closestDistanceToRay = distanceToRay; - pIndex = p; - } - } - - return pIndex >= 0; - } - - private static ObiSolver RaycastAllSolvers(Ray ray, out int pIndex, out float distance) - { - distance = float.MaxValue; - pIndex = -1; - - ObiSolver hitSolver = null; - - foreach (ObiSolver s in solvers) - { - if (s == null || !s.bounds.IntersectRay(ray)) - continue; - - if (RaycastAgainstSolver(s, ray, 0, out int p, out float d)) - { - if (d < distance) - { - distance = d; - hitSolver = s; - pIndex = p; - } - } - } - return hitSolver; - } - - private static void SceneGui(SceneView sceneView) - { - if (EditorApplication.isPaused || !ObiEditorSettings.GetOrCreateSettings().sceneViewParticlePicking) - return; - - // only do this in the main stage or prefab stage, if we're in any other stage don't raycast against particles. - // This will prevent selecting stuff when in the blueprint editor, avatar editor, or other stages. - var stage = StageUtility.GetCurrentStage(); - if (!(stage is MainStage) && !(stage is PrefabStage)) - return; - - var evt = Event.current; - - if (evt.alt) - return; - - float ppp = EditorGUIUtility.pixelsPerPoint; - int mouseScreenX = (int)(evt.mousePosition.x * ppp); - int mouseScreenY = (int)(evt.mousePosition.y * ppp); - - if (mouseScreenX < 0 || mouseScreenX >= sceneView.camera.pixelWidth || - mouseScreenY < 0 || mouseScreenY >= sceneView.camera.pixelHeight) - return; - - int controlID = GUIUtility.GetControlID(FocusType.Passive); - - switch (evt.type) - { - case EventType.Layout: - case EventType.MouseMove: - - if (!Tools.viewToolActive) - { - // Raycast against all solvers: - Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); - clickedSolver = RaycastAllSolvers(ray, out particleIndex, out float closest); - - // check whether we hit a collider before the closest particle in the solver: - RaycastHit hit; - ray = HandleUtility.GUIPointToWorldRay(evt.mousePosition); - if (Physics.Raycast(ray, out hit, closest) && hit.collider != null) - clickedSolver = null; - - // If we hit something, register our control ID and the distance to the particle: - if (clickedSolver != null && Camera.current != null) - { - var worldPos = clickedSolver.transform.TransformPoint(clickedSolver.positions[particleIndex]); - var screenCenter = HandleUtility.WorldToGUIPoint(worldPos); - - var distance = (Event.current.mousePosition - screenCenter).magnitude; - - HandleUtility.AddControl(controlID, distance); - - // AddDefaultControl means that if no other control is selected, this will be chosen as the fallback. - // This allows things like the translate handle and buttons to function. - HandleUtility.AddDefaultControl(controlID); - } - } - - break; - - case EventType.MouseDown: - - if (evt.button == 0 && HandleUtility.nearestControl == controlID && clickedSolver != null) - { - // Setting the hotControl tells the Scene View that this mouse down/up event cannot be considered - // a picking action because the event is in use. - GUIUtility.hotControl = controlID; - evt.Use(); - } - break; - - case EventType.MouseUp: - - if (!Tools.viewToolActive && GUIUtility.hotControl == controlID) - { - // In case we hit some actor, select the actor it belongs to: - if (clickedSolver != null) - { - var clickedActor = clickedSolver.particleToActor[particleIndex].actor; - if (clickedActor != null) - { - var selection = Selection.objects.ToList(); - - if (evt.shift || evt.control) - { - if (selection.Contains(clickedActor.gameObject)) - selection.Remove(clickedActor.gameObject); - else - selection.Add(clickedActor.gameObject); - } - else - { - selection.Clear(); - selection.Add(clickedActor.gameObject); - } - - Selection.objects = selection.ToArray(); - } - - GUIUtility.hotControl = 0; - evt.Use(); - } - } - - break; - } - } -#endif - } -} diff --git a/Assets/Obi/Scripts/Common/Solver/ObiActorEditorSelectionHandler.cs.meta b/Assets/Obi/Scripts/Common/Solver/ObiActorEditorSelectionHandler.cs.meta deleted file mode 100644 index 453641656..000000000 --- a/Assets/Obi/Scripts/Common/Solver/ObiActorEditorSelectionHandler.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: baf220f68f79740d3a4ee9fb6fa4d6f4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Solver/ObiRenderSystemStack.cs b/Assets/Obi/Scripts/Common/Solver/ObiRenderSystemStack.cs deleted file mode 100644 index d88159ff8..000000000 --- a/Assets/Obi/Scripts/Common/Solver/ObiRenderSystemStack.cs +++ /dev/null @@ -1,92 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Obi -{ - /** - * Render Systems are organized into a fixed number of tiers. Tiers are update sequentially from lower to highest, so systems on - * a higher tier may depend on the output of lower tier systems. - * All systems in the same tier might be updated in parallel. - */ - public class ObiRenderSystemStack - { - private List[] stack; - - public ObiRenderSystemStack(int tiers) - { - stack = new List[tiers]; - for (int i = 0; i < tiers; ++i) - stack[i] = new List(); - } - - public void Setup(int dirtyFlags) - { - foreach (var tier in stack) - foreach (var system in tier) - if ((dirtyFlags & (int)system.typeEnum) != 0) - system.Setup(); - } - - public void Step() - { - foreach (var tier in stack) - foreach (var system in tier) - system.Step(); - } - - public void Render() - { - foreach (var tier in stack) - foreach (var system in tier) - system.Render(); - } - - public bool RegisterRenderSystem(IRenderSystem renderSystem) - { - if (renderSystem != null) - { - // Here we don't check whether the render system already exists: - // We assume this is done before calling AddRenderSystem - // (by calling GetRenderSystem first). - // Otherwise, no guarantees a render system cannot be registered twice. - if (renderSystem.tier >= 0 && renderSystem.tier < stack.Length) - { - stack[renderSystem.tier].Add(renderSystem); - return true; - } - } - return false; - } - - public bool UnregisterRenderSystem(IRenderSystem renderSystem) - { - if (renderSystem != null) - { - if (renderSystem.tier >= 0 && renderSystem.tier < stack.Length) - { - stack[renderSystem.tier].Remove(renderSystem); - return true; - } - } - return false; - } - - public RenderSystem GetRenderSystem() where T : ObiRenderer - { - foreach (var tier in stack) - foreach (var system in tier) - if (system.GetRendererType() == typeof(T)) - return system as RenderSystem; - return null; - } - - public IRenderSystem GetRenderSystem(Oni.RenderingSystemType systemType) - { - foreach (var tier in stack) - foreach (var system in tier) - if (system.typeEnum == systemType) - return system as IRenderSystem; - return null; - } - } -} diff --git a/Assets/Obi/Scripts/Common/Solver/ObiRenderSystemStack.cs.meta b/Assets/Obi/Scripts/Common/Solver/ObiRenderSystemStack.cs.meta deleted file mode 100644 index 69b7e4540..000000000 --- a/Assets/Obi/Scripts/Common/Solver/ObiRenderSystemStack.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 789afc50914b2412e87a032744b17fd3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Solver/ObiSolver.cs b/Assets/Obi/Scripts/Common/Solver/ObiSolver.cs deleted file mode 100644 index 3e785f61d..000000000 --- a/Assets/Obi/Scripts/Common/Solver/ObiSolver.cs +++ /dev/null @@ -1,2531 +0,0 @@ -/** -\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] - [HelpURL("https://obi.virtualmethodstudio.com/manual/7.0/obisolver.html")] - 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 right before scheduling a simulation step, before updating active particles, constraints, etc.*/ - public event SolverStepCallback OnCollisionDetectionStart; /**< Called right after CPU->GPU data transfer, before scheduling collision detection and spatial queries.*/ - public event SolverStepCallback OnSubstepsStart; /**< Called right after scheduling collision detection and spatial queries, before scheduling substeps.*/ - public event SolverCallback OnRequestReadback; /**< Called right after scheduling all substeps (before completing simulation).*/ - public event SolverStepCallback OnSimulationEnd; /**< Called when a simulation step has been completed.*/ - public event SolverStepCallback OnInterpolate; /**< Called every frame after interpolation, right before updating rendering.*/ - - [Tooltip("If enabled, will force the solver to keep simulating even when not visible from any camera.")] - public bool simulateWhenInvisible = true; - - 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 bool useLimits = false; - public bool killOffLimitsParticles = false; - public Bounds boundaryLimits = new Bounds(Vector3.zero, new Vector3(10, 10, 10)); - - public Vector3 gravity = new Vector3(0, -9.81f, 0); - public Space gravitySpace = Space.Self; - - public Vector3 ambientWind = new Vector3(0, 0, 0); - public Space windSpace = Space.Self; - - [Min(1)] - public int foamSubsteps = 1; - - [Tooltip("Minimum amount of fluid particles around a foam particle necessary for the foam to be advected, instead of following a ballistic trajectory.")] - [Min(0)] - public int foamMinNeighbors = 3; - - [Tooltip("When enabled, each individual foam particle will be tested for collisions against ObiColliders.")] - public bool foamCollisions = false; - - [Tooltip("Foam particles can stretch along the direction of their velocity. This parameter controls the maximum amount of stretch.")] - [Range(0, 3)] - public float maxFoamVelocityStretch = 0.3f; - - [Tooltip("Scales the size of foam particles.")] - [Min(0)] - public float foamRadiusScale = 1; - - [Tooltip("Determines how foam particles fade in/out during its lifetime.")] - [MinMax(0, 1)] - public Vector2 foamFade = new Vector2(0.05f, 0.8f); - - [Tooltip("Determines the utilization % range in which particles age faster.")] - [MinMax(0, 1)] - public Vector2 foamAccelAgingRange = new Vector2(0.5f, 0.8f); - - [Tooltip("Determines the utilization % range in which particles age faster.")] - [Min(1)] - public float foamAccelAging = 4; - - [Tooltip("Color of the light scattered by foam.")] - [Min(0)] - public float foamVolumeDensity = 0.1f; - - [Tooltip("Color of the light scattered by foam.")] - [Min(0)] - public float foamAmbientDensity = 0.02f; - - [Tooltip("Color of the light scattered by foam.")] - public Color foamScatterColor = new Color(0.8f,0.75f,0.7f,1); - - [Tooltip("Color used for foam ambient lighting.")] - public Color foamAmbientColor = new Color(0.4f, 0.5f, 0.6f, 1); - - [Tooltip("How much does world-space linear inertia affect particles in the solver.")] - [Range(0, 1)] - public float 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 pinholeConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Parallel, 1); - public Oni.ConstraintParameters stitchConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Parallel, 1); - public Oni.ConstraintParameters densityConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Parallel, 1); - public Oni.ConstraintParameters stretchShearConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); - public Oni.ConstraintParameters bendTwistConstraintParameters = new Oni.ConstraintParameters(true, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); - public Oni.ConstraintParameters chainConstraintParameters = new Oni.ConstraintParameters(false, Oni.ConstraintParameters.EvaluationOrder.Sequential, 1); - - // rigidbodies: - 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; - [NonSerialized] private ObiNativeIntList m_DeadParticles; - - // 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; - - // 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 / pressure */ - [NonSerialized] private ObiNativeVector4List m_FluidMaterials2; /**< vorticity / vorticity diffusion / baroclinity / baroclinity diffusion */ - [NonSerialized] private ObiNativeVector4List m_FluidInterface; /**< drag / ambient pressure / buoyancy / miscibility */ - [NonSerialized] private ObiNativeVector4List m_UserData; - [NonSerialized] private 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; - } - } - - public ObiNativeIntList deadParticles - { - get - { - if (m_DeadParticles == null) - m_DeadParticles = new ObiNativeIntList(); - - return m_DeadParticles; - } - } - - #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 ObiNativeVector4List fluidMaterials2 - { - get - { - if (m_FluidMaterials2 == null) - m_FluidMaterials2 = new ObiNativeVector4List(); - return m_FluidMaterials2; - } - } - - 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) - { - // Wait for the previous frame's simulation to end and GPU data to be available. - if (bufferedSynchronization == Synchronization.Asynchronous) - CompleteSimulation(); - } - - if (bufferedSynchronization == Synchronization.SynchronousFixed) - { - // Update collider world: - ObiColliderWorld.GetInstance().SetDirty(); - ObiColliderWorld.GetInstance().UpdateWorld(Time.fixedDeltaTime); - - // kick off this step's simulation, and immediately wait for it to complete: - StartSimulation(Time.fixedDeltaTime, 1); - CompleteSimulation(); - } - - } - - private void Update() - { - ObiColliderWorld.GetInstance().SetDirty(); - } - - private void LateUpdate() - { - var scale = transform.lossyScale; - maxScale = Mathf.Max(Mathf.Max(scale.x, scale.y), scale.z); - - // Accumulate amount of time to simulate (duration of the frame - time already simulated) - if (Application.isPlaying) - { - // Make sure ObiColliderWorld updates after all solvers have called CompleteSimulation() on their FixedUpdate. - // This way we can be sure no physics updates are in flight. - // Only update acceleration structures and rigidbodies if a physics step will take place. - ObiColliderWorld.GetInstance().UpdateWorld(Time.fixedDeltaTime * steps, steps > 0 && bufferedSynchronization != Synchronization.SynchronousFixed); - - // Accumulate time and clamp it to a single timestep, in case the simulation is lagging behind rendering (dropping time). - accumulatedTime += Time.deltaTime - Time.fixedDeltaTime * steps; - accumulatedTime = Mathf.Clamp(accumulatedTime, 0, Time.fixedDeltaTime); - } - else - { - // if in editor, we don't accumulate any simulation time - // and just update solver bounds before rendering/simulation. - accumulatedTime = 0; - UpdateBounds(); - } - - if (bufferedSynchronization == Synchronization.Asynchronous || - bufferedSynchronization == Synchronization.SynchronousFixed) - Render(accumulatedTime); - - // if in play mode, kick off this frame's simulation. - if (Application.isPlaying && bufferedSynchronization != Synchronization.SynchronousFixed) - StartSimulation(Time.fixedDeltaTime, steps); - - if (bufferedSynchronization == Synchronization.Synchronous) - { - // if the simulation has been stepped this frame, - // sychronously wait for completion before rendering. - if (steps > 0) - CompleteSimulation(); - - Render(accumulatedTime); - } - - // Reset step counter to zero, now that - // simulation tasks for this frame have been dispatched. - steps = 0; - } - - private void OnApplicationQuit() - { - // Make sure solvers finish their simulation before Unity automatically destroys collider world - // when closing app or exiting play mode. - OnDestroy(); - } - - private void OnDestroy() - { - // 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(); - m_Constraints[(int)Oni.ConstraintType.Pinhole] = new ObiPinholeConstraintsData(); - - // 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(); - - // Force initial collider world update: - ObiColliderWorld.GetInstance().SetDirty(); - ObiColliderWorld.GetInstance().UpdateWorld(0); - ObiColliderWorld.GetInstance().SetDirty(); - - OnInitialize?.Invoke(this); - - // Set initial parameter values: - PushSolverParameters(); - -#if UNITY_EDITOR - ObiActorEditorSelectionHandler.SolverInitialized(this); -#endif - } - } - - 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(); - deadParticles.Dispose(); - simplices.Dispose(); - points.Dispose(); - edges.Dispose(); - triangles.Dispose(); - - colors.Dispose(); - cellCoords.Dispose(); - startPositions.Dispose(); - endPositions.Dispose(); - startOrientations.Dispose(); - endOrientations.Dispose(); - positions.Dispose(); - prevPositions.Dispose(); - restPositions.Dispose(); - 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(); - fluidMaterials2.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_DeadParticles = null; - m_Simplices = null; - m_Points = null; - m_Edges = null; - m_Triangles = null; - - m_Colors = null; - m_CellCoords = null; - m_Positions = null; - m_RestPositions = null; - m_PrevPositions = null; - m_StartPositions = null; - m_EndPositions = null; - m_RenderablePositions = null; - m_Orientations = null; - m_RestOrientations = null; - m_PrevOrientations = null; - m_StartOrientations = null; - m_EndOrientations = null; - m_RenderableOrientations = null; - m_Velocities = null; - m_AngularVelocities = null; - m_InvMasses = null; - m_InvRotationalMasses = null; - m_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_FluidMaterials2 = null; - m_FoamPositions = null; - m_FoamVelocities = null; - m_FoamColors = null; - m_FoamAttributes = null; - m_FoamCount = null; - m_Anisotropy = null; - m_ColliderContacts = null; - m_ParticleContacts = null; - m_ContactEffectiveMasses = null; - m_ParticleContactEffectiveMasses = null; - - m_BufferedQueryShapes = null; - m_BufferedQueryTransforms = null; - m_QueryShapes = null; - m_QueryTransforms = null; - m_QueryResults = null; - - deformableUVs = null; - deformableTriangles = null; - deformableEdges = null; - } - - private void EnsureParticleArraysCapacity(int count) - { - // only resize if the count is larger than the current amount of particles: - if (count >= positions.count) - { - colors.ResizeInitialized(count, Color.white); - deadParticles.ResizeInitialized(count); - startPositions.ResizeInitialized(count); - endPositions.ResizeInitialized(count); - positions.ResizeInitialized(count); - prevPositions.ResizeInitialized(count); - restPositions.ResizeInitialized(count); - startOrientations.ResizeInitialized(count, Quaternion.identity); - endOrientations.ResizeInitialized(count, Quaternion.identity); - orientations.ResizeInitialized(count, Quaternion.identity); - prevOrientations.ResizeInitialized(count, Quaternion.identity); - restOrientations.ResizeInitialized(count, Quaternion.identity); - 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); - fluidMaterials2.ResizeInitialized(count); - anisotropies.ResizeInitialized(count); - life.ResizeInitialized(count, float.PositiveInfinity); - 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); - - // reset dead particles counter to zero. - deadParticles.count = 0; - } - - 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(); - } - } - - private void NotifyDeceasedParticles() - { - deadParticles.WaitForReadback(); - - int dead = deadParticles.count; - for (int i = 0; i < dead; ++i) - { - int index = deadParticles[i]; - var pa = particleToActor[index]; - if (pa != null) - pa.actor.DeactivateParticle(pa.indexInActor); - } - - deadParticles.count = 0; - } - - public void StartSimulation(float stepDelta, int simulationSteps) - { - if (simulationSteps > 0) - { - // Complete previous simulation call, if any: - CompleteSimulation(); - - simulatedTime = stepDelta * simulationSteps; // physics time that has been simulated by Unity this frame. Might be more than the time we actually simulate, due to maxStepsPerFrame. - substepTime = stepDelta / substeps; // duration of a substep. - - // only update buffered synchronization before starting a new step. - bufferedSynchronization = synchronization; - - // notify actors of dead particles, so they can deactivate them. Do this before inserting new actors, - // as actor insertion might trigger a resizing of the deadParticles buffer. - NotifyDeceasedParticles(); - - // AddActor() calls are buffered, new actors should be inserted as this particular point in time: - while (addBuffer.TryDequeue(out ObiActor actor)) - InsertBufferedActor(actor); - - if (initialized && maxStepsPerFrame > 0) - { - simulationInFlight = true; - - int frameSubsteps = Mathf.Min(maxStepsPerFrame, simulationSteps) * substeps; // amount of substeps *actually* simulated this frame. - float timeToSimulate = frameSubsteps * substepTime; // amount of time we need to simulate, might be less than simulatedTime. - - UpdateFoamParticleCapacity(); - - // Update collision materials/rigidbodies after adding new actors to make sure collision materials are up to date. - // Also call it before SimulationStart, so that constraints referencing rigidbodies (such as Pin constraints in attachments) - // use handle data that's up to date. - using (m_UpdateColliderWorld.Auto()) - { - ObiColliderWorld.GetInstance().UpdateCollisionMaterials(); - EnsureRigidbodyArraysCapacity(ObiColliderWorld.GetInstance().rigidbodyHandles.Count); - } - - // We need SimulationStart to be called before PushConstraints for updating pin constraints. - OnSimulationStart?.Invoke(this, timeToSimulate, substepTime); - foreach (ObiActor actor in actors) - actor.SimulationStart(timeToSimulate, substepTime); - - // Update the active particles array: - PushActiveParticles(); - - // Update the simplices array: - PushSimplices(); - - // Update deformable triangles/edges arrays: - PushDeformableTriangles(); - PushDeformableEdges(); - - // Update constraint batches: - PushConstraints(); - - // Update parameters: - parameters.gravity = gravitySpace == Space.World ? transform.InverseTransformVector(gravity) : gravity; - parameters.ambientWind = windSpace == Space.World ? transform.InverseTransformVector(ambientWind) : ambientWind; - implementation.SetParameters(parameters); - - // Notify render systems that a step has started: - m_RenderSystems.Step(); - - // CPU -> GPU data transfer - implementation.PushData(); - - OnCollisionDetectionStart?.Invoke(this, timeToSimulate, substepTime); - foreach (ObiActor actor in actors) - actor.CollisionDetectionStart(timeToSimulate, substepTime); - - // Update inertial reference frame: - simulationHandle = UpdateTransformFrame(simulatedTime); - - // Calculate bounds and update particle lifetimes. - simulationHandle = implementation.UpdateBounds(simulationHandle, simulatedTime); - - // Perform collision detection: - if (simulateWhenInvisible || isVisible) - { - simulationHandle = implementation.CollisionDetection(simulationHandle, simulatedTime); - simulationHandle?.Complete(); // complete here, since several jobs need fluidParticles.Length. TODO: use deferred jobs. - } - - // Perform queued queries. This ensures queries "see" the same state as collision callbacks, and ensures no - // data races (queries performed while the simulation is running). - FlushSpatialQueries(); - - OnSubstepsStart?.Invoke(this, timeToSimulate, substepTime); - foreach (ObiActor actor in actors) - actor.SubstepsStart(timeToSimulate, substepTime); - - // Divide each step into multiple substeps: - float timeLeft = simulatedTime; - for (int i = 0; i < frameSubsteps; ++i) - { - // Only update the solver if it is visible, or if we must simulate even when invisible. - if ((simulateWhenInvisible || isVisible) && initialized) - { - simulationHandle = implementation.Substep(simulationHandle, stepDelta, substepTime, simulationSteps, timeLeft); - } - timeLeft -= substepTime; - } - - timeSinceSimulationStart += timeToSimulate; - - // Request GPU data to be brought back to the CPU. - RequestReadback(); - } - } - } - - private void FlushSpatialQueries() - { - while (bufferedQueryShapes.count > 0) - { - // copy buffered queries to the lists used for performing the queries: - queryShapes.ResizeUninitialized(bufferedQueryShapes.count); - queryTransforms.ResizeUninitialized(bufferedQueryTransforms.count); - - queryShapes.CopyFrom(bufferedQueryShapes); - queryTransforms.CopyFrom(bufferedQueryTransforms); - - bufferedQueryShapes.Clear(); - bufferedQueryTransforms.Clear(); - - implementation.SpatialQuery(queryShapes, queryTransforms, queryResults); - queryResults.Readback(); - - if (synchronousSpatialQueries) - { - // Wait for query results right now and trigger query results event: - queryResults.WaitForReadback(); - OnSpatialQueryResults?.Invoke(this, queryResults); - } - } - } - - public void CompleteSimulation() - { - // if the solver is not yet initialized or there's no previous call to SimulationStart, return. - if (!initialized || !simulationInFlight) - return; - - // Make sure previous simulation call has completed. - simulationHandle?.Complete(); - - // Update physics state for rendering, and wait for GPU readbacks to finish. - implementation.FinishSimulation(); - - // Trigger simulation end callback, after GPU readbacks are completed but before query/collision callbacks. - OnSimulationEnd?.Invoke(this, simulatedTime, substepTime); - foreach (ObiActor actor in actors) - actor.SimulationEnd(simulatedTime, substepTime); - - // Update rigidbody velocities with the simulation results: - ObiColliderWorld.GetInstance().UpdateRigidbodyVelocities(this); - - // Trigger spatial query results: - if (!synchronousSpatialQueries) - { - queryResults.WaitForReadback(); - OnSpatialQueryResults?.Invoke(this, queryResults); - } - - // Trigger collision callbacks now that GPU data (including rigidbody velocity deltas) is available. - CollisionCallbacks(); - - simulationInFlight = false; - } - - /// - /// Performs physics state interpolation and updates rendering. - /// - /// Remaining time that could not be simulated during this frame (in seconds). This is used to interpolate physics state. - public void Render(float unsimulatedTime) - { - if (!initialized) - return; - - // Only perform interpolation if the solver is visible, or if we must simulate even when invisible. - if (simulateWhenInvisible || isVisible) - { - using (m_StateInterpolationPerfMarker.Auto()) - { - // interpolate physics state: - simulationHandle = implementation.ApplyInterpolation(simulationHandle, startPositions, startOrientations, Time.fixedDeltaTime, unsimulatedTime); - } - } - - simulationHandle?.Complete(); - - // test bounds against all cameras to update visibility. - UpdateVisibility(); - - OnInterpolate?.Invoke(this, simulatedTime, substepTime); - - foreach (ObiActor actor in actors) - actor.Interpolate(simulatedTime, substepTime); - - if (!Application.isPlaying) - { - // in-editor, actors update their positions/orientations in Interpolate when transformed, - // so we must copy them to the GPU: - positions.Upload(); - orientations.Upload(); - renderablePositions.Upload(); - renderableOrientations.Upload(); - } - - // Update render systems if dirty: - if (dirtyRendering != 0) - { - m_RenderSystems.Setup(dirtyRendering); - dirtyRendering = 0; - } - - // Only render if visible: - if (simulateWhenInvisible || isVisible) - m_RenderSystems.Render(); - } - - private void UpdateBounds() - { - // While in-editor, update active particles and simplices so that - // solver bounds are correct. - if (initialized) - { - PushActiveParticles(); - PushSimplices(); - - simulationHandle = UpdateTransformFrame(0); - simulationHandle = implementation.UpdateBounds(simulationHandle, 0); - simulationHandle?.Complete(); - } - } - - private void RequestReadback() - { - if (!initialized) - return; - - OnRequestReadback?.Invoke(this); - foreach (ObiActor actor in actors) - actor.RequestReadback(); - - implementation.RequestReadback(); - - // We must read the entire contacts buffer instead of the amount of contacts the CPU - // has from last frame, since we need to get both the counter value and the contacts data on the same - // frame. Alternative would be to read back amount of contacts from last frame, but that - // means we could find invalid/uninitialized contacts if the amount of contacts decreases from one frame to the next. - if (OnCollision != null) - colliderContacts.Readback(); - if (OnParticleCollision != null) - particleContacts.Readback(); - - if (OnAdvection != null) - { - foamPositions.Readback(); - foamVelocities.Readback(); - foamAttributes.Readback(); - foamColors.Readback(); - foamCount.Readback(); - } - } - - /// - /// Adds an actor to the solver. - /// - /// 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(); - - 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(); - - 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.Pinhole, ref pinholeConstraintParameters); - - 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.Pinhole: return pinholeConstraintParameters; - 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/Assets/Obi/Scripts/Common/Solver/ObiSolver.cs.meta b/Assets/Obi/Scripts/Common/Solver/ObiSolver.cs.meta deleted file mode 100644 index 3ba5ee78f..000000000 --- a/Assets/Obi/Scripts/Common/Solver/ObiSolver.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9d174fab52f0c4b8399f25d5c3ea524c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 4bb17fa3a0a95413a817e60391d26010, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils.meta b/Assets/Obi/Scripts/Common/Utils.meta deleted file mode 100644 index 7aa03e408..000000000 --- a/Assets/Obi/Scripts/Common/Utils.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 8114c2ae03b5c4118a326bc9805a3362 -folderAsset: yes -timeCreated: 1454882590 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/Attributes.meta b/Assets/Obi/Scripts/Common/Utils/Attributes.meta deleted file mode 100644 index 6222b7a09..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: b8154151b8aa747e3870dae448f70d4b -folderAsset: yes -timeCreated: 1511453393 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/Attributes/ChildrenOnly.cs b/Assets/Obi/Scripts/Common/Utils/Attributes/ChildrenOnly.cs deleted file mode 100644 index e8cecb044..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/ChildrenOnly.cs +++ /dev/null @@ -1,45 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/Attributes/ChildrenOnly.cs.meta b/Assets/Obi/Scripts/Common/Utils/Attributes/ChildrenOnly.cs.meta deleted file mode 100644 index 4217d036a..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/ChildrenOnly.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 37995b0258e3041208a4b13bd6feb31c -timeCreated: 1511965883 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/Attributes/DisplayAs.cs b/Assets/Obi/Scripts/Common/Utils/Attributes/DisplayAs.cs deleted file mode 100644 index 113dfa1f3..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/DisplayAs.cs +++ /dev/null @@ -1,26 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/Attributes/DisplayAs.cs.meta b/Assets/Obi/Scripts/Common/Utils/Attributes/DisplayAs.cs.meta deleted file mode 100644 index 4d1363d5f..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/DisplayAs.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: dd2e6690a4e514f0b93596b416ea6e1a -timeCreated: 1515069828 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/Attributes/Indent.cs b/Assets/Obi/Scripts/Common/Utils/Attributes/Indent.cs deleted file mode 100644 index 6454939d4..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/Indent.cs +++ /dev/null @@ -1,25 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/Attributes/Indent.cs.meta b/Assets/Obi/Scripts/Common/Utils/Attributes/Indent.cs.meta deleted file mode 100644 index ccaf4a244..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/Indent.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: a02d36b0684b3461fad08bed56e9798c -timeCreated: 1511529530 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/Attributes/InspectorButtonAttribute.cs b/Assets/Obi/Scripts/Common/Utils/Attributes/InspectorButtonAttribute.cs deleted file mode 100644 index 9378ce37f..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/InspectorButtonAttribute.cs +++ /dev/null @@ -1,56 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/Attributes/InspectorButtonAttribute.cs.meta b/Assets/Obi/Scripts/Common/Utils/Attributes/InspectorButtonAttribute.cs.meta deleted file mode 100644 index cc768a2eb..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/InspectorButtonAttribute.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: bada34fec41c44b4b90af1fe27ca7a95 -timeCreated: 1440029519 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/Attributes/LayerField.cs b/Assets/Obi/Scripts/Common/Utils/Attributes/LayerField.cs deleted file mode 100644 index 458d1b88f..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/LayerField.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using UnityEngine; -#if UNITY_EDITOR -using UnityEditor; -#endif - -namespace Obi{ - - [AttributeUsage(AttributeTargets.Field)] - public class LayerField : MultiPropertyAttribute - { -#if UNITY_EDITOR - public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) - { - property.intValue = EditorGUI.LayerField(position, label, property.intValue); - } -#endif - } - -} - diff --git a/Assets/Obi/Scripts/Common/Utils/Attributes/LayerField.cs.meta b/Assets/Obi/Scripts/Common/Utils/Attributes/LayerField.cs.meta deleted file mode 100644 index e7694c6c9..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/LayerField.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 636fa558efd1441fdbf787bdda34c53a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/Attributes/MinMaxAttribute.cs b/Assets/Obi/Scripts/Common/Utils/Attributes/MinMaxAttribute.cs deleted file mode 100644 index 1de1f01b6..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/MinMaxAttribute.cs +++ /dev/null @@ -1,41 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/Attributes/MinMaxAttribute.cs.meta b/Assets/Obi/Scripts/Common/Utils/Attributes/MinMaxAttribute.cs.meta deleted file mode 100644 index 9fce93301..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/MinMaxAttribute.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1ac8601bd46d146168b508598e8a4f8c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/Attributes/MultiDelayed.cs b/Assets/Obi/Scripts/Common/Utils/Attributes/MultiDelayed.cs deleted file mode 100644 index 8942696d6..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/MultiDelayed.cs +++ /dev/null @@ -1,29 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/Attributes/MultiDelayed.cs.meta b/Assets/Obi/Scripts/Common/Utils/Attributes/MultiDelayed.cs.meta deleted file mode 100644 index 7c1281814..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/MultiDelayed.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 17d0e7e43f7f844aba84497d6385c920 -timeCreated: 1511969575 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/Attributes/MultiPropertyAttribute.cs b/Assets/Obi/Scripts/Common/Utils/Attributes/MultiPropertyAttribute.cs deleted file mode 100644 index 8dc8923d8..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/MultiPropertyAttribute.cs +++ /dev/null @@ -1,97 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/Attributes/MultiPropertyAttribute.cs.meta b/Assets/Obi/Scripts/Common/Utils/Attributes/MultiPropertyAttribute.cs.meta deleted file mode 100644 index 9bda2a26b..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/MultiPropertyAttribute.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 71f4de68ec5de40edbf3e4f24c49ba18 -timeCreated: 1511952779 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/Attributes/MultiRange.cs b/Assets/Obi/Scripts/Common/Utils/Attributes/MultiRange.cs deleted file mode 100644 index dfb5a4c11..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/MultiRange.cs +++ /dev/null @@ -1,34 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/Attributes/MultiRange.cs.meta b/Assets/Obi/Scripts/Common/Utils/Attributes/MultiRange.cs.meta deleted file mode 100644 index 946d7f260..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/MultiRange.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: ab2178abf0a6343e19742febdd9784e3 -timeCreated: 1511954360 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/Attributes/SerializeProperty.cs b/Assets/Obi/Scripts/Common/Utils/Attributes/SerializeProperty.cs deleted file mode 100644 index b5863040f..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/SerializeProperty.cs +++ /dev/null @@ -1,168 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/Attributes/SerializeProperty.cs.meta b/Assets/Obi/Scripts/Common/Utils/Attributes/SerializeProperty.cs.meta deleted file mode 100644 index ce59fb050..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/SerializeProperty.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 9b22b3eff389444b1b4ab3bc2d6402b6 -timeCreated: 1511456560 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/Attributes/VisibleIf.cs b/Assets/Obi/Scripts/Common/Utils/Attributes/VisibleIf.cs deleted file mode 100644 index 16920a9b1..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/VisibleIf.cs +++ /dev/null @@ -1,63 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/Attributes/VisibleIf.cs.meta b/Assets/Obi/Scripts/Common/Utils/Attributes/VisibleIf.cs.meta deleted file mode 100644 index c89b2e179..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Attributes/VisibleIf.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: e52da649989a94da8b1a5d1e1fe5ff8a -timeCreated: 1511456085 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/Coroutines.meta b/Assets/Obi/Scripts/Common/Utils/Coroutines.meta deleted file mode 100644 index 3ceb9d3e4..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Coroutines.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 232dbc8dfe1624cc3ac35594884d0edd -folderAsset: yes -timeCreated: 1438097540 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/Coroutines/CoroutineJob.cs b/Assets/Obi/Scripts/Common/Utils/Coroutines/CoroutineJob.cs deleted file mode 100644 index 199ebcbee..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Coroutines/CoroutineJob.cs +++ /dev/null @@ -1,130 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/Coroutines/CoroutineJob.cs.meta b/Assets/Obi/Scripts/Common/Utils/Coroutines/CoroutineJob.cs.meta deleted file mode 100644 index ec16b06f3..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Coroutines/CoroutineJob.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: b34adb10b4f264b629f464bfc872d515 -timeCreated: 1438097545 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/Coroutines/EditorCoroutine.cs b/Assets/Obi/Scripts/Common/Utils/Coroutines/EditorCoroutine.cs deleted file mode 100644 index 7a7f83bb7..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Coroutines/EditorCoroutine.cs +++ /dev/null @@ -1,36 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/Coroutines/EditorCoroutine.cs.meta b/Assets/Obi/Scripts/Common/Utils/Coroutines/EditorCoroutine.cs.meta deleted file mode 100644 index 023fca34b..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Coroutines/EditorCoroutine.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 65c4fa737e0dc4ac8acb314d96b75115 -timeCreated: 1440488659 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/Forces.meta b/Assets/Obi/Scripts/Common/Utils/Forces.meta deleted file mode 100644 index bce277fbc..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Forces.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 57e51b62adcc84dc19a301be9ebf0e51 -folderAsset: yes -timeCreated: 1480348631 -licenseType: Store -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs b/Assets/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs deleted file mode 100644 index 23bd10b92..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs +++ /dev/null @@ -1,137 +0,0 @@ -using UnityEngine; - -namespace Obi -{ - [ExecuteInEditMode] - [RequireComponent(typeof(ObiCollider))] - public class ObiForceZone : MonoBehaviour - { - [SerializeProperty("sourceCollider")] - [SerializeField] private ObiCollider m_SourceCollider; - - protected ObiForceZoneHandle forcezoneHandle; - - /// - /// The ObiCollider this ObiForceZone should affect. - /// - /// This is automatically set when you first create the ObiForceZone component, but you can override it afterwards. - public ObiCollider SourceCollider - { - set - { - if (value != null && value.gameObject != this.gameObject) - { - Debug.LogError("The ObiCollider component must reside in the same GameObject as ObiForceZone."); - return; - } - - RemoveCollider(); - m_SourceCollider = value; - AddCollider(); - - } - get { return m_SourceCollider; } - } - - public ObiForceZoneHandle Handle - { - get - { - // don't check forcezoneHandle.isValid: - // CreateForceZone may defer creation, so we get a non-null, but invalid handle. - // If calling handle again right away before it becomes valid, it will call CreateForceZone again and create a second handle to the same zone. - if (forcezoneHandle == null) - { - var world = ObiColliderWorld.GetInstance(); - - // create the material: - forcezoneHandle = world.CreateForceZone(); - forcezoneHandle.owner = this; - } - return forcezoneHandle; - } - } - - public ForceZone.ZoneType type; - public ForceZone.ForceMode mode; - public float intensity; - - [Header("Damping")] - public ForceZone.DampingDirection dampingDir; - public float damping = 0; - - [Header("Falloff")] - public float minDistance; - public float maxDistance; - [Min(0)] - public float falloffPower = 1; - - [Header("Tint")] - public Color color = Color.clear; - - [Header("Pulse")] - public float pulseIntensity; - public float pulseFrequency; - public float pulseSeed; - - protected float intensityVariation; - - public void OnEnable() - { - forcezoneHandle = ObiColliderWorld.GetInstance().CreateForceZone(); - forcezoneHandle.owner = this; - FindSourceCollider(); - } - - public void OnDisable() - { - RemoveCollider(); - ObiColliderWorld.GetInstance().DestroyForceZone(forcezoneHandle); - } - - private void FindSourceCollider() - { - if (SourceCollider == null) - SourceCollider = GetComponent(); - else - AddCollider(); - } - - private void AddCollider() - { - if (m_SourceCollider != null) - m_SourceCollider.ForceZone = this; - } - - private void RemoveCollider() - { - if (m_SourceCollider != null) - m_SourceCollider.ForceZone = null; - } - - public virtual void UpdateIfNeeded() - { - if (!Handle.isValid) - return; - - var fc = ObiColliderWorld.GetInstance().forceZones[Handle.index]; - fc.type = type; - fc.mode = mode; - fc.intensity = intensity + intensityVariation; - fc.minDistance = minDistance; - fc.maxDistance = maxDistance; - fc.falloffPower = falloffPower; - fc.damping = damping; - fc.dampingDir = dampingDir; - fc.color = color; - ObiColliderWorld.GetInstance().forceZones[Handle.index] = fc; - } - - public void Update() - { - if (Application.isPlaying) - intensityVariation = Mathf.PerlinNoise(Time.time * pulseFrequency, pulseSeed) * pulseIntensity; - } - } -} - diff --git a/Assets/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs.meta b/Assets/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs.meta deleted file mode 100644 index b0a77b8f4..000000000 --- a/Assets/Obi/Scripts/Common/Utils/Forces/ObiForceZone.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4978a525b6164476d96f5d28d8b309f8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: d7b67d3b64785476bb7520aa3190fee3, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/ObiContactEventDispatcher.cs b/Assets/Obi/Scripts/Common/Utils/ObiContactEventDispatcher.cs deleted file mode 100644 index 6e67c4a1c..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiContactEventDispatcher.cs +++ /dev/null @@ -1,151 +0,0 @@ -using UnityEngine; -using UnityEngine.Events; -using Unity.Collections; -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(x, y, solver); - } - } - - private static int CompareByRef(Oni.Contact a, 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(ObiNativeContactList 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) - data.Swap(i, --filteredCount); - - return filteredCount; - } - - private int RemoveDuplicates(ObiNativeContactList 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(data[i], data[r], solver) != 0 && ++r != i) - data[r] = data[i]; - - return ++r; - } - - private void InvokeCallbacks(ObiNativeContactList 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(data[a], 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) - { - // skip all contacts above the distance threshold by moving them to the end of the array: - int filteredCount = FilterOutDistantContacts(contacts, contacts.count); - - // sort the remaining contacts by collider, then by actor: - contacts.AsNativeArray().Slice(0,filteredCount).Sort(comparer); - - // remove duplicates: - filteredCount = RemoveDuplicates(contacts, filteredCount); - - // zip trough the current and previous contact lists once, invoking events when appropiate. - InvokeCallbacks(contacts, filteredCount); - - // store current contact list/count for next frame. - // could get better performance by double buffering instead of copying: - if (filteredCount > prevData.Length) - Array.Resize(ref prevData, filteredCount); - - contacts.CopyTo(prevData, 0, filteredCount); - - prevCount = filteredCount; - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Utils/ObiContactEventDispatcher.cs.meta b/Assets/Obi/Scripts/Common/Utils/ObiContactEventDispatcher.cs.meta deleted file mode 100644 index 35dc302ef..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiContactEventDispatcher.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e94f08d8fe9ed4bdcbc71dde235e0ac1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/ObiContactGrabber.cs b/Assets/Obi/Scripts/Common/Utils/ObiContactGrabber.cs deleted file mode 100644 index caadb3b8b..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiContactGrabber.cs +++ /dev/null @@ -1,178 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/ObiContactGrabber.cs.meta b/Assets/Obi/Scripts/Common/Utils/ObiContactGrabber.cs.meta deleted file mode 100644 index d3efd9752..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiContactGrabber.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4aa46c433c6d64b07bdfa8b2e40b03b9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/ObiFoamEmitter.cs b/Assets/Obi/Scripts/Common/Utils/ObiFoamEmitter.cs deleted file mode 100644 index f2419738b..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiFoamEmitter.cs +++ /dev/null @@ -1,39 +0,0 @@ -using UnityEngine; -using System; - -namespace Obi -{ - - [AddComponentMenu("Physics/Obi/Obi Foam Emitter", 1000)] - [ExecuteInEditMode] - [RequireComponent(typeof(ObiActor))] - [DisallowMultipleComponent] - public class ObiFoamEmitter : ObiFoamGenerator - { - public enum ShapeType - { - Cylinder = 0, - Box = 1 - } - - [Header("Emission shape")] - public ShapeType shape; - public Transform shapeTransform; - public Vector3 shapeSize = Vector3.one; - - private float emissionAccumulator = 0; - - public int GetParticleNumberToEmit(float deltaTime) - { - emissionAccumulator += foamGenerationRate * deltaTime; - int particles = (int)emissionAccumulator; - emissionAccumulator -= particles; - return particles; - } - - public void Reset() - { - emissionAccumulator = 0; - } - } -} diff --git a/Assets/Obi/Scripts/Common/Utils/ObiFoamEmitter.cs.meta b/Assets/Obi/Scripts/Common/Utils/ObiFoamEmitter.cs.meta deleted file mode 100644 index f626a9f32..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiFoamEmitter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3a2bd12c1cc9c45428b37635331065db -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: b7cec6e680e3a479ca03a89eccd4e052, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs b/Assets/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs deleted file mode 100644 index fe9cec91b..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs +++ /dev/null @@ -1,101 +0,0 @@ -using UnityEngine; -using System; - -namespace Obi -{ - /** - * Foam generators create diffuse particles in areas where certain conditions meet (high velocity constrasts, high vorticity, low density, high normal values, etc.). These particles - * are then advected trough the fluid velocity field. - */ - - [AddComponentMenu("Physics/Obi/Obi Foam Generator", 1000)] - [ExecuteInEditMode] - [RequireComponent(typeof(ObiActor))] - [DisallowMultipleComponent] - public class ObiFoamGenerator : MonoBehaviour, ObiActorRenderer - { - public ObiActor actor { get; private set; } - - [Header("Foam spawning")] - public float foamGenerationRate = 100; - public float foamPotential = 50; - - [Range(0,1)] - public float foamPotentialDiffusion = 0.95f; - public Vector2 velocityRange = new Vector2(2, 4); - public Vector2 vorticityRange = new Vector2(4, 8); - - [Header("Foam properties")] - public Light volumeLight; - public Color color = new Color(1,1,1,0.25f); - public float size = 0.02f; - [Range(0,1)] - public float sizeRandom = 0.2f; - public float lifetime = 5; - [Range(0, 1)] - public float lifetimeRandom = 0.2f; - - public float buoyancy = 0.5f; - - [Range(0, 1)] - public float drag = 0.5f; - - [Range(0, 1)] - public float atmosphericDrag = 0.5f; - - [Range(1, 50)] - public float airAging = 2; - - [Range(0, 1)] - public float isosurface = 0.02f; - - [Header("Density Control (Compute only)")] - [Range(0, 1)] - public float pressure = 1; - [Range(0, 1)] - public float density = 0.3f; - [Range(1, 4)] - public float smoothingRadius = 2.5f; - [Range(0, 1)] - public float viscosity = 0.5f; - [Min(0)] - public float surfaceTension = 2; - - public void Awake() - { - actor = GetComponent(); - } - - public void OnEnable() - { - ((ObiActorRenderer)this).EnableRenderer(); - } - - public void OnDisable() - { - ((ObiActorRenderer)this).DisableRenderer(); - } - - public void OnValidate() - { - ((ObiActorRenderer)this).SetRendererDirty(Oni.RenderingSystemType.FoamParticles); - } - - RenderSystem ObiRenderer.CreateRenderSystem(ObiSolver solver) - { - switch (solver.backendType) - { - -#if (OBI_BURST && OBI_MATHEMATICS && OBI_COLLECTIONS) - case ObiSolver.BackendType.Burst: return new BurstFoamRenderSystem(solver); -#endif - case ObiSolver.BackendType.Compute: - default: - - if (SystemInfo.supportsComputeShaders) - return new ComputeFoamRenderSystem(solver); - return null; - } - } - } -} diff --git a/Assets/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs.meta b/Assets/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs.meta deleted file mode 100644 index a26a9e659..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiFoamGenerator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 87b741a43af4845478fd8eff354a1510 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: b7cec6e680e3a479ca03a89eccd4e052, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/ObiIntegration.cs b/Assets/Obi/Scripts/Common/Utils/ObiIntegration.cs deleted file mode 100644 index 8c0f50135..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiIntegration.cs +++ /dev/null @@ -1,50 +0,0 @@ -using UnityEngine; -using System.Runtime.CompilerServices; - -namespace Obi -{ - public static class ObiIntegration - { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 IntegrateLinear(Vector4 position, Vector4 velocity, float dt) - { - return position + velocity * dt; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 DifferentiateLinear(Vector4 position, Vector4 prevPosition, float dt) - { - return (position - prevPosition) / dt; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Quaternion AngularVelocityToSpinQuaternion(Quaternion rotation, Vector4 angularVelocity, float dt) - { - var delta = new Quaternion(angularVelocity.x, - angularVelocity.y, - angularVelocity.z, 0); - - var rot = delta * rotation; - var v = new Vector4(rot.x, rot.y, rot.z, rot.w) * 0.5f * dt; - return new Quaternion(v.x, v.y, v.z, v.w); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Quaternion IntegrateAngular(Quaternion rotation, Vector4 angularVelocity, float dt) - { - var spin = AngularVelocityToSpinQuaternion(rotation, angularVelocity, dt); - rotation.x += spin.x; - rotation.y += spin.y; - rotation.z += spin.z; - rotation.w += spin.w; - return rotation.normalized; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static Vector4 DifferentiateAngular(Quaternion rotation, Quaternion prevRotation, float dt) - { - var delta = rotation * Quaternion.Inverse(prevRotation); - return new Vector4(delta.x, delta.y, delta.z, 0) * 2.0f / dt; - } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/Common/Utils/ObiIntegration.cs.meta b/Assets/Obi/Scripts/Common/Utils/ObiIntegration.cs.meta deleted file mode 100644 index 819d6050c..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiIntegration.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: dbcd2b1cce6ff448ebca664dd6c55e2d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/ObiParticleAttachment.cs b/Assets/Obi/Scripts/Common/Utils/ObiParticleAttachment.cs deleted file mode 100644 index 3cd2b72d6..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiParticleAttachment.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; using UnityEngine; namespace Obi { [AddComponentMenu("Physics/Obi/Obi Particle Attachment", 820)] [RequireComponent(typeof(ObiActor))] [ExecuteInEditMode] public class ObiParticleAttachment : MonoBehaviour { public enum AttachmentType { Static, Dynamic } [SerializeField] [HideInInspector] private ObiActor m_Actor; [SerializeField] [HideInInspector] private Transform m_Target; [SerializeField] [HideInInspector] private ObiParticleGroup m_ParticleGroup; [SerializeField] [HideInInspector] private AttachmentType m_AttachmentType = AttachmentType.Static; [SerializeField] [HideInInspector] private bool m_ConstrainOrientation = false; - [SerializeField] [HideInInspector] private bool m_Projection = false; [SerializeField] [HideInInspector] private float m_Compliance = 0; - - // private variables are serialized during script reloading, to keep their value. Must mark them explicitly as non-serialized. - [NonSerialized] private ObiPinConstraintsBatch pinBatch; [NonSerialized] private ObiColliderBase attachedCollider; [NonSerialized] private int attachedColliderHandleIndex; [NonSerialized] private 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); } } } - - /// /// Should this dynamic attachment project renderable particle positions every frame to the target? /// public bool projection { get { return m_Projection; } set { if (value != m_Projection) { DisableAttachment(m_AttachmentType); m_Projection = value; EnableAttachment(m_AttachmentType); } } } - - /// /// Constraint compliance, in case this attachment is dynamic. /// /// High compliance values will increase the attachment's elasticity. public float compliance { get { return m_Compliance; } set { if (!Mathf.Approximately(value, m_Compliance)) { m_Compliance = value; if (m_AttachmentType == AttachmentType.Dynamic && pinBatch != null) { for (int i = 0; i < m_SolverIndices.Length; ++i) pinBatch.stiffnesses[i * 2] = m_Compliance; } } } } - - /// /// Force thershold above which the attachment should break. /// /// Only affects dynamic attachments, as static attachments do not work with forces. [Delayed] public float breakThreshold = float.PositiveInfinity; private void OnEnable() { m_Actor = GetComponent(); m_Actor.OnBlueprintLoaded += Actor_OnBlueprintLoaded; m_Actor.OnSimulationStart += Actor_OnSimulate; if (m_Actor.solver != null) Actor_OnBlueprintLoaded(m_Actor, m_Actor.sourceBlueprint); EnableAttachment(m_AttachmentType); } - - 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, projection); pinBatch.activeConstraintCount++; } - - // add the batch to the actor: - pins.AddBatch(pinBatch); - - // store the attached collider's handle: - attachedColliderHandleIndex = -1; if (attachedCollider.Handle != null) attachedColliderHandleIndex = attachedCollider.Handle.index; m_Actor.SetConstraintsDirty(Oni.ConstraintType.Pin); } break; case AttachmentType.Static: for (int i = 0; i < m_SolverIndices.Length; ++i) if (m_SolverIndices[i] >= 0 && m_SolverIndices[i] < solver.invMasses.count) solver.invMasses[m_SolverIndices[i]] = 0; if (m_Actor.usesOrientedParticles && m_ConstrainOrientation) { for (int i = 0; i < m_SolverIndices.Length; ++i) if (m_SolverIndices[i] >= 0 && m_SolverIndices[i] < solver.invRotationalMasses.count) solver.invRotationalMasses[m_SolverIndices[i]] = 0; } m_Actor.UpdateParticleProperties(); break; } } } private void DisableAttachment(AttachmentType type) { if (isBound) { switch (type) { case AttachmentType.Dynamic: if (pinBatch != null) { var pins = m_Actor.GetConstraintsByType(Oni.ConstraintType.Pin) as ObiConstraints; if (pins != null) { pins.RemoveBatch(pinBatch); if (actor.isLoaded) m_Actor.SetConstraintsDirty(Oni.ConstraintType.Pin); } attachedCollider = null; pinBatch = null; attachedColliderHandleIndex = -1; } break; case AttachmentType.Static: var solver = m_Actor.solver; var blueprint = m_Actor.sourceBlueprint; for (int i = 0; i < m_SolverIndices.Length; ++i) { int solverIndex = m_SolverIndices[i]; if (solverIndex >= 0 && solverIndex < solver.invMasses.count) solver.invMasses[solverIndex] = blueprint.invMasses[i]; } if (m_Actor.usesOrientedParticles) { for (int i = 0; i < m_SolverIndices.Length; ++i) { int solverIndex = m_SolverIndices[i]; if (solverIndex >= 0 && solverIndex < solver.invRotationalMasses.count) solver.invRotationalMasses[solverIndex] = blueprint.invRotationalMasses[i]; } } m_Actor.UpdateParticleProperties(); break; } } } private void UpdateAttachment() { if (enabled && m_Actor.isLoaded && isBound) { var solver = m_Actor.solver; switch (m_AttachmentType) { case AttachmentType.Dynamic: - - // 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 > breakThreshold) { 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/Assets/Obi/Scripts/Common/Utils/ObiParticleAttachment.cs.meta b/Assets/Obi/Scripts/Common/Utils/ObiParticleAttachment.cs.meta deleted file mode 100644 index 8ba6d24ea..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiParticleAttachment.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4d03c9194b7ab4aaba4dfa5afec22c69 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 528d201bc10084452b24974deb16a423, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/ObiParticleDragger.cs b/Assets/Obi/Scripts/Common/Utils/ObiParticleDragger.cs deleted file mode 100644 index 564490594..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiParticleDragger.cs +++ /dev/null @@ -1,84 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/ObiParticleDragger.cs.meta b/Assets/Obi/Scripts/Common/Utils/ObiParticleDragger.cs.meta deleted file mode 100644 index a950385e8..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiParticleDragger.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 30e140e2334fb4e2f9430c6ed936e4ca -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/ObiParticlePicker.cs b/Assets/Obi/Scripts/Common/Utils/ObiParticlePicker.cs deleted file mode 100644 index 8c2d7fdb9..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiParticlePicker.cs +++ /dev/null @@ -1,140 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/ObiParticlePicker.cs.meta b/Assets/Obi/Scripts/Common/Utils/ObiParticlePicker.cs.meta deleted file mode 100644 index 286f8912f..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiParticlePicker.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: db4318b9b044a420ba02ad5138d542e0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 0f9d020f7c659443a93327a34ede18b4, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/ObiStitcher.cs b/Assets/Obi/Scripts/Common/Utils/ObiStitcher.cs deleted file mode 100644 index e7c95e84b..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiStitcher.cs +++ /dev/null @@ -1,240 +0,0 @@ -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; - [HideInInspector] public ObiNativeFloatList stiffnesses; - [HideInInspector] public ObiNativeFloatList lambdas; - - //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; - - particleIndices = new ObiNativeIntList(); - stiffnesses = new ObiNativeFloatList(); - lambdas = new ObiNativeFloatList(); - - // create a constraint batch (CreateStitchConstraints() in burst returns a singleton): - m_BatchImpl = solver.implementation.CreateConstraintsBatch(Oni.ConstraintType.Stitch) as IStitchConstraintsBatchImpl; - - // 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) - { - lambdas.Dispose(); - particleIndices.Dispose(); - stiffnesses.Dispose(); - - 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/Assets/Obi/Scripts/Common/Utils/ObiStitcher.cs.meta b/Assets/Obi/Scripts/Common/Utils/ObiStitcher.cs.meta deleted file mode 100644 index 64a1aa9c2..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiStitcher.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/ObiUtils.cs b/Assets/Obi/Scripts/Common/Utils/ObiUtils.cs deleted file mode 100644 index a3e1a1966..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiUtils.cs +++ /dev/null @@ -1,114 +0,0 @@ -using UnityEngine; using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using System.IO; namespace Obi { public static class Constants { public const int maxVertsPerMesh = 65000; public const int maxInstancesPerBatch = 1023; } public static class ObiUtils { public const float epsilon = 0.0000001f; public const float sqrt3 = 1.73205080f; public const float sqrt2 = 1.41421356f; public const int FilterMaskBitmask = unchecked((int)0xffff0000); public const int FilterCategoryBitmask = 0x0000ffff; public const int ParticleGroupBitmask = 0x00ffffff; public const int CollideWithEverything = 0x0000ffff; public const int CollideWithNothing= 0x0; public const int MaxCategory = 15; public const int MinCategory = 0; [Flags] public enum ParticleFlags { SelfCollide = 1 << 24, Fluid = 1 << 25, OneSided = 1 << 26, Isolated = 1 << 27 // particles that are not part of persistent constraints and can be deleted without ill effects: fluids and granulars - } // Colour alphabet from https://www.aic-color.org/resources/Documents/jaic_v5_06.pdf public static readonly Color32[] colorAlphabet = { new Color32(240,163,255,255), new Color32(0,117,220,255), new Color32(153,63,0,255), new Color32(76,0,92,255), new Color32(25,25,25,255), new Color32(0,92,49,255), new Color32(43,206,72,255), new Color32(255,204,153,255), new Color32(128,128,128,255), new Color32(148,255,181,255), new Color32(143,124,0,255), new Color32(157,204,0,255), new Color32(194,0,136,255), new Color32(0,51,128,255), new Color32(255,164,5,255), new Color32(255,168,187,255), new Color32(66,102,0,255), new Color32(255,0,16,255), new Color32(94,241,242,255), new Color32(0,153,143,255), new Color32(224,255,102,255), new Color32(116,10,255,255), new Color32(153,0,0,255), new Color32(255,255,128,255), new Color32(255,255,0,255), new Color32(255,80,5,255) }; public static readonly string[] categoryNames = { "0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15" }; - - // Based on Kubelka-Munk theory: https://vanity-ibex.xyz/blog/kubelka_munk_colormixing/ - public static Color RGBToAbsorption(this Color rgb) - { - // S (scattering) is assumed to be 1 for all channels - Color k; - k.r = Mathf.Pow(1 - rgb.r, 2) / (2 * rgb.r + epsilon); - k.g = Mathf.Pow(1 - rgb.g, 2) / (2 * rgb.g + epsilon); - k.b = Mathf.Pow(1 - rgb.b, 2) / (2 * rgb.b + epsilon); - k.a = rgb.a; - return k; - } - - // Based on Kubelka-Munk theory: https://vanity-ibex.xyz/blog/kubelka_munk_colormixing/ - public static Color AbsorptionToRGB(this Color k) - { - // Assuming S=1 for all channels - Color rgb; - rgb.r = 1 + k.r - Mathf.Sqrt(k.r * (k.r + 2)); - rgb.g = 1 + k.g - Mathf.Sqrt(k.g * (k.g + 2)); - rgb.b = 1 + k.b - Mathf.Sqrt(k.b * (k.b + 2)); - rgb.a = k.a; - return rgb; - } public static void DrawArrowGizmo(float bodyLenght, float bodyWidth, float headLenght, float headWidth) { float halfBodyLenght = bodyLenght * 0.5f; float halfBodyWidth = bodyWidth * 0.5f; // arrow body: Gizmos.DrawLine(new Vector3(halfBodyWidth, 0, -halfBodyLenght), new Vector3(halfBodyWidth, 0, halfBodyLenght)); Gizmos.DrawLine(new Vector3(-halfBodyWidth, 0, -halfBodyLenght), new Vector3(-halfBodyWidth, 0, halfBodyLenght)); Gizmos.DrawLine(new Vector3(-halfBodyWidth, 0, -halfBodyLenght), new Vector3(halfBodyWidth, 0, -halfBodyLenght)); // arrow head: Gizmos.DrawLine(new Vector3(halfBodyWidth, 0, halfBodyLenght), new Vector3(headWidth, 0, halfBodyLenght)); Gizmos.DrawLine(new Vector3(-halfBodyWidth, 0, halfBodyLenght), new Vector3(-headWidth, 0, halfBodyLenght)); Gizmos.DrawLine(new Vector3(0, 0, halfBodyLenght + headLenght), new Vector3(headWidth, 0, halfBodyLenght)); Gizmos.DrawLine(new Vector3(0, 0, halfBodyLenght + headLenght), new Vector3(-headWidth, 0, halfBodyLenght)); } - - public static 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; } public static Vector4 AsVector4(this Quaternion q) - { - return new Vector4(q.x,q.y,q.z,q.w); - } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float RestBendingConstraint(Vector3 positionA, Vector3 positionB, Vector3 positionC) { Vector3 center = (positionA + positionB + positionC) / 3; return (positionC - center).magnitude; } public static System.Collections.IEnumerable BilateralInterleaved(int count) { for (int i = 0; i < count; ++i) { if (i % 2 != 0) yield return count - (count % 2) - i; else yield return i; } } public static void BarycentricCoordinates(in Vector3 A, in Vector3 B, in Vector3 C, in Vector3 P, ref Vector3 bary) { // Compute vectors Vector3 v0 = C - A; Vector3 v1 = B - A; Vector3 v2 = P - A; // Compute dot products float dot00 = Vector3.Dot(v0,v0); float dot01 = Vector3.Dot(v0,v1); float dot02 = Vector3.Dot(v0,v2); float dot11 = Vector3.Dot(v1,v1); float dot12 = Vector3.Dot(v1,v2); // Compute barycentric coordinates float det = dot00 * dot11 - dot01 * dot01; if (Math.Abs(det) > 1E-38) { float u = (dot11 * dot02 - dot01 * dot12) / det; float v = (dot00 * dot12 - dot01 * dot02) / det; bary = new Vector3(1-u-v,v,u); } } public static void BarycentricInterpolation(in Vector3 p1, in Vector3 p2, in Vector3 p3, in Vector3 coords, out Vector3 result) { result.x = coords.x * p1.x + coords.y * p2.x + coords.z * p3.x; result.y = coords.x * p1.y + coords.y * p2.y + coords.z * p3.y; result.z = coords.x * p1.z + coords.y * p2.z + coords.z * p3.z; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float BarycentricInterpolation(float p1, float p2, float p3, Vector3 coords) { return coords[0] * p1 + coords[1] * p2 + coords[2] * p3; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float BarycentricExtrapolationScale(Vector3 coords) { return 1.0f / (coords[0] * coords[0] + coords[1] * coords[1] + coords[2] * coords[2]); } public static Vector3[] CalculateAngleWeightedNormals(Vector3[] vertices, int[] triangles) { Vector3[] normals = new Vector3[vertices.Length]; var normalBuffer = new Dictionary(); Vector3 v1, v2, v3, e1, e2; for (int i = 0; i < triangles.Length; i += 3) { v1 = vertices[triangles[i]]; v2 = vertices[triangles[i + 1]]; v3 = vertices[triangles[i + 2]]; if (!normalBuffer.ContainsKey(v1)) normalBuffer[v1] = Vector3.zero; if (!normalBuffer.ContainsKey(v2)) normalBuffer[v2] = Vector3.zero; if (!normalBuffer.ContainsKey(v3)) normalBuffer[v3] = Vector3.zero; e1 = v2 - v1; e2 = v3 - v1; normalBuffer[v1] += Vector3.Cross(e1,e2).normalized * Mathf.Acos(Vector3.Dot(e1.normalized, e2.normalized)); e1 = v3 - v2; e2 = v1 - v2; normalBuffer[v2] += Vector3.Cross(e1, e2).normalized * Mathf.Acos(Vector3.Dot(e1.normalized, e2.normalized)); e1 = v1 - v3; e2 = v2 - v3; normalBuffer[v3] += Vector3.Cross(e1, e2).normalized * Mathf.Acos(Vector3.Dot(e1.normalized, e2.normalized)); } for (int i = 0; i < vertices.Length; ++i) normals[i] = normalBuffer[vertices[i]].normalized; return normals; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int MakePhase(int group, ParticleFlags flags) { return (group & ParticleGroupBitmask) | (int)flags; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int GetGroupFromPhase(int phase) { return phase & ParticleGroupBitmask; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ParticleFlags GetFlagsFromPhase(int phase) { return (ParticleFlags)(phase & ~ParticleGroupBitmask); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int MakeFilter(int mask, int category) { return (mask << 16) | (1 << category); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int GetCategoryFromFilter(int filter) { return CountTrailingZeroes(filter & FilterCategoryBitmask); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static int GetMaskFromFilter(int filter) { return (filter & FilterMaskBitmask) >> 16; } public static void EigenSolve(Matrix4x4 D, out Vector3 S, out Matrix4x4 V) { // D is symmetric // S is a vector whose elements are eigenvalues // V is a matrix whose columns are eigenvectors S = EigenValues(D); Vector3 V0, V1, V2; if (S[0] - S[1] > S[1] - S[2]) { V0 = EigenVector(D, S[0]); if (S[1] - S[2] < epsilon) { V2 = V0.unitOrthogonal(); } else { V2 = EigenVector(D, S[2]); V2 -= V0 * Vector3.Dot(V0, V2); V2 = Vector3.Normalize(V2); } V1 = Vector3.Cross(V2, V0); } else { V2 = EigenVector(D, S[2]); if (S[0] - S[1] < epsilon) { V1 = V2.unitOrthogonal(); } else { V1 = EigenVector(D, S[1]); V1 -= V2 * Vector3.Dot(V2, V1); V1 = Vector3.Normalize(V1); } V0 = Vector3.Cross(V1, V2); } V = Matrix4x4.identity; V.SetColumn(0,V0); V.SetColumn(1,V1); V.SetColumn(2,V2); } static Vector3 unitOrthogonal(this Vector3 input) { // Find a vector to cross() the input with. if (!(input.x < input.z * epsilon) || !(input.y < input.z * epsilon)) { float invnm = 1 / Vector3.Magnitude(new Vector2(input.x,input.y)); return new Vector3(-input.y * invnm, input.x * invnm, 0); } else { float invnm = 1 / Vector3.Magnitude(new Vector2(input.y,input.z)); return new Vector3(0, -input.z * invnm, input.y * invnm); } } // D is symmetric, S is an eigen value static Vector3 EigenVector(Matrix4x4 D, float S) { // Compute a cofactor matrix of D - sI. Vector4 c0 = D.GetColumn(0); c0[0] -= S; Vector4 c1 = D.GetColumn(1); c1[1] -= S; Vector4 c2 = D.GetColumn(2); c2[2] -= S; // Use an upper triangle Vector3 c0p = new Vector3(c1[1] * c2[2] - c2[1] * c2[1], 0, 0); Vector3 c1p = new Vector3(c2[1] * c2[0] - c1[0] * c2[2], c0[0] * c2[2] - c2[0] * c2[0], 0); Vector3 c2p = new Vector3(c1[0] * c2[1] - c1[1] * c2[0], c1[0] * c2[0] - c0[0] * c2[1], c0[0] * c1[1] - c1[0] * c1[0]); // Get a column vector with a largest norm (non-zero). float C01s = c1p[0] * c1p[0]; float C02s = c2p[0] * c2p[0]; float C12s = c2p[1] * c2p[1]; Vector3 norm = new Vector3(c0p[0] * c0p[0] + C01s + C02s, C01s + c1p[1] * c1p[1] + C12s, C02s + C12s + c2p[2] * c2p[2]); // index of largest: int index = 0; if (norm[0] > norm[1] && norm[0] > norm[2]) index = 0; else if (norm[1] > norm[0] && norm[1] > norm[2]) index = 1; else index = 2; Vector3 V = Vector3.zero; // special case if (norm[index] < epsilon) { V[0] = 1; return V; } else if (index == 0) { V[0] = c0p[0]; V[1] = c1p[0]; V[2] = c2p[0]; } else if (index == 1) { V[0] = c1p[0]; V[1] = c1p[1]; V[2] = c2p[1]; } else { V = c2p; } return Vector3.Normalize(V); } static Vector3 EigenValues(Matrix4x4 D) { float one_third = 1 / 3.0f; float one_sixth = 1 / 6.0f; float three_sqrt = Mathf.Sqrt(3.0f); Vector3 c0 = D.GetColumn(0); Vector3 c1 = D.GetColumn(1); Vector3 c2 = D.GetColumn(2); float m = one_third * (c0[0] + c1[1] + c2[2]); // K is D - I*diag(S) float K00 = c0[0] - m; float K11 = c1[1] - m; float K22 = c2[2] - m; float K01s = c1[0] * c1[0]; float K02s = c2[0] * c2[0]; float K12s = c2[1] * c2[1]; float q = 0.5f * (K00 * (K11 * K22 - K12s) - K22 * K01s - K11 * K02s) + c1[0] * c2[1] * c0[2]; float p = one_sixth * (K00 * K00 + K11 * K11 + K22 * K22 + 2 * (K01s + K02s + K12s)); float p_sqrt = Mathf.Sqrt(p); float tmp = p * p * p - q * q; float phi = one_third * Mathf.Atan2(Mathf.Sqrt(Mathf.Max(0, tmp)), q); float phi_c = Mathf.Cos(phi); float phi_s = Mathf.Sin(phi); float sqrt_p_c_phi = p_sqrt * phi_c; float sqrt_p_3_s_phi = p_sqrt * three_sqrt * phi_s; float e0 = m + 2 * sqrt_p_c_phi; float e1 = m - sqrt_p_c_phi - sqrt_p_3_s_phi; float e2 = m - sqrt_p_c_phi + sqrt_p_3_s_phi; float aux; if (e0 > e1) { aux = e0; e0 = e1; e1 = aux; } if (e0 > e2) { aux = e0; e0 = e2; e2 = aux; } if (e1 > e2) { aux = e1; e1 = e2; e2 = aux; } return new Vector3(e2, e1, e0); } public static Vector3 GetPointCloudCentroid(List points) { Vector3 centroid = Vector3.zero; for (int i = 0; i < points.Count; ++i) centroid += points[i]; return centroid / points.Count; } public static void GetPointCloudAnisotropy(List points, float max_anisotropy, float radius, in Vector3 hint_normal, ref Vector3 centroid, ref Quaternion orientation, ref Vector3 principal_radii) { int count = points.Count; if (count < 2 || radius <= 0 || max_anisotropy <= 0) { principal_radii = Vector3.one * radius; orientation = Quaternion.identity; return; } centroid = GetPointCloudCentroid(points); // three columns of a 3x3 anisotropy matrix: Vector4 c0 = Vector4.zero, c1 = Vector4.zero, c2 = Vector4.zero; Matrix4x4 anisotropy = Matrix4x4.zero; // multiply offset by offset transposed, and add to matrix: for (int i = 0; i < count; i++) { Vector4 offset = points[i] - centroid; c0 += offset * offset[0]; c1 += offset * offset[1]; c2 += offset * offset[2]; } // calculate maximum absolute value: float max0 = Mathf.Max(Mathf.Max(Mathf.Abs(c0.x), Mathf.Abs(c0.y)), Mathf.Abs(c0.z)); float max1 = Mathf.Max(Mathf.Max(Mathf.Abs(c1.x), Mathf.Abs(c1.y)), Mathf.Abs(c1.z)); float max2 = Mathf.Max(Mathf.Max(Mathf.Abs(c2.x), Mathf.Abs(c2.y)), Mathf.Abs(c2.z)); float max = Mathf.Max(Mathf.Max(max0,max1), max2); // normalize matrix: if (max > epsilon) { c0 /= max; c1 /= max; c2 /= max; } anisotropy.SetColumn(0, c0); anisotropy.SetColumn(1, c1); anisotropy.SetColumn(2, c2); Matrix4x4 orientMat; EigenSolve(anisotropy, out principal_radii, out orientMat); // flip orientation if it is not in the same side as the hint normal: if (Vector3.Dot(orientMat.GetColumn(2),hint_normal) < 0) { orientMat.SetColumn(2,orientMat.GetColumn(2) * -1); orientMat.SetColumn(1,orientMat.GetColumn(1) * -1); } max = principal_radii[0]; principal_radii = Vector3.Max(principal_radii,Vector3.one * max/max_anisotropy) / max * radius; orientation = orientMat.rotation; } public static int MergeBatches(List batches, int count, bool trimExcess) where T : IRenderBatch { // merge batches (using a method similar to std::unique): int current = 0; for (int i = 1; i < count; ++i) { var resultBatch = batches[current]; // see if we can merge this batch: if (current != i) { - // if we can't merge with the current batch, - // advance to the next one. - if (!resultBatch.TryMergeWith(batches[i])) batches.Swap(++current, i); } } current++; // get rid of excess batches: if (trimExcess && current < batches.Count) batches.RemoveRange(current, batches.Count - current); return current; } public static int MergeBatches(List batches) where T : IRenderBatch { - return MergeBatches(batches, batches.Count, true); } public static void Concatenate(this MemoryStream ms, Vector3 v) { for (int i = 0; i < 3; ++i) { var b = BitConverter.GetBytes(v[i]); ms.Write(b, 0, b.Length); } } public static void Concatenate(this MemoryStream ms, Quaternion q) { for (int i = 0; i < 4; ++i) { var b = BitConverter.GetBytes(q[i]); ms.Write(b, 0, b.Length); } } public static void Concatenate(this MemoryStream ms, float f) { var b = BitConverter.GetBytes(f); ms.Write(b, 0, b.Length); } public static void Concatenate(this MemoryStream ms, int f) { var b = BitConverter.GetBytes(f); ms.Write(b, 0, b.Length); } public static uint Adler32(byte[] bytes) { const int mod = 65521; uint a = 1, b = 0; foreach (byte c in bytes) { a = (a + c) % mod; b = (b + a) % mod; } return (b << 16) | a; } - - 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/Assets/Obi/Scripts/Common/Utils/ObiUtils.cs.meta b/Assets/Obi/Scripts/Common/Utils/ObiUtils.cs.meta deleted file mode 100644 index 455098f6e..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiUtils.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: 8ac31071459b040f39f1d86300525ed4 -timeCreated: 1435569421 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/ObiVectorMath.cs b/Assets/Obi/Scripts/Common/Utils/ObiVectorMath.cs deleted file mode 100644 index 5be0c7eae..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiVectorMath.cs +++ /dev/null @@ -1,48 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/ObiVectorMath.cs.meta b/Assets/Obi/Scripts/Common/Utils/ObiVectorMath.cs.meta deleted file mode 100644 index fee9b11e9..000000000 --- a/Assets/Obi/Scripts/Common/Utils/ObiVectorMath.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6e41ed0a6b70c4f6bae2b72f0a3f89e4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Common/Utils/SetCategory.cs b/Assets/Obi/Scripts/Common/Utils/SetCategory.cs deleted file mode 100644 index 55ce6ceaf..000000000 --- a/Assets/Obi/Scripts/Common/Utils/SetCategory.cs +++ /dev/null @@ -1,38 +0,0 @@ -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/Assets/Obi/Scripts/Common/Utils/SetCategory.cs.meta b/Assets/Obi/Scripts/Common/Utils/SetCategory.cs.meta deleted file mode 100644 index e9c9e89a2..000000000 --- a/Assets/Obi/Scripts/Common/Utils/SetCategory.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 011ecd7e601cf4613b5b59bfd9d70895 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Obi.asmdef b/Assets/Obi/Scripts/Obi.asmdef deleted file mode 100644 index abde79cbb..000000000 --- a/Assets/Obi/Scripts/Obi.asmdef +++ /dev/null @@ -1,42 +0,0 @@ -{ - "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/Assets/Obi/Scripts/Obi.asmdef.meta b/Assets/Obi/Scripts/Obi.asmdef.meta deleted file mode 100644 index dba7c0b6c..000000000 --- a/Assets/Obi/Scripts/Obi.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: da7abd44cdeea48609605c1c2c9609c0 -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/Oni.cs b/Assets/Obi/Scripts/Oni.cs deleted file mode 100644 index b65575d0e..000000000 --- a/Assets/Obi/Scripts/Oni.cs +++ /dev/null @@ -1,252 +0,0 @@ -using UnityEngine; -using System; -using System.Collections; -using System.Runtime.InteropServices; -using Obi; - - -public static class Oni -{ - public const int ConstraintTypeCount = 18; - public const int ColliderShapeTypeCount = 7; - public const int QueryTypeCount = 3; - - public enum ConstraintType - { - Tether = 0, - Volume = 1, - Chain = 2, - Pinhole = 3, - Bending = 4, - Distance = 5, - ShapeMatching = 6, - BendTwist = 7, - StretchShear = 8, - Pin = 9, - ParticleCollision = 10, - Density = 11, - Collision = 12, - Skin = 13, - Aerodynamics = 14, - Stitch = 15, - ParticleFriction = 16, - Friction = 17, - }; - - [Flags] - public enum RenderingSystemType - { - None = 0, - PathSmoother = 1 << 0, - ExtrudedRope = 1 << 1, - ChainRope = 1 << 2, - LineRope = 1 << 3, - MeshRope = 1 << 4, - Cloth = 1 << 5, - SkinnedCloth = 1 << 6, - TearableCloth = 1 << 7, - Softbody = 1 << 8, - Fluid = 1 << 9, - Particles = 1 << 10, - InstancedParticles = 1 << 11, - FoamParticles = 1 << 12, - - AllSmoothedRopes = PathSmoother | ExtrudedRope | LineRope | MeshRope, - AllRopes = PathSmoother | ExtrudedRope | ChainRope | LineRope | MeshRope | Particles | InstancedParticles, - AllClothes = Cloth | SkinnedCloth | TearableCloth | Particles | InstancedParticles, - AllParticles = Fluid | Particles | InstancedParticles | FoamParticles - }; - - [Flags] - public enum SimplexType - { - None = 0, - Point = 1 << 0, - Edge = 1 << 1, - Triangle = 1 << 2, - All = ~0 - }; - - public enum ShapeType - { - 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; - - [Tooltip("Scales user data diffusion speed between nearby particles, for each of the 4 user data channels.")] - public Vector4 diffusionMask; - - public SolverParameters(Interpolation interpolation, Vector4 gravity) - { - this.mode = Mode.Mode3D; - this.gravity = gravity; - this.ambientWind = Vector3.zero; - this.interpolation = interpolation; - foamGravityScale = 1; - damping = 0; - shockPropagation = 0; - surfaceCollisionIterations = 8; - surfaceCollisionTolerance = 0.005f; - maxAnisotropy = 3; - maxDepenetration = 10; - sleepThreshold = 0.0005f; - maxVelocity = 50.0f; - maxAngularVelocity = 20.0f; - collisionMargin = 0.02f; - colliderCCD = 1; - particleCCD = 0; - diffusionMask = Vector4.one; - } - - } - - [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/Assets/Obi/Scripts/Oni.cs.meta b/Assets/Obi/Scripts/Oni.cs.meta deleted file mode 100644 index e878c1370..000000000 --- a/Assets/Obi/Scripts/Oni.cs.meta +++ /dev/null @@ -1,12 +0,0 @@ -fileFormatVersion: 2 -guid: df1db1289f87d47fb934d1fdb2ed9965 -timeCreated: 1442803224 -licenseType: Store -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod.meta b/Assets/Obi/Scripts/RopeAndRod.meta deleted file mode 100644 index b70af415b..000000000 --- a/Assets/Obi/Scripts/RopeAndRod.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: a5d5467b3dbba47dab7f72d43fcd6ebe -labels: -- ObiRope -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Actors.meta b/Assets/Obi/Scripts/RopeAndRod/Actors.meta deleted file mode 100644 index 225b63599..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Actors.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: abc784de05f944701a4dff27d147b35f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBone.cs b/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBone.cs deleted file mode 100644 index 83d722604..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBone.cs +++ /dev/null @@ -1,705 +0,0 @@ -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() - { - // TODO: guard against having another ObiBone above it in hierarchy. - 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(); - } - } - - internal override void LoadBlueprint() - { - base.LoadBlueprint(); - - // synchronously read required data from GPU: - solver.renderablePositions.Readback(false); - solver.renderableOrientations.Readback(false); - solver.orientations.Readback(false); - solver.angularVelocities.Readback(false); - - SetupRuntimeConstraints(); - ResetToCurrentShape(); - } - - internal override void UnloadBlueprint() - { - ResetParticles(); - CopyParticleDataToTransforms(); - base.UnloadBlueprint(); - } - - public override void RequestReadback() - { - base.RequestReadback(); - - solver.orientations.Readback(); - solver.angularVelocities.Readback(); - solver.renderablePositions.Readback(); - solver.renderableOrientations.Readback(); - } - - public override void SimulationEnd(float simulatedTime, float substepTime) - { - base.SimulationEnd(simulatedTime, substepTime); - - solver.orientations.WaitForReadback(); - solver.angularVelocities.WaitForReadback(); - solver.renderablePositions.WaitForReadback(); - solver.renderableOrientations.WaitForReadback(); - } - - private void SetupRuntimeConstraints() - { - 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 boneOverride = boneBlueprint.GetOverride(i, out float normalizedCoord); - var radii = Vector3.one * (boneOverride != null ? boneOverride.radius.Evaluate(normalizedCoord) : radius.Evaluate(normalizedCoord)); - boneBlueprint.principalRadii[i] = radii; - - if (isLoaded) - solver.principalRadii[solverIndices[i]] = radii; - } - } - - public void UpdateMasses() - { - for (int i = 0; i < particleCount; ++i) - { - var boneOverride = boneBlueprint.GetOverride(i, out float normalizedCoord); - var invMass = ObiUtils.MassToInvMass(boneOverride != null ? boneOverride .mass.Evaluate(normalizedCoord) : mass.Evaluate(normalizedCoord)); - var invRotMass = ObiUtils.MassToInvMass(boneOverride != null ? boneOverride.rotationalMass.Evaluate(normalizedCoord) : rotationalMass.Evaluate(normalizedCoord)); - - boneBlueprint.invMasses[i] = invMass; - boneBlueprint.invRotationalMasses[i] = invRotMass; - - if (isLoaded) - { - solver.invMasses[solverIndices[i]] = invMass; - solver.invRotationalMasses[solverIndices[i]] = invRotMass; - } - } - } - - public Vector3 GetSkinRadiiBackstop(ObiSkinConstraintsBatch batch, int constraintIndex) - { - var boneOverride = boneBlueprint.GetOverride(batch.particleIndices[constraintIndex], out float normalizedCoord); - return new Vector3(boneOverride != null ? boneOverride.skinRadius.Evaluate(normalizedCoord) : skinRadius.Evaluate(normalizedCoord), 0, 0); - } - - public float GetSkinCompliance(ObiSkinConstraintsBatch batch, int constraintIndex) - { - var boneOverride = boneBlueprint.GetOverride(batch.particleIndices[constraintIndex], out float normalizedCoord); - return boneOverride != null ? boneOverride.skinCompliance.Evaluate(normalizedCoord) : skinCompliance.Evaluate(normalizedCoord); - } - - public Vector3 GetBendTwistCompliance(ObiBendTwistConstraintsBatch batch, int constraintIndex) - { - var boneOverride = boneBlueprint.GetOverride(batch.particleIndices[constraintIndex * 2], out float normalizedCoord); - - if (boneOverride != null) - return new Vector3(boneOverride.bend1Compliance.Evaluate(normalizedCoord), - boneOverride.bend2Compliance.Evaluate(normalizedCoord), - boneOverride.torsionCompliance.Evaluate(normalizedCoord)); - return new Vector3(bend1Compliance.Evaluate(normalizedCoord), - bend2Compliance.Evaluate(normalizedCoord), - torsionCompliance.Evaluate(normalizedCoord)); - } - - public Vector2 GetBendTwistPlasticity(ObiBendTwistConstraintsBatch batch, int constraintIndex) - { - var boneOverride = boneBlueprint.GetOverride(batch.particleIndices[constraintIndex * 2], out float normalizedCoord); - - if (boneOverride != null) - return new Vector2(boneOverride.plasticYield.Evaluate(normalizedCoord), - boneOverride.plasticCreep.Evaluate(normalizedCoord)); - return new Vector2(plasticYield.Evaluate(normalizedCoord), - plasticCreep.Evaluate(normalizedCoord)); - - } - - public Vector3 GetStretchShearCompliance(ObiStretchShearConstraintsBatch batch, int constraintIndex) - { - var boneOverride = boneBlueprint.GetOverride(batch.particleIndices[constraintIndex * 2], out float normalizedCoord); - - if (boneOverride != null) - return new Vector3(boneOverride.shear1Compliance.Evaluate(normalizedCoord), - boneOverride.shear2Compliance.Evaluate(normalizedCoord), - boneOverride.stretchCompliance.Evaluate(normalizedCoord)); - return new Vector3(shear1Compliance.Evaluate(normalizedCoord), - shear2Compliance.Evaluate(normalizedCoord), - stretchCompliance.Evaluate(normalizedCoord)); - } - - public float GetDrag(ObiAerodynamicConstraintsBatch batch, int constraintIndex) - { - var boneOverride = boneBlueprint.GetOverride(batch.particleIndices[constraintIndex], out float normalizedCoord); - return boneOverride != null ? boneOverride.drag.Evaluate(normalizedCoord) : drag.Evaluate(normalizedCoord); - } - - public float GetLift(ObiAerodynamicConstraintsBatch batch, int constraintIndex) - { - var boneOverride = boneBlueprint.GetOverride(batch.particleIndices[constraintIndex], out float normalizedCoord); - return boneOverride != null ? boneOverride.lift.Evaluate(normalizedCoord) : lift.Evaluate(normalizedCoord); - } - - public void FixedUpdate() - { - // This resets all bones not affected by animation, - // needs to happen once per frame at the very start before Animators are updated. - ResetReferenceOrientations(); - } - - public override void SimulationStart(float timeToSimulate, float substepTime) - { - base.SimulationStart(timeToSimulate, substepTime); - - if (fixRoot) - FixRoot(); - - 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/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBone.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBone.cs.meta deleted file mode 100644 index 10400fd35..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBone.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7be315bc5964b4fbca6cf0a978ff76a1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 0a18e0376cc184a9b96ebb3bf0175cc2, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBoneOverride.cs b/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBoneOverride.cs deleted file mode 100644 index f4a20adcd..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBoneOverride.cs +++ /dev/null @@ -1,192 +0,0 @@ -using UnityEngine; -using System; -using System.Collections.Generic; - -namespace Obi -{ - [AddComponentMenu("Physics/Obi/Obi Bone Override", 882)] - [ExecuteInEditMode] - [DisallowMultipleComponent] - public class ObiBoneOverride : MonoBehaviour - { - [SerializeField] protected ObiBone.BonePropertyCurve _radius = new ObiBone.BonePropertyCurve(0.1f, 1); - [SerializeField] protected ObiBone.BonePropertyCurve _mass = new ObiBone.BonePropertyCurve(0.1f, 1); - [SerializeField] protected ObiBone.BonePropertyCurve _rotationalMass = new ObiBone.BonePropertyCurve(0.1f, 1); - - // skin constraints: - [SerializeField] protected ObiBone.BonePropertyCurve _skinCompliance = new ObiBone.BonePropertyCurve(0.01f, 1); - [SerializeField] protected ObiBone.BonePropertyCurve _skinRadius = new ObiBone.BonePropertyCurve(0.1f, 1); - - // distance constraints: - [SerializeField] protected ObiBone.BonePropertyCurve _stretchCompliance = new ObiBone.BonePropertyCurve(0, 1); - [SerializeField] protected ObiBone.BonePropertyCurve _shear1Compliance = new ObiBone.BonePropertyCurve(0, 1); - [SerializeField] protected ObiBone.BonePropertyCurve _shear2Compliance = new ObiBone.BonePropertyCurve(0, 1); - - // bend constraints: - [SerializeField] protected ObiBone.BonePropertyCurve _torsionCompliance = new ObiBone.BonePropertyCurve(0, 1); - [SerializeField] protected ObiBone.BonePropertyCurve _bend1Compliance = new ObiBone.BonePropertyCurve(0, 1); - [SerializeField] protected ObiBone.BonePropertyCurve _bend2Compliance = new ObiBone.BonePropertyCurve(0, 1); - [SerializeField] protected ObiBone.BonePropertyCurve _plasticYield = new ObiBone.BonePropertyCurve(0, 1); - [SerializeField] protected ObiBone.BonePropertyCurve _plasticCreep = new ObiBone.BonePropertyCurve(0, 1); - - // aerodynamics - [SerializeField] protected ObiBone.BonePropertyCurve _drag = new ObiBone.BonePropertyCurve(0.05f, 1); - [SerializeField] protected ObiBone.BonePropertyCurve _lift = new ObiBone.BonePropertyCurve(0.02f, 1); - - /// - /// Particle radius distribution over this bone hierarchy length. - /// - public ObiBone.BonePropertyCurve radius - { - get { return _radius; } - set { _radius = value; bone.UpdateRadius(); } - } - - /// - /// Mass distribution over this bone hierarchy length. - /// - public ObiBone.BonePropertyCurve mass - { - get { return _mass; } - set { _mass = value; bone.UpdateMasses(); } - } - - /// - /// Rotational mass distribution over this bone hierarchy length. - /// - public ObiBone.BonePropertyCurve rotationalMass - { - get { return _rotationalMass; } - set { _rotationalMass = value; bone.UpdateMasses(); } - } - - /// - /// Compliance of this actor's skin constraints. - /// - public ObiBone.BonePropertyCurve skinCompliance - { - get { return _skinCompliance; } - set { _skinCompliance = value; bone.SetConstraintsDirty(Oni.ConstraintType.Skin); } - } - - /// - /// Compliance of this actor's skin radius - /// - public ObiBone.BonePropertyCurve skinRadius - { - get { return _skinRadius; } - set { _skinRadius = value; bone.SetConstraintsDirty(Oni.ConstraintType.Skin); } - } - - /// - /// Compliance of this actor's stretch/shear constraints, along their length. - /// - public ObiBone.BonePropertyCurve stretchCompliance - { - get { return _stretchCompliance; } - set { _stretchCompliance = value; bone.SetConstraintsDirty(Oni.ConstraintType.StretchShear); } - } - - /// - /// Shearing compliance of this actor's stretch/shear constraints, along the first axis orthogonal to their length. - /// - public ObiBone.BonePropertyCurve shear1Compliance - { - get { return _shear1Compliance; } - set { _shear1Compliance = value; bone.SetConstraintsDirty(Oni.ConstraintType.StretchShear); } - } - - /// - /// Shearing compliance of this actor's stretch/shear constraints, along the second axis orthogonal to their length. - /// - public ObiBone.BonePropertyCurve shear2Compliance - { - get { return _shear2Compliance; } - set { _shear2Compliance = value; bone.SetConstraintsDirty(Oni.ConstraintType.StretchShear); } - } - - /// - /// Torsional compliance of this actor's bend/twist constraints along their length. - /// - public ObiBone.BonePropertyCurve torsionCompliance - { - get { return _torsionCompliance; } - set { _torsionCompliance = value; bone.SetConstraintsDirty(Oni.ConstraintType.BendTwist); } - } - - /// - /// Bending compliance of this actor's bend/twist constraints along the first axis orthogonal to their length. - /// - public ObiBone.BonePropertyCurve bend1Compliance - { - get { return _bend1Compliance; } - set { _bend1Compliance = value; bone.SetConstraintsDirty(Oni.ConstraintType.BendTwist); } - } - - /// - /// Bending compliance of this actor's bend/twist constraints along the second axis orthogonal to their length. - /// - public ObiBone.BonePropertyCurve bend2Compliance - { - get { return _bend2Compliance; } - set { _bend2Compliance = value; bone.SetConstraintsDirty(Oni.ConstraintType.BendTwist); } - } - - /// - /// Threshold for plastic behavior. - /// - /// Once bending goes above this value, a percentage of the deformation (determined by ) will be permanently absorbed into the rod's rest shape. - public ObiBone.BonePropertyCurve plasticYield - { - get { return _plasticYield; } - set { _plasticYield = value; bone.SetConstraintsDirty(Oni.ConstraintType.BendTwist); } - } - - /// - /// Percentage of deformation that gets absorbed into the rest shape per second, once deformation goes above the threshold. - /// - public ObiBone.BonePropertyCurve plasticCreep - { - get { return _plasticCreep; } - set { _plasticCreep = value; bone.SetConstraintsDirty(Oni.ConstraintType.BendTwist); } - } - - /// - /// Aerodynamic drag value. - /// - public ObiBone.BonePropertyCurve drag - { - get { return _drag; } - set { _drag = value; bone.SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); } - } - - /// - /// Aerodynamic lift value. - /// - public ObiBone.BonePropertyCurve lift - { - get { return _lift; } - set { _lift = value; bone.SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); } - } - - private ObiBone bone; - - public void Awake() - { - bone = GetComponentInParent(); - } - - protected void OnValidate() - { - if (bone != null) - { - bone.UpdateRadius(); - bone.UpdateMasses(); - bone.SetConstraintsDirty(Oni.ConstraintType.Skin); - bone.SetConstraintsDirty(Oni.ConstraintType.StretchShear); - bone.SetConstraintsDirty(Oni.ConstraintType.BendTwist); - bone.SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); - } - } - } -} diff --git a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBoneOverride.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBoneOverride.cs.meta deleted file mode 100644 index 31a7fae95..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiBoneOverride.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: eed7ac246d14742e5a77c218f4e491ec -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 0a18e0376cc184a9b96ebb3bf0175cc2, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRod.cs b/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRod.cs deleted file mode 100644 index 5521ac86c..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRod.cs +++ /dev/null @@ -1,266 +0,0 @@ -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(); - } - - internal override void LoadBlueprint() - { - base.LoadBlueprint(); - RebuildElementsFromConstraints(); - SetupRuntimeConstraints(); - } - - public override void RequestReadback() - { - base.RequestReadback(); - solver.orientations.Readback(); - } - - public override void SimulationEnd(float simulatedTime, float substepTime) - { - base.SimulationEnd(simulatedTime, substepTime); - solver.orientations.WaitForReadback(); - } - - private void SetupRuntimeConstraints() - { - SetConstraintsDirty(Oni.ConstraintType.StretchShear); - SetConstraintsDirty(Oni.ConstraintType.BendTwist); - SetConstraintsDirty(Oni.ConstraintType.Chain); - SetConstraintsDirty(Oni.ConstraintType.Aerodynamics); - SetSelfCollisions(selfCollisions); - SetMassScale(m_MassScale); - 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/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRod.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRod.cs.meta deleted file mode 100644 index 4a9bd4922..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRod.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8f2bc32c4faf04f039a86a6e3cea12a1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 7125c3eebd3cc4f86aac51cca3ee1592, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRope.cs b/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRope.cs deleted file mode 100644 index 60d42359a..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRope.cs +++ /dev/null @@ -1,468 +0,0 @@ -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(); - } - - internal override void LoadBlueprint() - { - // create a copy of the blueprint for this cloth: - if (Application.isPlaying) - m_RopeBlueprintInstance = this.blueprint as ObiRopeBlueprint; - - base.LoadBlueprint(); - RebuildElementsFromConstraints(); - SetupRuntimeConstraints(); - } - - internal override void UnloadBlueprint() - { - base.UnloadBlueprint(); - - // 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); - SetMassScale(m_MassScale); - 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); - - OnRopeTorn?.Invoke(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/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRope.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRope.cs.meta deleted file mode 100644 index 988698833..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRope.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 61104f33a3f344db9b7e0d0cda41a9fb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 7a860725829a34375a627c13703f0798, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeBase.cs b/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeBase.cs deleted file mode 100644 index 0b2080748..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeBase.cs +++ /dev/null @@ -1,193 +0,0 @@ -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) - { - deformableEdgesOffset = deformableEdges.count / 2; - - var ropeBlueprint = sharedBlueprint as ObiRopeBlueprintBase; - if (ropeBlueprint != null && ropeBlueprint.deformableEdges != null) - { - // Send deformable edge indices to the solver: - for (int i = 0; i < ropeBlueprint.deformableEdges.Length; ++i) - deformableEdges.Add(solverIndices[ropeBlueprint.deformableEdges[i]]); - } - } - - public override int GetDeformableEdgeCount() - { - var ropeBlueprint = sharedBlueprint as ObiRopeBlueprintBase; - if (ropeBlueprint != null && ropeBlueprint.deformableEdges != null) - return ropeBlueprint.deformableEdges.Length / 2; - return 0; - } - - /// - /// Calculates and returns current rope length, including stretching/compression. - /// - 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; - } - - /// - /// Returns index of the edge that contains a length-normalized coordinate. It will also return the length-normalized coordinate within the edge. - /// - public int GetEdgeAt(float mu, out float elementMu) - { - elementMu = -1; - var ropeBlueprint = sharedBlueprint as ObiRopeBlueprintBase; - if (ropeBlueprint != null && ropeBlueprint.deformableEdges != null) - { - float edgeMu = ropeBlueprint.deformableEdges.Length/2 * Mathf.Clamp(mu, 0, 0.99999f); - - int index = (int)edgeMu; - elementMu = edgeMu - index; - - if (index < ropeBlueprint.deformableEdges.Length/2) - return index; - } - return -1; - } - - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeBase.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeBase.cs.meta deleted file mode 100644 index ee8114015..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeBase.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ab4d6f4281d1c4331b6bacd307c61a95 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeCursor.cs b/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeCursor.cs deleted file mode 100644 index bf2456a9a..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeCursor.cs +++ /dev/null @@ -1,288 +0,0 @@ -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) < ObiUtils.epsilon) - return; - - var solver = rope.solver; - - // remove: - if (lengthChange < 0) - { - lengthChange = -lengthChange; - - while (lengthChange > m_CursorElement.restLength) - { - lengthChange -= m_CursorElement.restLength; - - // if we subtracted the length of the last element, break out of the loop. - if (rope.elements.Count == 1) - break; - - int index = rope.elements.IndexOf(m_CursorElement); - - if (index >= 0) - { - // positive direction: - if (direction) - { - RemoveParticleAt(solver.particleToActor[m_CursorElement.particle2].indexInActor); - rope.elements.RemoveAt(index); - - if (index < rope.elements.Count) - { - 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: - { - RemoveParticleAt(solver.particleToActor[m_CursorElement.particle1].indexInActor); - rope.elements.RemoveAt(index); - - if (index > 0) - { - 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/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeCursor.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeCursor.cs.meta deleted file mode 100644 index 5656f2207..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Actors/ObiRopeCursor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8285ac97113f74d449053378d0e3a56b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 618cf36eb21e34118ac5697fe77e2c3e, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Blueprints.meta b/Assets/Obi/Scripts/RopeAndRod/Blueprints.meta deleted file mode 100644 index 7ac71eb2a..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Blueprints.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: acf7eb82de1d147128faa88b9cdb70d3 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiBoneBlueprint.cs b/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiBoneBlueprint.cs deleted file mode 100644 index f2f71727e..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiBoneBlueprint.cs +++ /dev/null @@ -1,372 +0,0 @@ -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; - } - - public ObiBoneOverride GetOverride(int particleIndex, out float normalizedLength) - { - int overrideIndex = particleIndex; - normalizedLength = normalizedLengths[overrideIndex]; - - while (overrideIndex >= 0) - { - if (transforms[overrideIndex].TryGetComponent(out ObiBoneOverride over)) - { - normalizedLength = 1 - (1 - normalizedLengths[particleIndex]) / Mathf.Max(ObiUtils.epsilon,1 - normalizedLengths[overrideIndex]); - return over; - } - - overrideIndex = parentIndices[overrideIndex]; - } - return null; - } - - protected override IEnumerator Initialize() - { - ClearParticleGroups(); - - 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; - - var group = ScriptableObject.CreateInstance(); - group.SetSourceBlueprint(this); - group.name = transforms[i].name; - group.particleIndices.Add(i); - groups.Add(group); - - if (i % 100 == 0) - yield return new CoroutineJob.ProgressInfo("ObiRod: generating particles...", i / (float)m_ActiveParticleCount); - } - - colorizer = new GraphColoring(m_ActiveParticleCount); - - // Deformable edges: - CreateDeformableEdges(); - - // Create edge simplices: - CreateSimplices(); - - // 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/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiBoneBlueprint.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiBoneBlueprint.cs.meta deleted file mode 100644 index cf8804720..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiBoneBlueprint.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1df6a43b2a0884e8da322992da465f32 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: d0123218ec6144d0983c099fc7339924, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRodBlueprint.cs b/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRodBlueprint.cs deleted file mode 100644 index e17ce9c15..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRodBlueprint.cs +++ /dev/null @@ -1,288 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRodBlueprint.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRodBlueprint.cs.meta deleted file mode 100644 index e866891f5..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRodBlueprint.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e028b099aa5d14e399bc3d87df5b7737 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: d0123218ec6144d0983c099fc7339924, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprint.cs b/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprint.cs deleted file mode 100644 index ce89d4028..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprint.cs +++ /dev/null @@ -1,236 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprint.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprint.cs.meta deleted file mode 100644 index cbe78e7a3..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprint.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8f7e67b5626124d0db9886e6cd2aacff -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: d0123218ec6144d0983c099fc7339924, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprintBase.cs b/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprintBase.cs deleted file mode 100644 index 36f2ac9d9..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprintBase.cs +++ /dev/null @@ -1,109 +0,0 @@ -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 % activeParticleCount; - deformableEdges[i * 2 + 1] = (i + 1) % activeParticleCount; - } - } - - protected void CreateSimplices(int numSegments) - { - edges = new int[numSegments * 2]; - for (int i = 0; i < numSegments; ++i) - { - edges[i * 2] = i % activeParticleCount; - edges[i * 2 + 1] = (i + 1) % activeParticleCount; - } - } - - protected override IEnumerator Initialize() { yield return null; } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprintBase.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprintBase.cs.meta deleted file mode 100644 index 06f453f10..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Blueprints/ObiRopeBlueprintBase.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4abe69b6abd2c4b0e8a621b8fba92dc9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures.meta deleted file mode 100644 index 6c6b110ce..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: fa3e31464f45342fc90509e4fcb00976 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiRopeSection.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiRopeSection.cs deleted file mode 100644 index be0c8eecb..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiRopeSection.cs +++ /dev/null @@ -1,52 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiRopeSection.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiRopeSection.cs.meta deleted file mode 100644 index b1bd8cc97..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiRopeSection.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiStructuralElement.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiStructuralElement.cs deleted file mode 100644 index bffb6c476..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiStructuralElement.cs +++ /dev/null @@ -1,16 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiStructuralElement.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiStructuralElement.cs.meta deleted file mode 100644 index 14c9910b8..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/ObiStructuralElement.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2aecff76dda4241c5a0c15349e2419d3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path.meta deleted file mode 100644 index c60887566..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 75e833f2b944640a5934c15fbec8ac00 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels.meta deleted file mode 100644 index a90531fac..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 5172d3d605ca94f2db0ad73eaecbc4d4 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiColorDataChannel.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiColorDataChannel.cs deleted file mode 100644 index 6b5aa938c..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiColorDataChannel.cs +++ /dev/null @@ -1,12 +0,0 @@ -using UnityEngine; -using System; -using System.Collections; - -namespace Obi -{ - [Serializable] - public class ObiColorDataChannel : ObiPathDataChannelIdentity - { - public ObiColorDataChannel() : base(new ObiColorInterpolator3D()) { } - } -} diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiColorDataChannel.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiColorDataChannel.cs.meta deleted file mode 100644 index 3a4703eeb..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiColorDataChannel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4078c779a63154dddac14f5a1e65a692 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiFilterDataChannel.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiFilterDataChannel.cs deleted file mode 100644 index ab59bfe8d..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiFilterDataChannel.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; - -namespace Obi -{ - [Serializable] - public class ObiPhaseDataChannel : ObiPathDataChannelIdentity - { - public ObiPhaseDataChannel() : base(new ObiConstantInterpolator()) { } - } -} \ No newline at end of file diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiFilterDataChannel.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiFilterDataChannel.cs.meta deleted file mode 100644 index a5ebfe7a7..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiFilterDataChannel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9cfdcf019ed7249799993815bfc3c0bd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiMassDataChannel.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiMassDataChannel.cs deleted file mode 100644 index ae56531d2..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiMassDataChannel.cs +++ /dev/null @@ -1,12 +0,0 @@ -using UnityEngine; -using System; -using System.Collections; - -namespace Obi -{ - [Serializable] - public class ObiMassDataChannel : ObiPathDataChannelIdentity - { - public ObiMassDataChannel() : base(new ObiCatmullRomInterpolator()) { } - } -} diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiMassDataChannel.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiMassDataChannel.cs.meta deleted file mode 100644 index ac806b9d5..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiMassDataChannel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e55025008fa8f4bccae82dbaded0f019 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiNormalDataChannel.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiNormalDataChannel.cs deleted file mode 100644 index 3fee9576b..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiNormalDataChannel.cs +++ /dev/null @@ -1,12 +0,0 @@ -using UnityEngine; -using System; -using System.Collections; - -namespace Obi -{ - [Serializable] - public class ObiNormalDataChannel : ObiPathDataChannelIdentity - { - public ObiNormalDataChannel() : base(new ObiCatmullRomInterpolator3D()) { } - } -} diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiNormalDataChannel.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiNormalDataChannel.cs.meta deleted file mode 100644 index 7c99771e9..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiNormalDataChannel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4721087e73d0d422ab48ad62a2fd3d3b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannel.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannel.cs deleted file mode 100644 index 584be6de1..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannel.cs +++ /dev/null @@ -1,88 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannel.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannel.cs.meta deleted file mode 100644 index 4f3af9927..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 43ab47ea5c62b45248edce6a9d099626 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannelIdentity.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannelIdentity.cs deleted file mode 100644 index 1148753d0..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannelIdentity.cs +++ /dev/null @@ -1,94 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannelIdentity.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannelIdentity.cs.meta deleted file mode 100644 index 9093cc6eb..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPathDataChannelIdentity.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 61b5c82c04eb14f1999e94baa1f073bc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPointsDataChannel.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPointsDataChannel.cs deleted file mode 100644 index 1aba7db14..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPointsDataChannel.cs +++ /dev/null @@ -1,124 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPointsDataChannel.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPointsDataChannel.cs.meta deleted file mode 100644 index 5cec32806..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiPointsDataChannel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d710ff448ae4e4a6f9351a678af9a8ac -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiRotationalMassDataChannel.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiRotationalMassDataChannel.cs deleted file mode 100644 index e26ff82aa..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiRotationalMassDataChannel.cs +++ /dev/null @@ -1,12 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiRotationalMassDataChannel.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiRotationalMassDataChannel.cs.meta deleted file mode 100644 index 9b1a75ce9..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiRotationalMassDataChannel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 28c38822e5a79441a8177689f83644e8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiThicknessDataChannel.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiThicknessDataChannel.cs deleted file mode 100644 index 80e90dbea..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiThicknessDataChannel.cs +++ /dev/null @@ -1,12 +0,0 @@ -using UnityEngine; -using System; -using System.Collections; - -namespace Obi -{ - [Serializable] - public class ObiThicknessDataChannel : ObiPathDataChannelIdentity - { - public ObiThicknessDataChannel() : base(new ObiCatmullRomInterpolator()) { } - } -} diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiThicknessDataChannel.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiThicknessDataChannel.cs.meta deleted file mode 100644 index 81e98c4ba..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/DataChannels/ObiThicknessDataChannel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b414fbc6ce2db42299dc01619ed4fc97 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators.meta deleted file mode 100644 index 0d67e6f47..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e85cc8f3b96cf4b4c9be1e6af0a0a99b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator.cs deleted file mode 100644 index a15ba18a0..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator.cs +++ /dev/null @@ -1,49 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator.cs.meta deleted file mode 100644 index dfd028c1f..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 93918aac247384d8289d151d77dc4dc2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator3D.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator3D.cs deleted file mode 100644 index 68bf48c67..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator3D.cs +++ /dev/null @@ -1,46 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator3D.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator3D.cs.meta deleted file mode 100644 index 7d9398e20..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiCatmullRomInterpolator3D.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 845dbd641b61b490bb94d745b6879e97 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiColorInterpolator3D.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiColorInterpolator3D.cs deleted file mode 100644 index 4f7b7f489..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiColorInterpolator3D.cs +++ /dev/null @@ -1,49 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiColorInterpolator3D.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiColorInterpolator3D.cs.meta deleted file mode 100644 index c100772a5..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiColorInterpolator3D.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1c2bda61c040346db8efd82f64c2422e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiConstantInterpolator.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiConstantInterpolator.cs deleted file mode 100644 index e404e94c5..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiConstantInterpolator.cs +++ /dev/null @@ -1,33 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiConstantInterpolator.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiConstantInterpolator.cs.meta deleted file mode 100644 index a4c14046b..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiConstantInterpolator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 33f10aef9ed544b14a762a9c6e8bf411 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiInterpolator.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiInterpolator.cs deleted file mode 100644 index 1e03c33bd..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiInterpolator.cs +++ /dev/null @@ -1,13 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiInterpolator.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiInterpolator.cs.meta deleted file mode 100644 index 47fd49666..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/Interpolators/ObiInterpolator.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: af25f2a4d723548bfafa551b6da56d25 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPath.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPath.cs deleted file mode 100644 index 6d5bb0b09..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPath.cs +++ /dev/null @@ -1,408 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPath.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPath.cs.meta deleted file mode 100644 index 8236881b3..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPath.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ee1575a4e45ef4a8ebafa0e5e2e51da5 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathFrame.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathFrame.cs deleted file mode 100644 index 38377d460..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathFrame.cs +++ /dev/null @@ -1,170 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathFrame.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathFrame.cs.meta deleted file mode 100644 index b02d82d43..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathFrame.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 237e9ecf813f646fd8502768445f4ab6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs deleted file mode 100644 index 1251981a6..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs +++ /dev/null @@ -1,101 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs.meta deleted file mode 100644 index bbfec3dfc..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiPathSmoother.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 958c969cfb16745f192d4d7bd28b7178 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 8791eecf125744cbeadea65319c29d5a, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiWingedPoint.cs b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiWingedPoint.cs deleted file mode 100644 index f3d37db8b..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiWingedPoint.cs +++ /dev/null @@ -1,100 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiWingedPoint.cs.meta b/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiWingedPoint.cs.meta deleted file mode 100644 index dd0c6fcde..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/DataStructures/Path/ObiWingedPoint.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 76ee869b5f2e5440ea0a1c8a1e161cde -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Rendering.meta b/Assets/Obi/Scripts/RopeAndRod/Rendering.meta deleted file mode 100644 index 30985468d..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 07dfc7e6a316349cba9d3b434f09ee68 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiChainRopeRenderSystem.cs b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiChainRopeRenderSystem.cs deleted file mode 100644 index eb6d1bf8e..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiChainRopeRenderSystem.cs +++ /dev/null @@ -1,216 +0,0 @@ - -using System.Runtime.InteropServices; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Rendering; -using Unity.Profiling; - -namespace Obi -{ - - [StructLayout(LayoutKind.Sequential)] - public struct ChainRendererData - { - public int modifierOffset; - public float twistAnchor; - public float twist; - public uint usesOrientedParticles; - - public Vector4 scale; - - public ChainRendererData(int modifierOffset, float twistAnchor, float twist, Vector3 scale, bool usesOrientedParticles) - { - this.modifierOffset = modifierOffset; - this.twistAnchor = twistAnchor; - this.twist = twist; - this.usesOrientedParticles = (uint)(usesOrientedParticles ? 1 : 0); - this.scale = scale; - } - } - - public abstract class ObiChainRopeRenderSystem : RenderSystem - { - public Oni.RenderingSystemType typeEnum { get => Oni.RenderingSystemType.ChainRope; } - - public RendererSet renderers { get; } = new RendererSet(); - - // specify vertex count and layout - protected VertexAttributeDescriptor[] layout = - { - new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 3), - new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float32, 3), - new VertexAttributeDescriptor(VertexAttribute.Tangent, VertexAttributeFormat.Float32, 4), - new VertexAttributeDescriptor(VertexAttribute.Color, VertexAttributeFormat.Float32, 4), - new VertexAttributeDescriptor(VertexAttribute.TexCoord0, VertexAttributeFormat.Float32, 2), - }; - - static protected ProfilerMarker m_SetupRenderMarker = new ProfilerMarker("SetupChainRopeRendering"); - static protected ProfilerMarker m_RenderMarker = new ProfilerMarker("ChainRopeRendering"); - - protected ObiSolver m_Solver; - protected List batchList = new List(); - - protected ObiNativeList rendererData; - protected ObiNativeList chunkData; - protected ObiNativeList modifiers; - - protected ObiNativeList elements; - protected ObiNativeList instanceTransforms; - protected ObiNativeList invInstanceTransforms; - protected ObiNativeList instanceColors; - - public ObiChainRopeRenderSystem(ObiSolver solver) - { - m_Solver = solver; - } - - public virtual void Dispose() - { - CleanupBatches(); - DestroyLists(); - } - - private void DestroyLists() - { - if (instanceTransforms != null) - instanceTransforms.Dispose(); - if (invInstanceTransforms != null) - invInstanceTransforms.Dispose(); - if (instanceColors != null) - instanceColors.Dispose(); - - if (elements != null) - elements.Dispose(); - if (chunkData != null) - chunkData.Dispose(); - if (rendererData != null) - rendererData.Dispose(); - if (modifiers != null) - modifiers.Dispose(); - } - - private void CreateListsIfNecessary() - { - DestroyLists(); - - instanceTransforms = new ObiNativeList(); - invInstanceTransforms = new ObiNativeList(); - instanceColors = new ObiNativeList(); - elements = new ObiNativeList(); - chunkData = new ObiNativeList(); - rendererData = new ObiNativeList(); - modifiers = new ObiNativeList(); - } - - private void CleanupBatches() - { - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Dispose(); - batchList.Clear(); - } - - private void GenerateBatches() - { - instanceTransforms.Clear(); - invInstanceTransforms.Clear(); - instanceColors.Clear(); - elements.Clear(); - rendererData.Clear(); - chunkData.Clear(); - modifiers.Clear(); - - // generate batches: - for (int i = 0; i < renderers.Count; ++i) - { - var renderer = renderers[i]; - if (renderer.linkMesh != null && renderer.linkMaterial != null) - { - renderer.renderParameters.layer = renderer.gameObject.layer; - batchList.Add(new InstancedRenderBatch(i, renderer.linkMesh, renderer.linkMaterial, renderer.renderParameters)); - } - - } - - // sort batches: - batchList.Sort(); - - // append elements: - for (int i = 0; i < batchList.Count; ++i) - { - var renderer = renderers[batchList[i].firstRenderer]; - var rope = renderer.actor as ObiRopeBase; - - modifiers.AddRange(renderer.linkModifiers); - - rendererData.Add(new ChainRendererData(modifiers.count, renderer.twistAnchor, renderer.linkTwist, renderer.linkScale, rope.usesOrientedParticles)); - - batchList[i].firstInstance = elements.count; - batchList[i].instanceCount = rope.elements.Count; - - // iterate trough elements, finding discontinuities as we go: - for (int e = 0; e < rope.elements.Count; ++e) - { - elements.Add(new Vector2Int(rope.elements[e].particle1, rope.elements[e].particle2)); - - // At discontinuities, start a new chunk. - if (e < rope.elements.Count - 1 && rope.elements[e].particle2 != rope.elements[e + 1].particle1) - { - chunkData.Add(new ChunkData(rendererData.count - 1, elements.count)); - } - } - chunkData.Add(new ChunkData(rendererData.count - 1, elements.count)); - } - - instanceTransforms.ResizeUninitialized(elements.count); - invInstanceTransforms.ResizeUninitialized(elements.count); - instanceColors.ResizeUninitialized(elements.count); - } - - protected virtual void CloseBatches() - { - // Initialize each batch: - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Initialize(); - } - - public virtual void Setup() - { - using (m_SetupRenderMarker.Auto()) - { - CreateListsIfNecessary(); - - CleanupBatches(); - - GenerateBatches(); - - ObiUtils.MergeBatches(batchList); - - CloseBatches(); - } - } - - public abstract void Render(); - - public void Step() - { - } - - public void BakeMesh(ObiRopeChainRenderer renderer, ref Mesh mesh, bool transformToActorLocalSpace = false) - { - int index = renderers.IndexOf(renderer); - - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - if (index >= batch.firstRenderer && index < batch.firstRenderer + batch.rendererCount) - { - batch.BakeMesh(renderers, renderer, chunkData, instanceTransforms, - renderer.actor.actorSolverToLocalMatrix, ref mesh, transformToActorLocalSpace); - return; - } - } - } - } -} - - diff --git a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiChainRopeRenderSystem.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiChainRopeRenderSystem.cs.meta deleted file mode 100644 index 276835a70..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiChainRopeRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9a4cb8b10f8b049c2ae0a97c50c9b33c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiExtrudedRopeRenderSystem.cs b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiExtrudedRopeRenderSystem.cs deleted file mode 100644 index a34d3e0ab..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiExtrudedRopeRenderSystem.cs +++ /dev/null @@ -1,279 +0,0 @@ - -using System.Runtime.InteropServices; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Rendering; -using Unity.Profiling; - -namespace Obi -{ - [StructLayout(LayoutKind.Sequential)] - public struct BurstExtrudedMeshData - { - public int sectionVertexCount; - public float thicknessScale; - public float uvAnchor; - public uint normalizeV; - - public Vector2 uvScale; - - public BurstExtrudedMeshData(ObiRopeExtrudedRenderer renderer) - { - sectionVertexCount = renderer.section.vertices.Count; - uvAnchor = renderer.uvAnchor; - thicknessScale = renderer.thicknessScale; - uvScale = renderer.uvScale; - normalizeV = (uint)(renderer.normalizeV ? 1 : 0); - } - } - - [StructLayout(LayoutKind.Sequential)] - public struct ProceduralRopeVertex - { - public Vector3 pos; - public Vector3 normal; - public Vector4 tangent; - public Vector4 color; - public Vector2 uv; - } - - public abstract class ObiExtrudedRopeRenderSystem : RenderSystem - { - public Oni.RenderingSystemType typeEnum { get => Oni.RenderingSystemType.ExtrudedRope; } - - public RendererSet renderers { get; } = new RendererSet(); - protected List sortedRenderers = new List(); /**< temp list used to store renderers sorted by batch.*/ - - // specify vertex count and layout - protected VertexAttributeDescriptor[] layout = - { - new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 3), - new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float32, 3), - new VertexAttributeDescriptor(VertexAttribute.Tangent, VertexAttributeFormat.Float32, 4), - new VertexAttributeDescriptor(VertexAttribute.Color, VertexAttributeFormat.Float32, 4), - new VertexAttributeDescriptor(VertexAttribute.TexCoord0, VertexAttributeFormat.Float32, 2), - }; - - static protected ProfilerMarker m_SetupRenderMarker = new ProfilerMarker("SetupExtrudedRopeRendering"); - static protected ProfilerMarker m_RenderMarker = new ProfilerMarker("ExtrudedRopeRendering"); - - protected ObiSolver m_Solver; - protected SubMeshDescriptor subMeshDescriptor = new SubMeshDescriptor(0, 0); - - protected List> batchList = new List>(); - - protected ObiNativeList rendererData; /**< for each renderer, data about smoother.*/ - protected ObiNativeList pathSmootherIndices; /**< renderer indices, sorted by batch */ - - protected Dictionary sectionToIndex = new Dictionary(); - protected ObiNativeVector2List sectionData; - protected ObiNativeList sectionOffsets; /**< for each section, offset of its first entry in the sectionData array.*/ - protected ObiNativeList sectionIndices; /**< for each renderer, index of the section used.*/ - - protected ObiNativeList vertexOffsets; /**< for each renderer, vertex offset in its batch mesh data.*/ - protected ObiNativeList triangleOffsets; /**< for each renderer, triangle offset in its batch mesh data.*/ - - protected ObiNativeList vertexCounts; /**< for each renderer, vertex count.*/ - protected ObiNativeList triangleCounts; /**< for each renderer, triangle count.*/ - - protected ObiPathSmootherRenderSystem pathSmootherSystem; - - public ObiExtrudedRopeRenderSystem(ObiSolver solver) - { - m_Solver = solver; - - rendererData = new ObiNativeList(); - pathSmootherIndices = new ObiNativeList(); - - sectionData = new ObiNativeVector2List(); - sectionOffsets = new ObiNativeList(); - sectionIndices = new ObiNativeList(); - - vertexOffsets = new ObiNativeList(); - triangleOffsets = new ObiNativeList(); - - vertexCounts = new ObiNativeList(); - triangleCounts = new ObiNativeList(); - } - - public void Dispose() - { - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Dispose(); - batchList.Clear(); - - if (rendererData != null) - rendererData.Dispose(); - if (pathSmootherIndices != null) - pathSmootherIndices.Dispose(); - - if (sectionData != null) - sectionData.Dispose(); - if (sectionOffsets != null) - sectionOffsets.Dispose(); - if (sectionIndices != null) - sectionIndices.Dispose(); - - if (vertexOffsets != null) - vertexOffsets.Dispose(); - if (triangleOffsets != null) - triangleOffsets.Dispose(); - - if (vertexCounts != null) - vertexCounts.Dispose(); - if (triangleCounts != null) - triangleCounts.Dispose(); - } - - private void Clear() - { - rendererData.Clear(); - pathSmootherIndices.Clear(); - - sectionData.Clear(); - sectionToIndex.Clear(); - sectionOffsets.Clear(); - sectionIndices.Clear(); - - vertexOffsets.Clear(); - triangleOffsets.Clear(); - - vertexCounts.Clear(); - triangleCounts.Clear(); - - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Dispose(); - batchList.Clear(); - } - - private void CreateBatches() - { - // generate batches: - sortedRenderers.Clear(); - for (int i = 0; i < renderers.Count; ++i) - { - if (renderers[i].section != null && renderers[i].TryGetComponent(out ObiPathSmoother smoother) && smoother.enabled) - { - renderers[i].renderParameters.layer = renderers[i].gameObject.layer; - batchList.Add(new ProceduralRenderBatch(i, renderers[i].material, renderers[i].renderParameters)); - sortedRenderers.Add(renderers[i]); - } - } - - vertexOffsets.ResizeUninitialized(sortedRenderers.Count); - triangleOffsets.ResizeUninitialized(sortedRenderers.Count); - - // sort batches: - batchList.Sort(); - - // reorder renderers based on sorted batches: - sortedRenderers.Clear(); - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - - sortedRenderers.Add(renderers[batch.firstRenderer]); - batch.firstRenderer = i; - - int pathIndex = sortedRenderers[i].GetComponent().indexInSystem; - pathSmootherIndices.Add(pathIndex); - - // get or create extruded section: - if (!sectionToIndex.TryGetValue(sortedRenderers[i].section, out int sectionIndex)) - { - sectionIndex = sectionOffsets.count; - sectionToIndex[sortedRenderers[i].section] = sectionIndex; - sectionOffsets.Add(sectionData.count); - sectionData.AddRange(sortedRenderers[i].section.vertices); - } - - sectionIndices.Add(sectionIndex); - - // calculate vertex and triangle counts for each renderer: - int chunkStart = pathSmootherSystem.chunkOffsets[pathIndex]; - int chunkAmount = pathSmootherSystem.chunkOffsets[pathIndex + 1] - chunkStart; - - for (int k = chunkStart; k < chunkStart + chunkAmount; ++k) - { - int frameCount = pathSmootherSystem.smoothFrameCounts[k]; - batch.vertexCount += frameCount * sortedRenderers[i].section.vertices.Count; - batch.triangleCount += (frameCount - 1) * (sortedRenderers[i].section.vertices.Count - 1) * 2; - } - - vertexCounts.Add(batch.vertexCount); - triangleCounts.Add(batch.triangleCount); - - rendererData.Add(new BurstExtrudedMeshData(sortedRenderers[i])); - } - - // add last entry to section offsets: - sectionOffsets.Add(sectionData.count); - - } - - private void CalculateMeshOffsets() - { - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - - int vtxCount = 0; - int triCount = 0; - - // Calculate vertex and triangle offsets for each renderer in the batch: - for (int j = 0; j < batch.rendererCount; ++j) - { - int r = batch.firstRenderer + j; - - vertexOffsets[r] = vtxCount; - triangleOffsets[r] = triCount; - - vtxCount += vertexCounts[r]; - triCount += triangleCounts[r]; - } - } - } - - public virtual void Setup() - { - pathSmootherSystem = m_Solver.GetRenderSystem() as ObiPathSmootherRenderSystem; - if (pathSmootherSystem == null) - return; - - using (m_SetupRenderMarker.Auto()) - { - Clear(); - - CreateBatches(); - - ObiUtils.MergeBatches(batchList); - - CalculateMeshOffsets(); - } - } - - public abstract void Render(); - - public void Step() - { - } - - public void BakeMesh(ObiRopeExtrudedRenderer renderer, ref Mesh mesh, bool transformToActorLocalSpace = false) - { - int index = sortedRenderers.IndexOf(renderer); - - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - if (index >= batch.firstRenderer && index < batch.firstRenderer + batch.rendererCount) - { - batch.BakeMesh(vertexOffsets[index], vertexCounts[index], triangleOffsets[index], triangleCounts[index], - renderer.actor.actorSolverToLocalMatrix, ref mesh, transformToActorLocalSpace); - return; - } - } - } - } -} - - diff --git a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiExtrudedRopeRenderSystem.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiExtrudedRopeRenderSystem.cs.meta deleted file mode 100644 index 3b5bd971b..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiExtrudedRopeRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e19ecda6559144921868e71085db8408 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiLineRopeRenderSystem.cs b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiLineRopeRenderSystem.cs deleted file mode 100644 index dbb068e67..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiLineRopeRenderSystem.cs +++ /dev/null @@ -1,230 +0,0 @@ - -using System.Runtime.InteropServices; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Rendering; -using Unity.Profiling; - -namespace Obi -{ - [StructLayout(LayoutKind.Sequential)] - public struct BurstLineMeshData - { - public Vector2 uvScale; - public float thicknessScale; - public float uvAnchor; - public uint normalizeV; - - public BurstLineMeshData(ObiRopeLineRenderer renderer) - { - uvAnchor = renderer.uvAnchor; - thicknessScale = renderer.thicknessScale; - uvScale = renderer.uvScale; - normalizeV = (uint)(renderer.normalizeV ? 1 : 0); - } - } - - public abstract class ObiLineRopeRenderSystem : RenderSystem - { - public Oni.RenderingSystemType typeEnum { get => Oni.RenderingSystemType.LineRope; } - - public RendererSet renderers { get; } = new RendererSet(); - protected List sortedRenderers = new List(); - - // specify vertex count and layout - protected VertexAttributeDescriptor[] layout = - { - new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 3), - new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float32, 3), - new VertexAttributeDescriptor(VertexAttribute.Tangent, VertexAttributeFormat.Float32, 4), - new VertexAttributeDescriptor(VertexAttribute.Color, VertexAttributeFormat.Float32, 4), - new VertexAttributeDescriptor(VertexAttribute.TexCoord0, VertexAttributeFormat.Float32, 2), - }; - - static protected ProfilerMarker m_SetupRenderMarker = new ProfilerMarker("SetupExtrudedRopeRendering"); - static protected ProfilerMarker m_RenderMarker = new ProfilerMarker("ExtrudedRopeRendering"); - - protected ObiSolver m_Solver; - protected SubMeshDescriptor subMeshDescriptor = new SubMeshDescriptor(0, 0); - - protected List> batchList = new List>(); - - protected ObiNativeList pathSmootherIndices; - protected ObiNativeList rendererData; /**< for each renderer, data about smoother.*/ - - protected ObiNativeList vertexOffsets; /**< for each renderer, vertex offset in its batch mesh data.*/ - protected ObiNativeList triangleOffsets; /**< for each renderer, triangle offset in its batch mesh data.*/ - - protected ObiNativeList vertexCounts; /**< for each renderer, vertex count.*/ - protected ObiNativeList triangleCounts; /**< for each renderer, triangle count.*/ - - protected ObiPathSmootherRenderSystem pathSmootherSystem; - -#if (UNITY_2019_1_OR_NEWER) - System.Action renderCallback; -#endif - - public ObiLineRopeRenderSystem(ObiSolver solver) - { -#if (UNITY_2019_1_OR_NEWER) - renderCallback = new System.Action((cntxt, cam) => { RenderFromCamera(cam); }); - RenderPipelineManager.beginCameraRendering += renderCallback; -#endif - Camera.onPreCull += RenderFromCamera; - - m_Solver = solver; - - pathSmootherIndices = new ObiNativeList(); - rendererData = new ObiNativeList(); - - vertexOffsets = new ObiNativeList(); - triangleOffsets = new ObiNativeList(); - - vertexCounts = new ObiNativeList(); - triangleCounts = new ObiNativeList(); - } - - public void Dispose() - { -#if (UNITY_2019_1_OR_NEWER) - RenderPipelineManager.beginCameraRendering -= renderCallback; -#endif - Camera.onPreCull -= RenderFromCamera; - - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Dispose(); - batchList.Clear(); - - if (pathSmootherIndices != null) - pathSmootherIndices.Dispose(); - if (rendererData != null) - rendererData.Dispose(); - - if (vertexOffsets != null) - vertexOffsets.Dispose(); - if (triangleOffsets != null) - triangleOffsets.Dispose(); - - if (vertexCounts != null) - vertexCounts.Dispose(); - if (triangleCounts != null) - triangleCounts.Dispose(); - } - - private void Clear() - { - pathSmootherIndices.Clear(); - rendererData.Clear(); - - vertexOffsets.Clear(); - vertexCounts.Clear(); - - triangleCounts.Clear(); - - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Dispose(); - batchList.Clear(); - } - - private void CreateBatches() - { - // generate batches: - sortedRenderers.Clear(); - for (int i = 0; i < renderers.Count; ++i) - { - if (renderers[i].TryGetComponent(out ObiPathSmoother smoother) && smoother.enabled) - { - renderers[i].renderParams.layer = renderers[i].gameObject.layer; - batchList.Add(new ProceduralRenderBatch(i, renderers[i].material, renderers[i].renderParams)); - sortedRenderers.Add(renderers[i]); - } - } - - vertexOffsets.ResizeUninitialized(sortedRenderers.Count); - triangleOffsets.ResizeUninitialized(sortedRenderers.Count); - - // sort batches: - batchList.Sort(); - - // reorder renderers based on sorted batches: - sortedRenderers.Clear(); - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - - sortedRenderers.Add(renderers[batch.firstRenderer]); - batch.firstRenderer = i; - - int pathIndex = sortedRenderers[i].GetComponent().indexInSystem; - pathSmootherIndices.Add(pathIndex); - - // calculate vertex and triangle counts for each renderer: - int chunkStart = pathSmootherSystem.chunkOffsets[pathIndex]; - int chunkAmount = pathSmootherSystem.chunkOffsets[pathIndex + 1] - chunkStart; - - for (int k = chunkStart; k < chunkStart + chunkAmount; ++k) - { - int frameCount = pathSmootherSystem.smoothFrameCounts[k]; - batch.vertexCount += frameCount * 2; // in a triangle strip, there's 2 vertices per frame. - batch.triangleCount += (frameCount - 1) * 2; // and 2 triangles per frame (except for the last one) - } - - vertexCounts.Add(batch.vertexCount); - triangleCounts.Add(batch.triangleCount); - - rendererData.Add(new BurstLineMeshData(sortedRenderers[i])); - } - } - - private void CalculateMeshOffsets() - { - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - - int vtxCount = 0; - int triCount = 0; - - // Calculate vertex and triangle offsets for each renderer in the batch: - for (int j = 0; j < batch.rendererCount; ++j) - { - int r = batch.firstRenderer + j; - - vertexOffsets[r] = vtxCount; - triangleOffsets[r] = triCount; - - vtxCount += vertexCounts[r]; - triCount += triangleCounts[r]; - } - } - } - - public virtual void Setup() - { - pathSmootherSystem = m_Solver.GetRenderSystem() as ObiPathSmootherRenderSystem; - if (pathSmootherSystem == null) - return; - - using (m_SetupRenderMarker.Auto()) - { - Clear(); - - CreateBatches(); - - ObiUtils.MergeBatches(batchList); - - CalculateMeshOffsets(); - } - } - - public abstract void RenderFromCamera(Camera camera); - - public abstract void Render(); - - public void Step() - { - } - } -} - - diff --git a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiLineRopeRenderSystem.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiLineRopeRenderSystem.cs.meta deleted file mode 100644 index 1a6ddf1bf..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiLineRopeRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: feb78fd6bed7a49979dee4205d74deaa -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiMeshRopeRenderSystem.cs b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiMeshRopeRenderSystem.cs deleted file mode 100644 index 1f0e8ff9a..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiMeshRopeRenderSystem.cs +++ /dev/null @@ -1,296 +0,0 @@ - -using System.Runtime.InteropServices; -using UnityEngine; - -using Unity.Profiling; -using UnityEngine.Rendering; -using System.Collections.Generic; -using System; - -namespace Obi -{ - [StructLayout(LayoutKind.Sequential)] - public struct BurstMeshData - { - public uint axis; - public float volumeScaling; - public uint stretchWithRope; - public uint spanEntireLength; - - public uint instances; - public float instanceSpacing; - public float offset; - public float meshSizeAlongAxis; - - public Vector4 scale; - - public BurstMeshData(ObiRopeMeshRenderer renderer) - { - axis = (uint)renderer.axis; - volumeScaling = renderer.volumeScaling; - stretchWithRope = (uint)(renderer.stretchWithRope ? 1 : 0); - spanEntireLength = (uint)(renderer.spanEntireLength ? 1 : 0); - instances = renderer.instances; - instanceSpacing = renderer.instanceSpacing; - offset = renderer.offset; - meshSizeAlongAxis = renderer.sourceMesh != null ? renderer.sourceMesh.bounds.size[(int)renderer.axis] : 0; - scale = renderer.scale; - } - } - - [StructLayout(LayoutKind.Sequential)] - public struct RopeMeshVertex - { - public Vector3 pos; - public Vector3 normal; - public Vector4 tangent; - public Vector4 color; - } - - public abstract class ObiMeshRopeRenderSystem : RenderSystem - { - public Oni.RenderingSystemType typeEnum { get => Oni.RenderingSystemType.MeshRope; } - - public RendererSet renderers { get; } = new RendererSet(); - protected List sortedRenderers = new List(); /**< temp list used to store renderers sorted by batch.*/ - - static protected ProfilerMarker m_SetupRenderMarker = new ProfilerMarker("SetupMeshRopeRendering"); - static protected ProfilerMarker m_RenderMarker = new ProfilerMarker("MeshRopeRendering"); - - // specify vertex count and layout - protected VertexAttributeDescriptor[] layout = - { - new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 3,0), - new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float32, 3,0), - new VertexAttributeDescriptor(VertexAttribute.Tangent, VertexAttributeFormat.Float32, 4,0), - new VertexAttributeDescriptor(VertexAttribute.Color, VertexAttributeFormat.Float32, 4,0), - new VertexAttributeDescriptor(VertexAttribute.TexCoord0, VertexAttributeFormat.Float32, 2,1), - new VertexAttributeDescriptor(VertexAttribute.TexCoord1, VertexAttributeFormat.Float32, 2,1), - new VertexAttributeDescriptor(VertexAttribute.TexCoord2, VertexAttributeFormat.Float32, 2,1), - new VertexAttributeDescriptor(VertexAttribute.TexCoord3, VertexAttributeFormat.Float32, 2,1), - }; - - protected ObiSolver m_Solver; - protected List> batchList = new List>(); - - - protected MeshDataBatch meshData; - protected ObiNativeList meshIndices; // for each renderer, its mesh index. - - protected ObiNativeList pathSmootherIndices; /**< for each renderer, index of its path smoother in the path smoother system.*/ - protected ObiNativeList rendererData; - - protected ObiNativeList sortedIndices; /**< axis-sorted vertex indices. */ - protected ObiNativeList sortedOffsets; /**< for each renderer, offset in the sortedIndices array.*/ - - protected ObiNativeList vertexOffsets; /**< for each renderer, vertex offset in its batch mesh data.*/ - protected ObiNativeList vertexCounts; /**< for each renderer, vertex count.*/ - - protected ObiPathSmootherRenderSystem pathSmootherSystem; - - public ObiMeshRopeRenderSystem(ObiSolver solver) - { - m_Solver = solver; - - meshData = new MeshDataBatch(); - meshIndices = new ObiNativeList(); - - pathSmootherIndices = new ObiNativeList(); - rendererData = new ObiNativeList(); - - sortedIndices = new ObiNativeList(); - sortedOffsets = new ObiNativeList(); - - vertexOffsets = new ObiNativeList(); - vertexCounts = new ObiNativeList(); - } - - public void Dispose() - { - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Dispose(); - batchList.Clear(); - - meshData.Dispose(); - - if (pathSmootherIndices != null) - pathSmootherIndices.Dispose(); - if (meshIndices != null) - meshIndices.Dispose(); - - if (sortedIndices != null) - sortedIndices.Dispose(); - if (sortedOffsets != null) - sortedOffsets.Dispose(); - - if (vertexOffsets != null) - vertexOffsets.Dispose(); - if (vertexCounts != null) - vertexCounts.Dispose(); - - if (rendererData != null) - rendererData.Dispose(); - } - - private void Clear() - { - meshData.Clear(); - meshIndices.Clear(); - - pathSmootherIndices.Clear(); - rendererData.Clear(); - - vertexOffsets.Clear(); - vertexCounts.Clear(); - - sortedIndices.Clear(); - sortedOffsets.Clear(); - - for (int i = 0; i < batchList.Count; ++i) - batchList[i].Dispose(); - batchList.Clear(); - - meshData.InitializeStaticData(); - meshData.InitializeTempData(); - } - - private void CreateBatches() - { - // generate batches: - sortedRenderers.Clear(); - for (int i = 0; i < renderers.Count; ++i) - { - if (renderers[i].sourceMesh != null && renderers[i].TryGetComponent(out ObiPathSmoother smoother) && smoother.enabled) - { - int vertexCount = renderers[i].vertexCount * (int)renderers[i].meshInstances; - renderers[i].renderParameters.layer = renderers[i].gameObject.layer; - batchList.Add(new DynamicRenderBatch(i, vertexCount, renderers[i].materials, renderers[i].renderParameters)); - sortedRenderers.Add(renderers[i]); - } - } - - vertexOffsets.ResizeUninitialized(sortedRenderers.Count); - - // sort batches: - batchList.Sort(); - - // reorder renderers based on sorted batches: - sortedRenderers.Clear(); - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - - // store amount of vertices in this batch, prior to merging: - vertexCounts.Add(batch.vertexCount); - - // write renderers in the order dictated by the sorted batch: - sortedRenderers.Add(renderers[batch.firstRenderer]); - batch.firstRenderer = i; - - pathSmootherIndices.Add(sortedRenderers[i].GetComponent().indexInSystem); - - rendererData.Add(new BurstMeshData(sortedRenderers[i])); - } - } - - protected virtual void PopulateBatches() - { - List verts = new List(); - - // store per-mesh data - for (int i = 0; i < sortedRenderers.Count; ++i) - { - // sort vertices along curve axis: - sortedRenderers[i].GetVertices(verts); - float[] keys = new float[sortedRenderers[i].vertexCount]; - var orderedVertices = new int[sortedRenderers[i].vertexCount]; - - for (int j = 0; j < keys.Length; ++j) - { - keys[j] = verts[j][(int)sortedRenderers[i].axis]; - orderedVertices[j] = j; - } - - Array.Sort(keys, orderedVertices); - - sortedOffsets.Add(sortedIndices.count); - sortedIndices.AddRange(orderedVertices); - - // add mesh index - meshIndices.Add(meshData.AddMesh(sortedRenderers[i])); - } - } - - private void CalculateMeshOffsets() - { - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - - int vtxCount = 0; - - // Calculate vertex and triangle offsets for each renderer in the batch: - for (int j = 0; j < batch.rendererCount; ++j) - { - int r = batch.firstRenderer + j; - - vertexOffsets[r] = vtxCount; - vtxCount += vertexCounts[r]; - } - } - } - - protected virtual void CloseBatches() - { - meshData.DisposeOfStaticData(); - meshData.DisposeOfTempData(); - } - - public void Setup() - { - pathSmootherSystem = m_Solver.GetRenderSystem() as ObiPathSmootherRenderSystem; - if (pathSmootherSystem == null) - return; - - using (m_SetupRenderMarker.Auto()) - { - Clear(); - - CreateBatches(); - - PopulateBatches(); - - ObiUtils.MergeBatches(batchList); - - CalculateMeshOffsets(); - - CloseBatches(); - } - } - - public void Step() - { - } - - public virtual void Render() - { - } - - public void BakeMesh(ObiRopeMeshRenderer renderer, ref Mesh mesh, bool transformToActorLocalSpace = false) - { - int index = sortedRenderers.IndexOf(renderer); - - for (int i = 0; i < batchList.Count; ++i) - { - var batch = batchList[i]; - if (index >= batch.firstRenderer && index < batch.firstRenderer + batch.rendererCount) - { - batch.BakeMesh(sortedRenderers, renderer, ref mesh, transformToActorLocalSpace); - return; - } - } - } - } -} - - diff --git a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiMeshRopeRenderSystem.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiMeshRopeRenderSystem.cs.meta deleted file mode 100644 index f739eb97a..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiMeshRopeRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ad311e324f23a480d867e8e9b7f89cfe -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiPathSmootherRenderSystem.cs b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiPathSmootherRenderSystem.cs deleted file mode 100644 index e6ad64565..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiPathSmootherRenderSystem.cs +++ /dev/null @@ -1,325 +0,0 @@ -using System.Runtime.InteropServices; -using UnityEngine; -using Unity.Profiling; - -namespace Obi -{ - [StructLayout(LayoutKind.Sequential)] - public struct BurstPathSmootherData - { - public uint smoothing; - public float decimation; - public float twist; - public float restLength; - public float smoothLength; - public uint usesOrientedParticles; - - public BurstPathSmootherData(ObiRopeBase rope, ObiPathSmoother smoother) - { - smoothing = smoother.smoothing; - decimation = smoother.decimation; - twist = smoother.twist; - usesOrientedParticles = (uint)(rope.usesOrientedParticles ? 1 : 0); - restLength = rope.restLength; - smoothLength = 0; - } - } - - public abstract class ObiPathSmootherRenderSystem : RenderSystem - { - public Oni.RenderingSystemType typeEnum { get => Oni.RenderingSystemType.AllSmoothedRopes; } - - public RendererSet renderers { get; } = new RendererSet(); - - static protected ProfilerMarker m_SetupRenderMarker = new ProfilerMarker("SetupSmoothPathRendering"); - static protected ProfilerMarker m_RenderMarker = new ProfilerMarker("SmoothPathRendering"); - - protected ObiSolver m_Solver; - - public ObiNativeList particleIndices; - public ObiNativeList chunkOffsets; /**< for each actor, index of the first chunk */ - - public ObiNativeList pathData; /**< for each chunk, smoother params/data.*/ - - public ObiNativeList rawFrames; - public ObiNativeList rawFrameOffsets; /**< index of the first frame for each chunk.*/ - public ObiNativeList decimatedFrameCounts; /**< amount of frames in each chunk, after decimation.*/ - - public ObiNativeList smoothFrames; - public ObiNativeList smoothFrameOffsets; /**< index of the first frame for each chunk.*/ - public ObiNativeList smoothFrameCounts; /**< amount of smooth frames for each chunk.*/ - - // path smoothing must be done before all other rope render systems, which are on a higher tier. - public uint tier - { - get { return 0; } - } - - public ObiPathSmootherRenderSystem(ObiSolver solver) - { - m_Solver = solver; - - pathData = new ObiNativeList(); - particleIndices = new ObiNativeList(); - chunkOffsets = new ObiNativeList(); - - rawFrames = new ObiNativeList(); - rawFrameOffsets = new ObiNativeList(); - - decimatedFrameCounts = new ObiNativeList(); - - smoothFrames = new ObiNativeList(); - smoothFrameOffsets = new ObiNativeList(); - smoothFrameCounts = new ObiNativeList(); - } - - public void Dispose() - { - if (particleIndices != null) - particleIndices.Dispose(); - if (chunkOffsets != null) - chunkOffsets.Dispose(); - - if (pathData != null) - pathData.Dispose(); - - if (rawFrames != null) - rawFrames.Dispose(); - if (rawFrameOffsets != null) - rawFrameOffsets.Dispose(); - if (decimatedFrameCounts != null) - decimatedFrameCounts.Dispose(); - - if (smoothFrames != null) - smoothFrames.Dispose(); - if (smoothFrameOffsets != null) - smoothFrameOffsets.Dispose(); - if (smoothFrameCounts != null) - smoothFrameCounts.Dispose(); - } - - private void Clear() - { - pathData.Clear(); - particleIndices.Clear(); - chunkOffsets.Clear(); - - rawFrames.Clear(); - rawFrameOffsets.Clear(); - decimatedFrameCounts.Clear(); - - smoothFrames.Clear(); - smoothFrameOffsets.Clear(); - smoothFrameCounts.Clear(); - } - - private int GetChaikinCount(int initialPoints, uint recursionLevel) - { - if (recursionLevel <= 0 || initialPoints < 3) - return initialPoints; - - // calculate amount of new points generated by each inner control point: - int pCount = (int)Mathf.Pow(2, recursionLevel); - return (initialPoints - 2) * pCount + 2; - } - - public virtual void Setup() - { - using (m_SetupRenderMarker.Auto()) - { - Clear(); - - int actorCount = 0; - int chunkCount = 0; - int rawFrameCount = 0; - - for (int i = 0; i < renderers.Count; ++i) - { - var renderer = renderers[i]; - - var rope = renderer.actor as ObiRopeBase; - var data = new BurstPathSmootherData(rope, renderer); - - chunkOffsets.Add(chunkCount); - - // iterate trough elements, finding discontinuities as we go: - for (int e = 0; e < rope.elements.Count; ++e) - { - rawFrameCount++; - particleIndices.Add(rope.elements[e].particle1); - - // At discontinuities, start a new chunk. - if (e < rope.elements.Count - 1 && rope.elements[e].particle2 != rope.elements[e + 1].particle1) - { - rawFrameOffsets.Add(++rawFrameCount); - particleIndices.Add(rope.elements[e].particle2); - pathData.Add(data); - chunkCount++; - } - } - - chunkCount++; - rawFrameOffsets.Add(++rawFrameCount); - particleIndices.Add(rope.elements[rope.elements.Count - 1].particle2); - pathData.Add(data); - - // store the index in this system, so that other render systems - // in higher tiers can easily access smooth path data: - renderer.indexInSystem = actorCount++; - } - - // Add last entry (total amount of chunks): - chunkOffsets.Add(chunkCount); - - // resize storage: - rawFrames.ResizeUninitialized(rawFrameCount); - decimatedFrameCounts.ResizeUninitialized(rawFrameOffsets.count); - smoothFrameOffsets.ResizeUninitialized(rawFrameOffsets.count); - smoothFrameCounts.ResizeUninitialized(rawFrameOffsets.count); - - // calculate smooth chunk counts: - int smoothFrameCount = 0; - for (int i = 0; i < rawFrameOffsets.count; ++i) - { - int frameCount = rawFrameOffsets[i] - (i > 0 ? rawFrameOffsets[i - 1] : 0); - - int smoothCount = GetChaikinCount(frameCount, pathData[i].smoothing); - - smoothFrameOffsets[i] = smoothFrameCount; - smoothFrameCounts[i] = smoothCount; - smoothFrameCount += smoothCount; - } - - smoothFrames.ResizeUninitialized(smoothFrameCount); - } - } - - public int GetChunkCount(int rendererIndex) - { - rendererIndex = Mathf.Clamp(rendererIndex, 0, renderers.Count); - - if (rendererIndex >= chunkOffsets.count) - return 0; - - return chunkOffsets[rendererIndex + 1] - chunkOffsets[rendererIndex]; - } - - - public int GetSmoothFrameCount(int rendererIndex) - { - rendererIndex = Mathf.Clamp(rendererIndex, 0, renderers.Count); - - int frameCount = 0; - - if (rendererIndex >= chunkOffsets.count) - return frameCount; - - for (int i = chunkOffsets[rendererIndex]; i < chunkOffsets[rendererIndex + 1]; ++i) - frameCount += smoothFrameCounts[i]; - - return frameCount; - } - - public int GetSmoothFrameCount(int rendererIndex, int chunkIndex) - { - rendererIndex = Mathf.Clamp(rendererIndex, 0, renderers.Count); - - if (rendererIndex >= chunkOffsets.count) - return 0; - - int chunkCount = chunkOffsets[rendererIndex + 1] - chunkOffsets[rendererIndex]; - int chunk = chunkOffsets[rendererIndex] + Mathf.Clamp(chunkIndex, 0, chunkCount); - - return smoothFrameCounts[chunk]; - } - - public float GetSmoothLength(int rendererIndex) - { - rendererIndex = Mathf.Clamp(rendererIndex, 0, renderers.Count); - - float smoothLength = 0; - - if (rendererIndex >= chunkOffsets.count) - return smoothLength; - - for (int i = chunkOffsets[rendererIndex]; i < chunkOffsets[rendererIndex + 1]; ++i) - smoothLength += pathData[i].smoothLength; - - return smoothLength; - } - - public ObiPathFrame GetFrameAt(int rendererIndex, int chunkIndex, int frameIndex) - { - rendererIndex = Mathf.Clamp(rendererIndex, 0, renderers.Count); - - if (rendererIndex >= chunkOffsets.count) - return ObiPathFrame.Identity; - - int chunkCount = chunkOffsets[rendererIndex + 1] - chunkOffsets[rendererIndex]; - int chunk = chunkOffsets[rendererIndex] + Mathf.Clamp(chunkIndex, 0, chunkCount); - - return smoothFrames[smoothFrameOffsets[chunk] + Mathf.Clamp(frameIndex, 0, smoothFrameCounts[chunk])]; - } - - public ObiPathFrame GetFrameAt(int rendererIndex, float mu) - { - rendererIndex = Mathf.Clamp(rendererIndex, 0, renderers.Count); - - if (rendererIndex >= chunkOffsets.count) - return ObiPathFrame.Identity; - - float length = 0; - for (int i = chunkOffsets[rendererIndex]; i < chunkOffsets[rendererIndex + 1]; ++i) - length += pathData[i].smoothLength; - - length *= mu; - - // iterate trough all chunks: - float lerp = 0; - int frame = 0; - for (int i = chunkOffsets[rendererIndex]; i < chunkOffsets[rendererIndex + 1]; ++i) - { - int firstFrame = smoothFrameOffsets[i]; - int frameCount = smoothFrameCounts[i]; - - // iterate trough all frames in this chunk, accumulating distance: - for (int j = firstFrame + 1; j < firstFrame + frameCount; ++j) - { - float frameDistance = Vector3.Distance(smoothFrames[j - 1].position, - smoothFrames[j].position); - - lerp = length / frameDistance; - length -= frameDistance; - frame = j; - - if (length <= 0) - return (1 - lerp) * smoothFrames[j - 1] + lerp * smoothFrames[j]; - } - } - - // if no chunks/no frames, return default frame. - return (1 - lerp) * smoothFrames[frame - 1] + lerp * smoothFrames[frame]; - } - - public void Step() - { - } - - public virtual void Render() - { - // Update rest lengths, in case they've changed due to cursors: - for (int i = 0; i < renderers.Count; ++i) - { - var rope = renderers[i].actor as ObiRopeBase; - - for (int j = chunkOffsets[i]; j < chunkOffsets[i + 1]; ++j) - { - var data = pathData[j]; - data.restLength = rope.restLength; - pathData[j] = data; - } - } - } - } -} - diff --git a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiPathSmootherRenderSystem.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiPathSmootherRenderSystem.cs.meta deleted file mode 100644 index 3fb94beb0..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiPathSmootherRenderSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fab1fee6e450d4e28a7a2770af3c94d9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeChainRenderer.cs b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeChainRenderer.cs deleted file mode 100644 index 361d445ce..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeChainRenderer.cs +++ /dev/null @@ -1,79 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeChainRenderer.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeChainRenderer.cs.meta deleted file mode 100644 index 0baf2dd5f..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeChainRenderer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 09ac962c0743c400aa230ebf871b6156 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 1289c40ad0e7c4fb3bd738f8a3f3e068, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeExtrudedRenderer.cs b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeExtrudedRenderer.cs deleted file mode 100644 index bac5b6877..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeExtrudedRenderer.cs +++ /dev/null @@ -1,74 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeExtrudedRenderer.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeExtrudedRenderer.cs.meta deleted file mode 100644 index 042955dba..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeExtrudedRenderer.cs.meta +++ /dev/null @@ -1,13 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeLineRenderer.cs b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeLineRenderer.cs deleted file mode 100644 index 83a537ee9..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeLineRenderer.cs +++ /dev/null @@ -1,68 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeLineRenderer.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeLineRenderer.cs.meta deleted file mode 100644 index 510cd3a77..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeLineRenderer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 18f853588397d4a80a561203ed92fc8a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 905a18c273af443d6bc588b59ebd56f6, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeMeshRenderer.cs b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeMeshRenderer.cs deleted file mode 100644 index c18e3de74..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeMeshRenderer.cs +++ /dev/null @@ -1,86 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeMeshRenderer.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeMeshRenderer.cs.meta deleted file mode 100644 index 0ef5b36ce..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Rendering/ObiRopeMeshRenderer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4ec7e70e3318044b69e11352b1f2136b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: c5afdc6c291b44a68be8bf66702358a5, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Utils.meta b/Assets/Obi/Scripts/RopeAndRod/Utils.meta deleted file mode 100644 index 1f7030543..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Utils.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 55cc87411ee7647b4a078becb6a5ed01 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Utils/ObiPinhole.cs b/Assets/Obi/Scripts/RopeAndRod/Utils/ObiPinhole.cs deleted file mode 100644 index 827462c95..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Utils/ObiPinhole.cs +++ /dev/null @@ -1,337 +0,0 @@ -using System; using UnityEngine; namespace Obi { [AddComponentMenu("Physics/Obi/Obi Pinhole", 820)] [RequireComponent(typeof(ObiRopeBase))] [ExecuteInEditMode] public class ObiPinhole : MonoBehaviour { [SerializeField] [HideInInspector] private ObiRopeBase m_Rope; [SerializeField] [HideInInspector] private Transform m_Target; [Range(0, 1)] [SerializeField] [HideInInspector] private float m_Position = 0; - - [SerializeField] [HideInInspector] private bool m_LimitRange = false; [MinMax(0, 1)] [SerializeField] [HideInInspector] private Vector2 m_Range = new Vector2(0, 1); [Range(0, 1)] [SerializeField] [HideInInspector] private float m_Friction = 0; [SerializeField] [HideInInspector] private float m_MotorSpeed = 0; [SerializeField] [HideInInspector] private float m_MotorForce = 0; - [SerializeField] [HideInInspector] private float m_Compliance = 0; [SerializeField] [HideInInspector] private bool m_ClampAtEnds = true; - - [SerializeField] [HideInInspector] private ObiPinholeConstraintsBatch.PinholeEdge currentEdge; - [SerializeField] [HideInInspector] public ObiPinholeConstraintsBatch.PinholeEdge firstEdge; - [SerializeField] [HideInInspector] public ObiPinholeConstraintsBatch.PinholeEdge lastEdge; - - // private variables are serialized during script reloading, to keep their value. Must mark them explicitly as non-serialized. - [NonSerialized] private ObiPinholeConstraintsBatch pinBatch; [NonSerialized] private ObiColliderBase attachedCollider; [NonSerialized] private int attachedColliderHandleIndex; - - [NonSerialized] private Vector3 m_PositionOffset; - [NonSerialized] private bool m_ParametersDirty = true; - [NonSerialized] private bool m_PositionDirty = false; - [NonSerialized] private bool m_RangeDirty = false; - - /// /// The rope this attachment is added to. /// public ObiActor rope { get { return m_Rope; } } - - public float edgeCoordinate - { - get { return currentEdge.coordinate; } - } - - public int edgeIndex - { - get { return currentEdge.edgeIndex; } - } - - /// /// The target transform that the pinhole should be attached to. /// public Transform target { get { return m_Target; } set { if (value != m_Target) { m_Target = value; Bind(); } } } - - /// /// Normalized coordinate of the point along the rope where the pinhole is positioned. /// - public float position - { - get { return m_Position; } - set - { - if (!Mathf.Approximately(value, m_Position)) { m_Position = value; CalculateMu(); } - } - } - - public bool limitRange - { - get { return m_LimitRange; } - set - { if (m_LimitRange != value) - { - m_LimitRange = value; - CalculateRange(); - } } - } - - /// /// Normalized coordinate of the point along the rope where the pinhole is positioned. /// - public Vector2 range - { - get { return m_Range; } - set - { m_Range = value; CalculateRange(); } - } - - /// /// Whether this pinhole is currently bound or not. /// public bool isBound { get { return m_Target != null && currentEdge.edgeIndex >= 0; } } - - /// /// Constraint compliance. /// /// High compliance values will increase the pinhole's elasticity. public float compliance { get { return m_Compliance; } set { if (!Mathf.Approximately(value, m_Compliance)) { m_Compliance = value; m_ParametersDirty = true; } } } - - public float friction { get { return m_Friction; } set { if (!Mathf.Approximately(value, m_Friction)) { m_Friction = value; m_ParametersDirty = true; - } } } - - public float motorSpeed { get { return m_MotorSpeed; } set { if (!Mathf.Approximately(value, m_MotorSpeed)) { m_MotorSpeed = value; m_ParametersDirty = true; } } } - - public float motorForce { get { return m_MotorForce; } set { if (!Mathf.Approximately(value, m_MotorForce)) { m_MotorForce = value; m_ParametersDirty = true; } } } - - public bool clampAtEnds { get { return m_ClampAtEnds; } set { if (m_ClampAtEnds != value) { m_ClampAtEnds = value; m_ParametersDirty = true; } } } - - /// /// Force threshold above which the pinhole should break. /// [Delayed] public float breakThreshold = float.PositiveInfinity; public float relativeVelocity { get; private set; } private void OnEnable() { m_Rope = GetComponent(); m_Rope.OnBlueprintLoaded += Actor_OnBlueprintLoaded; m_Rope.OnSimulationStart += Actor_OnSimulationStart; m_Rope.OnRequestReadback += Actor_OnRequestReadback; if (m_Rope.solver != null) Actor_OnBlueprintLoaded(m_Rope, m_Rope.sourceBlueprint); EnablePinhole(); } - - private void OnDisable() { DisablePinhole(); m_Rope.OnBlueprintLoaded -= Actor_OnBlueprintLoaded; m_Rope.OnSimulationStart -= Actor_OnSimulationStart; m_Rope.OnRequestReadback -= Actor_OnRequestReadback; } private void OnValidate() { m_Rope = GetComponent(); - m_ParametersDirty = true; m_PositionDirty = true; m_RangeDirty = true; } private void Actor_OnBlueprintLoaded(ObiActor act, ObiActorBlueprint blueprint) { Bind(); } private void Actor_OnSimulationStart(ObiActor act, float stepTime, float substepTime) { - // Attachments must be updated at the start of the step, before performing any simulation. - UpdatePinhole(); - - // if there's any broken constraint, flag pinhole constraints as dirty for remerging at the start of the next step. - BreakPinhole(substepTime); } - - private void Actor_OnRequestReadback(ObiActor actor) - { - if (enabled && m_Rope.isLoaded && isBound) { - var solver = m_Rope.solver; - - var actorConstraints = m_Rope.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; - var solverConstraints = solver.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; - - if (actorConstraints != null && pinBatch != null && actorConstraints.batchCount <= solverConstraints.batchCount) - { - int pinBatchIndex = actorConstraints.batches.IndexOf(pinBatch); - if (pinBatchIndex >= 0 && pinBatchIndex < rope.solverBatchOffsets[(int)Oni.ConstraintType.Pinhole].Count) - { - var solverBatch = solverConstraints.batches[pinBatchIndex]; - - solverBatch.particleIndices.Readback(); - solverBatch.edgeMus.Readback(); - solverBatch.relativeVelocities.Readback(); - } - } - } - } - - private void ClampMuToRange() - { - if (m_LimitRange) - { - float maxCoord = lastEdge.GetRopeCoordinate(m_Rope); - float minCoord = firstEdge.GetRopeCoordinate(m_Rope); - - if (m_Position > maxCoord) - { - m_Position = maxCoord; - currentEdge.edgeIndex = m_Rope.GetEdgeAt(m_Position, out currentEdge.coordinate); - m_PositionDirty = true; - } - else if (m_Position < minCoord) - { - m_Position = minCoord; - currentEdge.edgeIndex = m_Rope.GetEdgeAt(m_Position, out currentEdge.coordinate); - m_PositionDirty = true; - } - } - } - - public void CalculateMu() - { - currentEdge.edgeIndex = m_Rope.GetEdgeAt(m_Position, out currentEdge.coordinate); - ClampMuToRange(); - - m_PositionDirty = true; - } public void CalculateRange() - { - if (m_LimitRange) - { - firstEdge.edgeIndex = m_Rope.GetEdgeAt(m_Range.x, out firstEdge.coordinate); - lastEdge.edgeIndex = m_Rope.GetEdgeAt(m_Range.y, out lastEdge.coordinate); - } - else - { - firstEdge.edgeIndex = m_Rope.GetEdgeAt(0, out firstEdge.coordinate); - lastEdge.edgeIndex = m_Rope.GetEdgeAt(1, out lastEdge.coordinate); - firstEdge.coordinate = -float.MaxValue; - lastEdge.coordinate = float.MaxValue; - } - - ClampMuToRange(); - - m_RangeDirty = true; - } public void Bind() { - // Disable pinhole. - DisablePinhole(); if (m_Target != null && m_Rope.isLoaded) { Matrix4x4 bindMatrix = m_Target.worldToLocalMatrix * m_Rope.solver.transform.localToWorldMatrix; - - var ropeBlueprint = m_Rope.sharedBlueprint as ObiRopeBlueprintBase; - if (ropeBlueprint != null && ropeBlueprint.deformableEdges != null) - { - currentEdge.edgeIndex = m_Rope.GetEdgeAt(m_Position, out currentEdge.coordinate); - - if (currentEdge.edgeIndex >= 0) - { - CalculateRange(); - m_RangeDirty = false; - m_PositionDirty = false; - - int p1 = ropeBlueprint.deformableEdges[currentEdge.edgeIndex * 2]; - int p2 = ropeBlueprint.deformableEdges[currentEdge.edgeIndex * 2+1]; - Vector4 pos = Vector4.Lerp(m_Rope.solver.positions[m_Rope.solverIndices[p1]], m_Rope.solver.positions[m_Rope.solverIndices[p2]], currentEdge.coordinate); - m_PositionOffset = bindMatrix.MultiplyPoint3x4(pos); - } } } else { currentEdge.edgeIndex = -1; } // Re-enable pinhole. EnablePinhole(); } private void EnablePinhole() { if (enabled && m_Rope.isLoaded && isBound) { var pins = m_Rope.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiPinholeConstraintsData; - attachedCollider = m_Target.GetComponent(); - - if (pins != null && attachedCollider != null && pinBatch == null) - { - // create a new data batch with all our pin constraints: - pinBatch = new ObiPinholeConstraintsBatch(pins); - pinBatch.AddConstraint(currentEdge, - firstEdge, - lastEdge, - m_Rope, - attachedCollider, - m_PositionOffset, - m_Compliance, - m_Friction, - m_MotorSpeed, - m_MotorForce, - m_ClampAtEnds); - - pinBatch.activeConstraintCount++; - - // add the batch to the actor: - pins.AddBatch(pinBatch); - - // store the attached collider's handle: - attachedColliderHandleIndex = -1; - if (attachedCollider.Handle != null) - attachedColliderHandleIndex = attachedCollider.Handle.index; - - m_Rope.SetConstraintsDirty(Oni.ConstraintType.Pinhole); - } } } private void DisablePinhole() { if (isBound) { if (pinBatch != null) - { - var pins = m_Rope.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; - if (pins != null) - { - pins.RemoveBatch(pinBatch); - if (rope.isLoaded) - m_Rope.SetConstraintsDirty(Oni.ConstraintType.Pinhole); - } - - attachedCollider = null; - pinBatch = null; - attachedColliderHandleIndex = -1; - } } } private void UpdatePinhole() { if (enabled && m_Rope.isLoaded && isBound) { - UpdateEdgeCoordinate(); - UpdateParameters(); - - // in case the handle has been updated/invalidated (for instance, when disabling the target) rebuild constraints: - if (attachedCollider != null && - attachedCollider.Handle != null && - attachedCollider.Handle.index != attachedColliderHandleIndex) - { - attachedColliderHandleIndex = attachedCollider.Handle.index; - m_Rope.SetConstraintsDirty(Oni.ConstraintType.Pinhole); - } } else if (!isBound && attachedColliderHandleIndex >= 0) - { - attachedColliderHandleIndex = -1; - m_Rope.SetConstraintsDirty(Oni.ConstraintType.Pinhole); - } } - - private void UpdateParameters() - { - if (enabled && m_Rope.isLoaded && isBound && m_ParametersDirty) { - var solver = m_Rope.solver; - - var actorConstraints = m_Rope.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; - var solverConstraints = solver.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; - - if (actorConstraints != null && pinBatch != null && actorConstraints.batchCount <= solverConstraints.batchCount) - { - int pinBatchIndex = actorConstraints.batches.IndexOf(pinBatch); - if (pinBatchIndex >= 0 && pinBatchIndex < rope.solverBatchOffsets[(int)Oni.ConstraintType.Pinhole].Count) - { - int offset = rope.solverBatchOffsets[(int)Oni.ConstraintType.Pinhole][pinBatchIndex]; - var solverBatch = solverConstraints.batches[pinBatchIndex]; - - for (int i = 0; i < pinBatch.activeConstraintCount; i++) - { - solverBatch.parameters[(offset + i) * 5] = m_Compliance; - solverBatch.parameters[(offset + i) * 5+1] = m_Friction; - solverBatch.parameters[(offset + i) * 5+2] = m_MotorSpeed; - solverBatch.parameters[(offset + i) * 5+3] = m_MotorForce; - solverBatch.parameters[(offset + i) * 5+4] = m_ClampAtEnds ? 1 : 0; - } - solverBatch.parameters.Upload(); - - m_ParametersDirty = false; - } - } - } - } private void UpdateEdgeCoordinate() - { - if (enabled && m_Rope.isLoaded && isBound) { - var solver = m_Rope.solver; - - var actorConstraints = m_Rope.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; - var solverConstraints = solver.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; - - if (actorConstraints != null && pinBatch != null && actorConstraints.batchCount <= solverConstraints.batchCount) - { - int pinBatchIndex = actorConstraints.batches.IndexOf(pinBatch); - if (pinBatchIndex >= 0 && pinBatchIndex < rope.solverBatchOffsets[(int)Oni.ConstraintType.Pinhole].Count) - { - int offset = rope.solverBatchOffsets[(int)Oni.ConstraintType.Pinhole][pinBatchIndex]; - var solverBatch = solverConstraints.batches[pinBatchIndex]; - - solverBatch.particleIndices.WaitForReadback(); - solverBatch.edgeMus.WaitForReadback(); - solverBatch.relativeVelocities.WaitForReadback(); - - if (m_RangeDirty) - { - // update edge index and coordinate, then upload them. - for (int i = 0; i < pinBatch.activeConstraintCount; i++) - { - solverBatch.edgeRanges[(offset + i) * 2] = m_Rope.deformableEdgesOffset + firstEdge.edgeIndex; - solverBatch.edgeRanges[(offset + i) * 2 + 1] = m_Rope.deformableEdgesOffset + lastEdge.edgeIndex; - solverBatch.edgeRangeMus[(offset + i) * 2] = firstEdge.coordinate; - solverBatch.edgeRangeMus[(offset + i) * 2 + 1] = lastEdge.coordinate; - } - solverBatch.edgeRanges.Upload(); - solverBatch.edgeRangeMus.Upload(); - - m_RangeDirty = false; - } - - if (m_PositionDirty) - { - // update edge index and coordinate, then upload them. - for (int i = 0; i < pinBatch.activeConstraintCount; i++) - { - solverBatch.particleIndices[offset + i] = m_Rope.deformableEdgesOffset + currentEdge.edgeIndex; - solverBatch.edgeMus[offset + i] = currentEdge.coordinate; - } - solverBatch.particleIndices.Upload(); - solverBatch.edgeMus.Upload(); - - m_PositionDirty = false; - } - else - { - // read edge index and coordinate: - for (int i = 0; i < pinBatch.activeConstraintCount; i++) - { - currentEdge.coordinate = solverBatch.edgeMus[offset + i]; - currentEdge.edgeIndex = solverBatch.particleIndices[offset + i] - m_Rope.deformableEdgesOffset; - m_Position = currentEdge.GetRopeCoordinate(m_Rope); - } - } - - for (int i = 0; i < pinBatch.activeConstraintCount; i++) - { - relativeVelocity = solverBatch.relativeVelocities[offset + i]; - } - } - } - } - } private void BreakPinhole(float substepTime) { if (enabled && m_Rope.isLoaded && isBound) { var solver = m_Rope.solver; var actorConstraints = m_Rope.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; var solverConstraints = solver.GetConstraintsByType(Oni.ConstraintType.Pinhole) as ObiConstraints; bool dirty = false; if (actorConstraints != null && pinBatch != null && actorConstraints.batchCount <= solverConstraints.batchCount) { int pinBatchIndex = actorConstraints.batches.IndexOf(pinBatch); if (pinBatchIndex >= 0 && pinBatchIndex < rope.solverBatchOffsets[(int)Oni.ConstraintType.Pinhole].Count) { int offset = rope.solverBatchOffsets[(int)Oni.ConstraintType.Pinhole][pinBatchIndex]; var solverBatch = solverConstraints.batches[pinBatchIndex]; float sqrTime = substepTime * substepTime; for (int i = 0; i < pinBatch.activeConstraintCount; i++) { - // In case the handle has been created/destroyed. - if (pinBatch.pinBodies[i] != attachedCollider.Handle) { pinBatch.pinBodies[i] = attachedCollider.Handle; dirty = true; } - - // in case the constraint has been broken: - if (-solverBatch.lambdas[offset + i] / sqrTime > breakThreshold) { pinBatch.DeactivateConstraint(i); dirty = true; } } } } - - // constraints are recreated at the start of a step. - if (dirty) m_Rope.SetConstraintsDirty(Oni.ConstraintType.Pinhole); } } } } \ No newline at end of file diff --git a/Assets/Obi/Scripts/RopeAndRod/Utils/ObiPinhole.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Utils/ObiPinhole.cs.meta deleted file mode 100644 index bec258d4c..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Utils/ObiPinhole.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2aadf7c5471054b0db8c70bd317bc272 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 214df93f7c2ed4c1094bb6105c050575, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeAttach.cs b/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeAttach.cs deleted file mode 100644 index 7a108393c..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeAttach.cs +++ /dev/null @@ -1,23 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeAttach.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeAttach.cs.meta deleted file mode 100644 index 1ef0c917e..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeAttach.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 93cd44c04a2944349b4fe311545b7e05 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopePrefabPlugger.cs b/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopePrefabPlugger.cs deleted file mode 100644 index 9697db2e0..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopePrefabPlugger.cs +++ /dev/null @@ -1,108 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopePrefabPlugger.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopePrefabPlugger.cs.meta deleted file mode 100644 index ce2b9a1cf..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopePrefabPlugger.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4514513daf5b14cb689daa23e9d8575e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeReel.cs b/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeReel.cs deleted file mode 100644 index 58dfb54f4..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeReel.cs +++ /dev/null @@ -1,62 +0,0 @@ -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/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeReel.cs.meta b/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeReel.cs.meta deleted file mode 100644 index 4c46cb087..000000000 --- a/Assets/Obi/Scripts/RopeAndRod/Utils/ObiRopeReel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4793f08b8350d44db99d1bc98daf625b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Easy Save 3/Resources/ES3/ES3Defaults.asset b/Assets/Plugins/Easy Save 3/Resources/ES3/ES3Defaults.asset index d885440e4..7e52a6dc9 100644 --- a/Assets/Plugins/Easy Save 3/Resources/ES3/ES3Defaults.asset +++ b/Assets/Plugins/Easy Save 3/Resources/ES3/ES3Defaults.asset @@ -60,7 +60,6 @@ MonoBehaviour: - NBC.Core - NBC.Lan - NBC.UI - - Obi - Obious.Soap.Example - Obvious.Soap - OccaSoftware.SuperSimpleSkybox.Demo diff --git a/Assets/ResRaw/Prefabs/Line/fishing line float set.prefab b/Assets/ResRaw/Prefabs/Line/fishing line float set.prefab index 0325fa0e6..5ca0cb3cd 100644 --- a/Assets/ResRaw/Prefabs/Line/fishing line float set.prefab +++ b/Assets/ResRaw/Prefabs/Line/fishing line float set.prefab @@ -9,16 +9,8 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 4439867113915692} - - component: {fileID: 114612983243751934} - - component: {fileID: 23649574223012002} - - component: {fileID: 33934948971999448} - - component: {fileID: 114265716934294554} - - component: {fileID: 114148468497635697} - - component: {fileID: 114671520904232594} - - component: {fileID: 114172005767509640} - - component: {fileID: 114941649757569269} - component: {fileID: 114581403422500557} - - component: {fileID: 3675173244858016862} + - component: {fileID: 991521994724602848} m_Layer: 0 m_Name: Fishing Line m_TagString: Untagged @@ -41,447 +33,6 @@ Transform: m_Children: [] m_Father: {fileID: 4283454774123242} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &114612983243751934 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1017528709445045} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: - m_AlignBytes: 16 - groupID: 1 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 0.5 - elements: - - particle1: 0 - particle2: 1 - restLength: 0.01 - constraintForce: 0 - tearResistance: 1 - - particle1: 1 - particle2: 2 - restLength: 0.01 - constraintForce: 0 - tearResistance: 1 - - particle1: 2 - particle2: 3 - restLength: 0.01 - constraintForce: 0 - tearResistance: 1 - - particle1: 3 - particle2: 4 - restLength: 0.01 - constraintForce: 0 - tearResistance: 1 - - particle1: 4 - particle2: 5 - restLength: 0.010000002 - constraintForce: 0 - tearResistance: 1 - - particle1: 5 - particle2: 6 - restLength: 0.009999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 6 - particle2: 7 - restLength: 0.010000002 - constraintForce: 0 - tearResistance: 1 - - particle1: 7 - particle2: 8 - restLength: 0.009999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 8 - particle2: 9 - restLength: 0.010000005 - constraintForce: 0 - tearResistance: 1 - - particle1: 9 - particle2: 10 - restLength: 0.009999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 10 - particle2: 11 - restLength: 0.009999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 11 - particle2: 12 - restLength: 0.009999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 12 - particle2: 13 - restLength: 0.009999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 13 - particle2: 14 - restLength: 0.010000005 - constraintForce: 0 - tearResistance: 1 - - particle1: 14 - particle2: 15 - restLength: 0.010000005 - constraintForce: 0 - tearResistance: 1 - - particle1: 15 - particle2: 16 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 16 - particle2: 17 - restLength: 0.010000005 - constraintForce: 0 - tearResistance: 1 - - particle1: 17 - particle2: 18 - restLength: 0.010000005 - constraintForce: 0 - tearResistance: 1 - - particle1: 18 - particle2: 19 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 19 - particle2: 20 - restLength: 0.010000005 - constraintForce: 0 - tearResistance: 1 - - particle1: 20 - particle2: 21 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 21 - particle2: 22 - restLength: 0.010000005 - constraintForce: 0 - tearResistance: 1 - - particle1: 22 - particle2: 23 - restLength: 0.010000005 - constraintForce: 0 - tearResistance: 1 - - particle1: 23 - particle2: 24 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 24 - particle2: 25 - restLength: 0.010000005 - constraintForce: 0 - tearResistance: 1 - - particle1: 25 - particle2: 26 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 26 - particle2: 27 - restLength: 0.01000002 - constraintForce: 0 - tearResistance: 1 - - particle1: 27 - particle2: 28 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 28 - particle2: 29 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 29 - particle2: 30 - restLength: 0.01000002 - constraintForce: 0 - tearResistance: 1 - - particle1: 30 - particle2: 31 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 31 - particle2: 32 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 32 - particle2: 33 - restLength: 0.01000002 - constraintForce: 0 - tearResistance: 1 - - particle1: 33 - particle2: 34 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 34 - particle2: 35 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 35 - particle2: 36 - restLength: 0.01000002 - constraintForce: 0 - tearResistance: 1 - - particle1: 36 - particle2: 37 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 37 - particle2: 38 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 38 - particle2: 39 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 39 - particle2: 40 - restLength: 0.01000002 - constraintForce: 0 - tearResistance: 1 - - particle1: 40 - particle2: 41 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 41 - particle2: 42 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 42 - particle2: 43 - restLength: 0.01000002 - constraintForce: 0 - tearResistance: 1 - - particle1: 43 - particle2: 44 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 44 - particle2: 45 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 45 - particle2: 46 - restLength: 0.01000002 - constraintForce: 0 - tearResistance: 1 - - particle1: 46 - particle2: 47 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 47 - particle2: 48 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - - particle1: 48 - particle2: 49 - restLength: 0.01000002 - constraintForce: 0 - tearResistance: 1 - - particle1: 49 - particle2: 50 - restLength: 0.00999999 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: 90165a559e0af984497f40ee19419ea5, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0.5 - _maxBending: 0.5 - _plasticYield: 0.1 - _plasticCreep: 0 ---- !u!23 &23649574223012002 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1017528709445045} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 - m_RenderingLayerMask: 257 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 4be07647ecdb4b845a9e0fbc74bb0e0a, 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_GlobalIlluminationMeshLod: 0 - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &33934948971999448 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1017528709445045} - m_Mesh: {fileID: 0} ---- !u!114 &114265716934294554 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1017528709445045} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0.15 - smoothing: 3 - twist: 25 - indexInSystem: 0 ---- !u!114 &114148468497635697 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1017528709445045} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 0 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 1} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 1 ---- !u!114 &114671520904232594 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1017528709445045} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 114612983243751934} - m_Target: {fileID: 0} - m_ParticleGroup: {fileID: 5356683708585918033, guid: 90165a559e0af984497f40ee19419ea5, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &114172005767509640 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1017528709445045} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 114612983243751934} - m_Target: {fileID: 4530253318796540} - m_ParticleGroup: {fileID: -6506362155496508246, guid: 90165a559e0af984497f40ee19419ea5, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &114941649757569269 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1017528709445045} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8285ac97113f74d449053378d0e3a56b, type: 3} - m_Name: - m_EditorClassIdentifier: - m_CursorMu: 0 - m_SourceMu: 0 - direction: 1 --- !u!114 &114581403422500557 MonoBehaviour: m_ObjectHideFlags: 0 @@ -494,33 +45,143 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 98ba9d435a0e49c9bb527c34cc91894d, type: 3} m_Name: m_EditorClassIdentifier: - isFloatRope: 0 - rope: {fileID: 114612983243751934} - cursor: {fileID: 114941649757569269} - percentageElasticity: 1 ---- !u!114 &3675173244858016862 -MonoBehaviour: + startAnchor: {fileID: 0} + endAnchor: {fileID: 54298866000586118} + physicsSegmentLen: 0.1 + minPhysicsNodes: 2 + maxPhysicsNodes: 200 + gravityStrength: 2 + velocityDampen: 0.95 + stiffness: 0.8 + iterations: 20 + initialLength: 0 + lengthSmoothTime: 0.15 + lengthChangeVelocityKill: 0.6 + minSlack: 0.002 + headMinLen: 0.01 + constrainToGround: 1 + groundMask: + serializedVersion: 2 + m_Bits: 4513599 + groundRadius: 0.01 + groundCastHeight: 1 + groundCastDistance: 2.5 + constrainToWater: 0 + waterHeight: 0 + waterRadius: 0.01 + renderSubdivisions: 6 + smooth: 1 + lineWidth: 0.01 +--- !u!120 &991521994724602848 +LineRenderer: + serializedVersion: 2 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1017528709445045} m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8b45ebbf86be4df6b0e6cd933812af2, type: 3} - m_Name: - m_EditorClassIdentifier: Obi::Obi.ObiParticleRenderer - 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 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 1} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 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_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + textureScale: {x: 1, y: 1} + shadowBias: 0.5 + generateLightingData: 0 + m_MaskInteraction: 0 + m_UseWorldSpace: 1 + m_Loop: 0 + m_ApplyActiveColorSpace: 1 --- !u!1 &1035052809208993 GameObject: m_ObjectHideFlags: 0 @@ -769,7 +430,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c0403ffd74ce46fab8bd4ef057e51432, type: 3} m_Name: m_EditorClassIdentifier: - startParticleAttachment: {fileID: 114671520904232594} isLureConnect: 0 rodLine: {fileID: 4922671409596527468} fishingRope: {fileID: 114581403422500557} @@ -962,16 +622,8 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 4110509859352936} - - component: {fileID: 114941221864603208} - - component: {fileID: 23047835326758575} - - component: {fileID: 33644460670467264} - - component: {fileID: 114075091806130127} - - component: {fileID: 114972033155067211} - - component: {fileID: 114977355817525795} - - component: {fileID: 114623075352630189} - - component: {fileID: 114422070939195681} - component: {fileID: 114504105083509877} - - component: {fileID: 8819644686915953391} + - component: {fileID: 484878994603287356} m_Layer: 0 m_Name: Float Line m_TagString: Untagged @@ -994,317 +646,6 @@ Transform: m_Children: [] m_Father: {fileID: 4283454774123242} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &114941221864603208 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1933124697579601} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: - solverIndices: - serializedContents: - m_AlignBytes: 16 - groupID: 2 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 0.5 - elements: - - particle1: 151 - particle2: 152 - restLength: 0.022047479 - constraintForce: 0 - tearResistance: 1 - - particle1: 152 - particle2: 153 - restLength: 0.022272225 - constraintForce: 0 - tearResistance: 1 - - particle1: 153 - particle2: 154 - restLength: 0.022317044 - constraintForce: 0 - tearResistance: 1 - - particle1: 154 - particle2: 155 - restLength: 0.022227883 - constraintForce: 0 - tearResistance: 1 - - particle1: 155 - particle2: 156 - restLength: 0.022270732 - constraintForce: 0 - tearResistance: 1 - - particle1: 156 - particle2: 157 - restLength: 0.022227883 - constraintForce: 0 - tearResistance: 1 - - particle1: 157 - particle2: 158 - restLength: 0.022317037 - constraintForce: 0 - tearResistance: 1 - - particle1: 158 - particle2: 159 - restLength: 0.022272244 - constraintForce: 0 - tearResistance: 1 - - particle1: 159 - particle2: 160 - restLength: 0.022047475 - constraintForce: 0 - tearResistance: 1 - - particle1: 160 - particle2: 161 - restLength: 0.01999247 - constraintForce: 0 - tearResistance: 1 - - particle1: 161 - particle2: 162 - restLength: 0.020001456 - constraintForce: 0 - tearResistance: 1 - - particle1: 162 - particle2: 163 - restLength: 0.02001217 - constraintForce: 0 - tearResistance: 1 - - particle1: 163 - particle2: 164 - restLength: 0.020001411 - constraintForce: 0 - tearResistance: 1 - - particle1: 164 - particle2: 165 - restLength: 0.0199925 - constraintForce: 0 - tearResistance: 1 - - particle1: 165 - particle2: 166 - restLength: 0.01999253 - constraintForce: 0 - tearResistance: 1 - - particle1: 166 - particle2: 167 - restLength: 0.020001382 - constraintForce: 0 - tearResistance: 1 - - particle1: 167 - particle2: 168 - restLength: 0.02001217 - constraintForce: 0 - tearResistance: 1 - - particle1: 168 - particle2: 169 - restLength: 0.020001411 - constraintForce: 0 - tearResistance: 1 - - particle1: 169 - particle2: 170 - restLength: 0.0199925 - constraintForce: 0 - tearResistance: 1 - - particle1: 170 - particle2: 171 - restLength: 0.01999253 - constraintForce: 0 - tearResistance: 1 - - particle1: 171 - particle2: 172 - restLength: 0.020001382 - constraintForce: 0 - tearResistance: 1 - - particle1: 172 - particle2: 173 - restLength: 0.02001217 - constraintForce: 0 - tearResistance: 1 - - particle1: 173 - particle2: 174 - restLength: 0.020001382 - constraintForce: 0 - tearResistance: 1 - - particle1: 174 - particle2: 175 - restLength: 0.01999253 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: c70c206ebccc14c4eb6a0cdbe80779f7, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0.5 - _maxBending: 0.5 - _plasticYield: 0.1 - _plasticCreep: 0 ---- !u!23 &23047835326758575 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1933124697579601} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RayTracingAccelStructBuildFlagsOverride: 0 - m_RayTracingAccelStructBuildFlags: 1 - m_SmallMeshCulling: 1 - m_ForceMeshLod: -1 - m_MeshLodSelectionBias: 0 - m_RenderingLayerMask: 257 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 4be07647ecdb4b845a9e0fbc74bb0e0a, 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_GlobalIlluminationMeshLod: 0 - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &33644460670467264 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1933124697579601} - m_Mesh: {fileID: 0} ---- !u!114 &114075091806130127 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1933124697579601} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: - decimation: 0.1 - smoothing: 3 - twist: 25 - indexInSystem: 1 ---- !u!114 &114972033155067211 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1933124697579601} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: - material: {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 0 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 1} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 1 ---- !u!114 &114977355817525795 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1933124697579601} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 114941221864603208} - m_Target: {fileID: 4530253318796540} - m_ParticleGroup: {fileID: -5395693579433732326, guid: c70c206ebccc14c4eb6a0cdbe80779f7, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &114623075352630189 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1933124697579601} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Actor: {fileID: 114941221864603208} - m_Target: {fileID: 4026445325167852} - m_ParticleGroup: {fileID: -2515171973132415257, guid: c70c206ebccc14c4eb6a0cdbe80779f7, type: 2} - m_AttachmentType: 0 - m_ConstrainOrientation: 0 - m_Projection: 0 - m_Compliance: 0 - breakThreshold: Infinity ---- !u!114 &114422070939195681 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1933124697579601} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 8285ac97113f74d449053378d0e3a56b, type: 3} - m_Name: - m_EditorClassIdentifier: - m_CursorMu: 0 - m_SourceMu: 1 - direction: 1 --- !u!114 &114504105083509877 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1317,33 +658,143 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 98ba9d435a0e49c9bb527c34cc91894d, type: 3} m_Name: m_EditorClassIdentifier: - isFloatRope: 1 - rope: {fileID: 114941221864603208} - cursor: {fileID: 114422070939195681} - percentageElasticity: 1 ---- !u!114 &8819644686915953391 -MonoBehaviour: + startAnchor: {fileID: 54298866000586118} + endAnchor: {fileID: 54679398375713381} + physicsSegmentLen: 0.1 + minPhysicsNodes: 2 + maxPhysicsNodes: 120 + gravityStrength: 2 + velocityDampen: 0.95 + stiffness: 0.8 + iterations: 20 + initialLength: 0 + lengthSmoothTime: 0.15 + lengthChangeVelocityKill: 0.6 + minSlack: 0.002 + headMinLen: 0.01 + constrainToGround: 1 + groundMask: + serializedVersion: 2 + m_Bits: 4513599 + groundRadius: 0.01 + groundCastHeight: 1 + groundCastDistance: 2.5 + constrainToWater: 0 + waterHeight: 0 + waterRadius: 0.01 + renderSubdivisions: 6 + smooth: 1 + lineWidth: 0.01 +--- !u!120 &484878994603287356 +LineRenderer: + serializedVersion: 2 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1933124697579601} m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c8b45ebbf86be4df6b0e6cd933812af2, type: 3} - m_Name: - m_EditorClassIdentifier: Obi::Obi.ObiParticleRenderer - 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 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 1} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 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_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + textureScale: {x: 1, y: 1} + shadowBias: 0.5 + generateLightingData: 0 + m_MaskInteraction: 0 + m_UseWorldSpace: 1 + m_Loop: 0 + m_ApplyActiveColorSpace: 1 --- !u!1 &1943073364215513 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/RopeTest.unity b/Assets/Scenes/RopeTest.unity index ec950c43d..f10f7393f 100644 --- a/Assets/Scenes/RopeTest.unity +++ b/Assets/Scenes/RopeTest.unity @@ -119,52 +119,6 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &190947007 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 190947009} - - component: {fileID: 190947008} - m_Layer: 0 - m_Name: BurstCollisionWorld - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &190947008 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 190947007} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} - m_Name: - m_EditorClassIdentifier: Obi::Obi.BurstColliderWorld - cellSpans: - m_AlignBytes: 16 ---- !u!4 &190947009 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 190947007} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &203844586 GameObject: m_ObjectHideFlags: 0 @@ -292,365 +246,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} ---- !u!1 &204056484 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 204056485} - - component: {fileID: 204056488} - - component: {fileID: 204056487} - - component: {fileID: 204056486} - 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 &204056485 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 204056484} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 1601278529} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &204056486 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 204056484} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} - m_Name: - m_EditorClassIdentifier: Obi::Obi.ObiRopeExtrudedRenderer - material: {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} - renderParameters: - layer: 0 - lightProbeUsage: 1 - reflectionProbeUsage: 1 - shadowCastingMode: 1 - receiveShadows: 1 - motionVectors: 0 - renderingLayerMask: 4294967295 - uvAnchor: 0 - uvScale: {x: 1, y: 1} - normalizeV: 1 - section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} - thicknessScale: 0.8 ---- !u!114 &204056487 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 204056484} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} - m_Name: - m_EditorClassIdentifier: Obi::Obi.ObiPathSmoother - decimation: 0 - smoothing: 0 - twist: 0 - indexInSystem: 0 ---- !u!114 &204056488 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 204056484} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} - m_Name: - m_EditorClassIdentifier: Obi::Obi.ObiRope - solverIndices: - serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c0000007d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000ea000000eb000000ec000000ed000000ee000000ef000000f0000000f1000000f2000000f3000000f4000000f5000000f6000000f7000000f8000000f9000000 - m_AlignBytes: 16 - groupID: 1 - m_CollisionMaterial: {fileID: 0} - m_SurfaceCollisions: 0 - m_MassScale: 1 - m_SelfCollisions: 0 - restLength_: 1 - elements: - - particle1: 0 - particle2: 1 - restLength: 0.04 - constraintForce: 0 - tearResistance: 1 - - particle1: 1 - particle2: 2 - restLength: 0.02 - constraintForce: 0 - tearResistance: 1 - - particle1: 2 - particle2: 3 - restLength: 0.02 - constraintForce: 0 - tearResistance: 1 - - particle1: 3 - particle2: 4 - restLength: 0.020000003 - constraintForce: 0 - tearResistance: 1 - - particle1: 4 - particle2: 5 - restLength: 0.019999996 - constraintForce: 0 - tearResistance: 1 - - particle1: 5 - particle2: 6 - restLength: 0.020000003 - constraintForce: 0 - tearResistance: 1 - - particle1: 6 - particle2: 7 - restLength: 0.019999996 - constraintForce: 0 - tearResistance: 1 - - particle1: 7 - particle2: 8 - restLength: 0.02000001 - constraintForce: 0 - tearResistance: 1 - - particle1: 8 - particle2: 9 - restLength: 0.019999996 - constraintForce: 0 - tearResistance: 1 - - particle1: 9 - particle2: 10 - restLength: 0.019999996 - constraintForce: 0 - tearResistance: 1 - - particle1: 10 - particle2: 11 - restLength: 0.019999996 - constraintForce: 0 - tearResistance: 1 - - particle1: 11 - particle2: 12 - restLength: 0.019999996 - constraintForce: 0 - tearResistance: 1 - - particle1: 12 - particle2: 13 - restLength: 0.02000001 - constraintForce: 0 - tearResistance: 1 - - particle1: 13 - particle2: 14 - restLength: 0.02000001 - constraintForce: 0 - tearResistance: 1 - - particle1: 14 - particle2: 15 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 15 - particle2: 16 - restLength: 0.02000001 - constraintForce: 0 - tearResistance: 1 - - particle1: 16 - particle2: 17 - restLength: 0.02000001 - constraintForce: 0 - tearResistance: 1 - - particle1: 17 - particle2: 18 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 18 - particle2: 19 - restLength: 0.02000001 - constraintForce: 0 - tearResistance: 1 - - particle1: 19 - particle2: 20 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 20 - particle2: 21 - restLength: 0.02000001 - constraintForce: 0 - tearResistance: 1 - - particle1: 21 - particle2: 22 - restLength: 0.02000001 - constraintForce: 0 - tearResistance: 1 - - particle1: 22 - particle2: 23 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 23 - particle2: 24 - restLength: 0.02000001 - constraintForce: 0 - tearResistance: 1 - - particle1: 24 - particle2: 25 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 25 - particle2: 26 - restLength: 0.02000004 - constraintForce: 0 - tearResistance: 1 - - particle1: 26 - particle2: 27 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 27 - particle2: 28 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 28 - particle2: 29 - restLength: 0.02000004 - constraintForce: 0 - tearResistance: 1 - - particle1: 29 - particle2: 30 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 30 - particle2: 31 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 31 - particle2: 32 - restLength: 0.02000004 - constraintForce: 0 - tearResistance: 1 - - particle1: 32 - particle2: 33 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 33 - particle2: 34 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 34 - particle2: 35 - restLength: 0.02000004 - constraintForce: 0 - tearResistance: 1 - - particle1: 35 - particle2: 36 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 36 - particle2: 37 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 37 - particle2: 38 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 38 - particle2: 39 - restLength: 0.02000004 - constraintForce: 0 - tearResistance: 1 - - particle1: 39 - particle2: 40 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 40 - particle2: 41 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 41 - particle2: 42 - restLength: 0.02000004 - constraintForce: 0 - tearResistance: 1 - - particle1: 42 - particle2: 43 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 43 - particle2: 44 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 44 - particle2: 45 - restLength: 0.02000004 - constraintForce: 0 - tearResistance: 1 - - particle1: 45 - particle2: 46 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 46 - particle2: 47 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - - particle1: 47 - particle2: 48 - restLength: 0.02000004 - constraintForce: 0 - tearResistance: 1 - - particle1: 48 - particle2: 49 - restLength: 0.01999998 - constraintForce: 0 - tearResistance: 1 - _aerodynamicsEnabled: 1 - _drag: 0.05 - _lift: 0.02 - m_RopeBlueprint: {fileID: 11400000, guid: 90165a559e0af984497f40ee19419ea5, type: 2} - tearingEnabled: 0 - tearResistanceMultiplier: 1000 - tearRate: 1 - _distanceConstraintsEnabled: 1 - _stretchingScale: 1 - _stretchCompliance: 0 - _maxCompression: 0 - _bendConstraintsEnabled: 1 - _bendCompliance: 0 - _maxBending: 0.025 - _plasticYield: 0 - _plasticCreep: 0 --- !u!1 &337505875 GameObject: m_ObjectHideFlags: 0 @@ -1511,7 +1106,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 204056485} + - {fileID: 8117598136312104020} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1694612696 @@ -1625,6 +1220,52 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1694612696} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1714253611 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1714253613} + - component: {fileID: 1714253612} + m_Layer: 0 + m_Name: BurstCollisionWorld + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1714253612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714253611} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1a161c4294214a4fbcb7e9e94800494, type: 3} + m_Name: + m_EditorClassIdentifier: Obi::Obi.BurstColliderWorld + cellSpans: + m_AlignBytes: 16 +--- !u!4 &1714253613 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714253611} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2055159198 GameObject: m_ObjectHideFlags: 0 @@ -1764,6 +1405,29 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2055159198} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &778308709455625297 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119543254562602735} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c8b45ebbf86be4df6b0e6cd933812af2, type: 3} + m_Name: + m_EditorClassIdentifier: Obi::Obi.ObiParticleRenderer + 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!114 &1920091469802601324 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1799,6 +1463,41 @@ MonoBehaviour: renderingLayerMask: 4294967295 k__BackingField: {r: 1, g: 1, b: 1, a: 1} k__BackingField: 1 +--- !u!114 &3816906410227166674 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119515755686205543} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5625b86b9e4b4482b82d83b962d0c873, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::RodLine +--- !u!114 &4875253389575895776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118629857601973003} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c8b45ebbf86be4df6b0e6cd933812af2, type: 3} + m_Name: + m_EditorClassIdentifier: Obi::Obi.ObiParticleRenderer + 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!114 &4919921352901105371 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1882,6 +1581,20 @@ Transform: m_CorrespondingSourceObject: {fileID: 744750288977666519, guid: 865b58fce3190254c8f19f70f294a0da, type: 3} m_PrefabInstance: {fileID: 5634959157749674791} m_PrefabAsset: {fileID: 0} +--- !u!114 &6133517375737252240 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119478150814791356} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8e9411b5edc6466a8014c59e3821bbaa, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::NBF.BobberController + _rbody: {fileID: 8099828655688219448} + joint: {fileID: 8253605012841951763} --- !u!153 &6689220046679245543 ConfigurableJoint: m_ObjectHideFlags: 0 @@ -3370,6 +3083,20 @@ MonoBehaviour: normalizeV: 1 section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} thicknessScale: 1 +--- !u!114 &7645699620610277477 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118612270620924447} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ed5bbbc032ec4ca1bb56991d9141e311, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::NBF.LureController + rBody: {fileID: 8100556427846743259} + joint: {fileID: 8253140013628920921} --- !u!114 &7923388705101294686 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3393,6 +3120,1414 @@ MonoBehaviour: renderingLayerMask: 4294967295 k__BackingField: {r: 1, g: 1, b: 1, a: 1} k__BackingField: 1 +--- !u!54 &8099828655688219448 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119478150814791356} + serializedVersion: 5 + m_Mass: 0.1 + m_LinearDamping: 1 + m_AngularDamping: 0.1 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 0.001, y: 0.001, z: 0.001} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 0 + m_UseGravity: 1 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 2 +--- !u!54 &8100556427846743259 +Rigidbody: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118612270620924447} + serializedVersion: 5 + m_Mass: 0.01 + m_LinearDamping: 1 + m_AngularDamping: 0.1 + m_CenterOfMass: {x: 0, y: 0, z: 0} + m_InertiaTensor: {x: 0.001, y: 0.001, z: 0.001} + m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ImplicitCom: 1 + m_ImplicitTensor: 0 + m_UseGravity: 0 + m_IsKinematic: 0 + m_Interpolate: 0 + m_Constraints: 0 + m_CollisionDetection: 2 +--- !u!4 &8117225698763714518 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119543254562602735} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8117598136312104020} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &8117449978511159890 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118612270620924447} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -1.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8117598136312104020} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &8117581860903869330 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118629857601973003} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8117598136312104020} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &8117598136312104020 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118962644956607959} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 486.93997, y: 0.24998, z: 420.9324} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8122440385966590432} + - {fileID: 8117581860903869330} + - {fileID: 8117225698763714518} + - {fileID: 8117449978511159890} + - {fileID: 8122434914864310850} + m_Father: {fileID: 1601278529} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8118612270620924447 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8117449978511159890} + - component: {fileID: 8100556427846743259} + - component: {fileID: 8253140013628920921} + - component: {fileID: 8163383766948519134} + - component: {fileID: 7645699620610277477} + m_Layer: 7 + m_Name: Lure + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &8118629857601973003 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8117581860903869330} + - component: {fileID: 8160408579860127552} + - component: {fileID: 8141578562736913948} + - component: {fileID: 8129058971098738278} + - component: {fileID: 8159752492518154916} + - component: {fileID: 8159747188374390735} + - component: {fileID: 8160472619643117612} + - component: {fileID: 8159723648520316982} + - component: {fileID: 8156279967975087691} + - component: {fileID: 8160422011297183859} + - component: {fileID: 4875253389575895776} + m_Layer: 0 + m_Name: Fishing Line + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &8118962644956607959 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8117598136312104020} + - component: {fileID: 8159922936740883981} + m_Layer: 0 + m_Name: fishing line float set + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &8119478150814791356 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8122434914864310850} + - component: {fileID: 8099828655688219448} + - component: {fileID: 8253605012841951763} + - component: {fileID: 6133517375737252240} + m_Layer: 16 + m_Name: Float + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &8119515755686205543 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8122440385966590432} + - component: {fileID: 8143755866791508326} + - component: {fileID: 3816906410227166674} + m_Layer: 0 + m_Name: Rod Line + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &8119543254562602735 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8117225698763714518} + - component: {fileID: 8156280429137191158} + - component: {fileID: 8140632749704126481} + - component: {fileID: 8133273112949334654} + - component: {fileID: 8159943123048042865} + - component: {fileID: 8156232011165955061} + - component: {fileID: 8156244270472182941} + - component: {fileID: 8160397922979826963} + - component: {fileID: 8160018935126886303} + - component: {fileID: 8160095196834104011} + - component: {fileID: 778308709455625297} + m_Layer: 0 + m_Name: Float Line + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8122434914864310850 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119478150814791356} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8117598136312104020} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &8122440385966590432 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119515755686205543} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8117598136312104020} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8129058971098738278 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118629857601973003} + m_Mesh: {fileID: 0} +--- !u!33 &8133273112949334654 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119543254562602735} + m_Mesh: {fileID: 0} +--- !u!23 &8140632749704126481 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119543254562602735} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 257 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 4be07647ecdb4b845a9e0fbc74bb0e0a, 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_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!23 &8141578562736913948 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118629857601973003} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 257 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 4be07647ecdb4b845a9e0fbc74bb0e0a, 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_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!120 &8143755866791508326 +LineRenderer: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119515755686205543} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 4be07647ecdb4b845a9e0fbc74bb0e0a, 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_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: 0, y: 0, z: 0} + - {x: 0, y: 0, z: 1} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 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_ColorSpace: -1 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + textureScale: {x: 1, y: 1} + shadowBias: 0.5 + generateLightingData: 0 + m_MaskInteraction: 0 + m_UseWorldSpace: 1 + m_Loop: 0 + m_ApplyActiveColorSpace: 1 +--- !u!114 &8156232011165955061 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119543254562602735} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 0 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 1} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 1 +--- !u!114 &8156244270472182941 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119543254562602735} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 8156280429137191158} + m_Target: {fileID: 8122434914864310850} + m_ParticleGroup: {fileID: -5395693579433732326, guid: c70c206ebccc14c4eb6a0cdbe80779f7, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &8156279967975087691 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118629857601973003} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8285ac97113f74d449053378d0e3a56b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_CursorMu: 0 + m_SourceMu: 0 + direction: 1 +--- !u!114 &8156280429137191158 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119543254562602735} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f000000100000001100000012000000130000001400000015000000160000001700000018000000190000001a0000001b0000001c0000001d0000001e0000001f000000200000002100000022000000230000002400000025000000260000002700000028000000290000002a0000002b0000002c0000002d0000002e0000002f000000300000003100000032000000330000003400000035000000360000003700000038000000390000003a0000003b0000003c0000003d0000003e0000003f000000400000004100000042000000430000004400000045000000460000004700000048000000490000004a0000004b0000004c0000004d0000004e0000004f000000500000005100000052000000530000005400000055000000560000005700000058000000590000005a0000005b0000005c0000005d0000005e0000005f000000600000006100000062000000630000006400000065000000660000006700000068000000690000006a0000006b0000006c0000006d0000006e0000006f000000700000007100000072000000730000007400000075000000760000007700000078000000790000007a0000007b0000007c000000 + m_AlignBytes: 16 + groupID: 1 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 0.5 + elements: + - particle1: 0 + particle2: 1 + restLength: 0.022047479 + constraintForce: 0 + tearResistance: 1 + - particle1: 1 + particle2: 2 + restLength: 0.022272225 + constraintForce: 0 + tearResistance: 1 + - particle1: 2 + particle2: 3 + restLength: 0.022317044 + constraintForce: 0 + tearResistance: 1 + - particle1: 3 + particle2: 4 + restLength: 0.022227883 + constraintForce: 0 + tearResistance: 1 + - particle1: 4 + particle2: 5 + restLength: 0.022270732 + constraintForce: 0 + tearResistance: 1 + - particle1: 5 + particle2: 6 + restLength: 0.022227883 + constraintForce: 0 + tearResistance: 1 + - particle1: 6 + particle2: 7 + restLength: 0.022317037 + constraintForce: 0 + tearResistance: 1 + - particle1: 7 + particle2: 8 + restLength: 0.022272244 + constraintForce: 0 + tearResistance: 1 + - particle1: 8 + particle2: 9 + restLength: 0.022047475 + constraintForce: 0 + tearResistance: 1 + - particle1: 9 + particle2: 10 + restLength: 0.01999247 + constraintForce: 0 + tearResistance: 1 + - particle1: 10 + particle2: 11 + restLength: 0.020001456 + constraintForce: 0 + tearResistance: 1 + - particle1: 11 + particle2: 12 + restLength: 0.02001217 + constraintForce: 0 + tearResistance: 1 + - particle1: 12 + particle2: 13 + restLength: 0.020001411 + constraintForce: 0 + tearResistance: 1 + - particle1: 13 + particle2: 14 + restLength: 0.0199925 + constraintForce: 0 + tearResistance: 1 + - particle1: 14 + particle2: 15 + restLength: 0.01999253 + constraintForce: 0 + tearResistance: 1 + - particle1: 15 + particle2: 16 + restLength: 0.020001382 + constraintForce: 0 + tearResistance: 1 + - particle1: 16 + particle2: 17 + restLength: 0.02001217 + constraintForce: 0 + tearResistance: 1 + - particle1: 17 + particle2: 18 + restLength: 0.020001411 + constraintForce: 0 + tearResistance: 1 + - particle1: 18 + particle2: 19 + restLength: 0.0199925 + constraintForce: 0 + tearResistance: 1 + - particle1: 19 + particle2: 20 + restLength: 0.01999253 + constraintForce: 0 + tearResistance: 1 + - particle1: 20 + particle2: 21 + restLength: 0.020001382 + constraintForce: 0 + tearResistance: 1 + - particle1: 21 + particle2: 22 + restLength: 0.02001217 + constraintForce: 0 + tearResistance: 1 + - particle1: 22 + particle2: 23 + restLength: 0.020001382 + constraintForce: 0 + tearResistance: 1 + - particle1: 23 + particle2: 24 + restLength: 0.01999253 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: c70c206ebccc14c4eb6a0cdbe80779f7, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.5 + _maxBending: 0.5 + _plasticYield: 0.1 + _plasticCreep: 0 +--- !u!114 &8159723648520316982 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118629857601973003} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 8160408579860127552} + m_Target: {fileID: 8122434914864310850} + m_ParticleGroup: {fileID: -6506362155496508246, guid: 90165a559e0af984497f40ee19419ea5, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &8159747188374390735 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118629857601973003} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c4747da60837c44f9ba4b4a86879bcc8, type: 3} + m_Name: + m_EditorClassIdentifier: + material: {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + renderParameters: + layer: 0 + lightProbeUsage: 1 + reflectionProbeUsage: 1 + shadowCastingMode: 0 + receiveShadows: 1 + motionVectors: 0 + renderingLayerMask: 4294967295 + uvAnchor: 0 + uvScale: {x: 1, y: 1} + normalizeV: 1 + section: {fileID: 11400000, guid: a0bc36a59515f413e90e10895929c938, type: 2} + thicknessScale: 1 +--- !u!114 &8159752492518154916 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118629857601973003} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0.15 + smoothing: 3 + twist: 25 + indexInSystem: 1 +--- !u!114 &8159922936740883981 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118962644956607959} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c0403ffd74ce46fab8bd4ef057e51432, type: 3} + m_Name: + m_EditorClassIdentifier: + startParticleAttachment: {fileID: 8160472619643117612} + isLureConnect: 0 + rodLine: {fileID: 3816906410227166674} + fishingRope: {fileID: 8160422011297183859} + bobberRope: {fileID: 8160095196834104011} + Lure: {fileID: 7645699620610277477} + Bobber: {fileID: 6133517375737252240} +--- !u!114 &8159943123048042865 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119543254562602735} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 958c969cfb16745f192d4d7bd28b7178, type: 3} + m_Name: + m_EditorClassIdentifier: + decimation: 0.1 + smoothing: 3 + twist: 25 + indexInSystem: 0 +--- !u!114 &8160018935126886303 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119543254562602735} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8285ac97113f74d449053378d0e3a56b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_CursorMu: 0 + m_SourceMu: 1 + direction: 1 +--- !u!114 &8160095196834104011 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119543254562602735} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98ba9d435a0e49c9bb527c34cc91894d, type: 3} + m_Name: + m_EditorClassIdentifier: + isFloatRope: 1 + rope: {fileID: 8156280429137191158} + cursor: {fileID: 8160018935126886303} + percentageElasticity: 1 +--- !u!114 &8160397922979826963 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119543254562602735} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 8156280429137191158} + m_Target: {fileID: 8117449978511159890} + m_ParticleGroup: {fileID: -2515171973132415257, guid: c70c206ebccc14c4eb6a0cdbe80779f7, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!114 &8160408579860127552 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118629857601973003} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61104f33a3f344db9b7e0d0cda41a9fb, type: 3} + m_Name: + m_EditorClassIdentifier: + solverIndices: + serializedContents: 7d0000007e0000007f000000800000008100000082000000830000008400000085000000860000008700000088000000890000008a0000008b0000008c0000008d0000008e0000008f000000900000009100000092000000930000009400000095000000960000009700000098000000990000009a0000009b0000009c0000009d0000009e0000009f000000a0000000a1000000a2000000a3000000a4000000a5000000a6000000a7000000a8000000a9000000aa000000ab000000ac000000ad000000ae000000af000000b0000000b1000000b2000000b3000000b4000000b5000000b6000000b7000000b8000000b9000000ba000000bb000000bc000000bd000000be000000bf000000c0000000c1000000c2000000c3000000c4000000c5000000c6000000c7000000c8000000c9000000ca000000cb000000cc000000cd000000ce000000cf000000d0000000d1000000d2000000d3000000d4000000d5000000d6000000d7000000d8000000d9000000da000000db000000dc000000dd000000de000000df000000e0000000e1000000e2000000e3000000e4000000e5000000e6000000e7000000e8000000e9000000ea000000eb000000ec000000ed000000ee000000ef000000f0000000f1000000f2000000f3000000f4000000f5000000f6000000f7000000f8000000f9000000fa000000fb000000fc000000fd000000fe000000ff000000000100000101000002010000030100000401000005010000060100000701000008010000090100000a0100000b0100000c0100000d0100000e0100000f010000100100001101000012010000130100001401000015010000160100001701000018010000190100001a0100001b0100001c0100001d0100001e0100001f010000200100002101000022010000230100002401000025010000260100002701000028010000290100002a0100002b0100002c0100002d0100002e0100002f010000300100003101000032010000330100003401000035010000360100003701000038010000390100003a0100003b0100003c0100003d0100003e0100003f010000400100004101000042010000430100004401000045010000460100004701000048010000490100004a0100004b0100004c0100004d0100004e0100004f010000500100005101000052010000530100005401000055010000560100005701000058010000590100005a0100005b0100005c0100005d0100005e0100005f010000600100006101000062010000630100006401000065010000660100006701000068010000690100006a0100006b0100006c0100006d0100006e0100006f01000070010000710100007201000073010000740100007501000076010000 + m_AlignBytes: 16 + groupID: 2 + m_CollisionMaterial: {fileID: 0} + m_SurfaceCollisions: 0 + m_MassScale: 1 + m_SelfCollisions: 0 + restLength_: 1 + elements: + - particle1: 125 + particle2: 126 + restLength: 0.02 + constraintForce: 0 + tearResistance: 1 + - particle1: 126 + particle2: 127 + restLength: 0.02 + constraintForce: 0 + tearResistance: 1 + - particle1: 127 + particle2: 128 + restLength: 0.02 + constraintForce: 0 + tearResistance: 1 + - particle1: 128 + particle2: 129 + restLength: 0.02 + constraintForce: 0 + tearResistance: 1 + - particle1: 129 + particle2: 130 + restLength: 0.020000003 + constraintForce: 0 + tearResistance: 1 + - particle1: 130 + particle2: 131 + restLength: 0.019999996 + constraintForce: 0 + tearResistance: 1 + - particle1: 131 + particle2: 132 + restLength: 0.020000003 + constraintForce: 0 + tearResistance: 1 + - particle1: 132 + particle2: 133 + restLength: 0.019999996 + constraintForce: 0 + tearResistance: 1 + - particle1: 133 + particle2: 134 + restLength: 0.02000001 + constraintForce: 0 + tearResistance: 1 + - particle1: 134 + particle2: 135 + restLength: 0.019999996 + constraintForce: 0 + tearResistance: 1 + - particle1: 135 + particle2: 136 + restLength: 0.019999996 + constraintForce: 0 + tearResistance: 1 + - particle1: 136 + particle2: 137 + restLength: 0.019999996 + constraintForce: 0 + tearResistance: 1 + - particle1: 137 + particle2: 138 + restLength: 0.019999996 + constraintForce: 0 + tearResistance: 1 + - particle1: 138 + particle2: 139 + restLength: 0.02000001 + constraintForce: 0 + tearResistance: 1 + - particle1: 139 + particle2: 140 + restLength: 0.02000001 + constraintForce: 0 + tearResistance: 1 + - particle1: 140 + particle2: 141 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 141 + particle2: 142 + restLength: 0.02000001 + constraintForce: 0 + tearResistance: 1 + - particle1: 142 + particle2: 143 + restLength: 0.02000001 + constraintForce: 0 + tearResistance: 1 + - particle1: 143 + particle2: 144 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 144 + particle2: 145 + restLength: 0.02000001 + constraintForce: 0 + tearResistance: 1 + - particle1: 145 + particle2: 146 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 146 + particle2: 147 + restLength: 0.02000001 + constraintForce: 0 + tearResistance: 1 + - particle1: 147 + particle2: 148 + restLength: 0.02000001 + constraintForce: 0 + tearResistance: 1 + - particle1: 148 + particle2: 149 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 149 + particle2: 150 + restLength: 0.02000001 + constraintForce: 0 + tearResistance: 1 + - particle1: 150 + particle2: 151 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 151 + particle2: 152 + restLength: 0.02000004 + constraintForce: 0 + tearResistance: 1 + - particle1: 152 + particle2: 153 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 153 + particle2: 154 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 154 + particle2: 155 + restLength: 0.02000004 + constraintForce: 0 + tearResistance: 1 + - particle1: 155 + particle2: 156 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 156 + particle2: 157 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 157 + particle2: 158 + restLength: 0.02000004 + constraintForce: 0 + tearResistance: 1 + - particle1: 158 + particle2: 159 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 159 + particle2: 160 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 160 + particle2: 161 + restLength: 0.02000004 + constraintForce: 0 + tearResistance: 1 + - particle1: 161 + particle2: 162 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 162 + particle2: 163 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 163 + particle2: 164 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 164 + particle2: 165 + restLength: 0.02000004 + constraintForce: 0 + tearResistance: 1 + - particle1: 165 + particle2: 166 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 166 + particle2: 167 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 167 + particle2: 168 + restLength: 0.02000004 + constraintForce: 0 + tearResistance: 1 + - particle1: 168 + particle2: 169 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 169 + particle2: 170 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 170 + particle2: 171 + restLength: 0.02000004 + constraintForce: 0 + tearResistance: 1 + - particle1: 171 + particle2: 172 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 172 + particle2: 173 + restLength: 0.01999998 + constraintForce: 0 + tearResistance: 1 + - particle1: 173 + particle2: 174 + restLength: 0.04000002 + constraintForce: 0 + tearResistance: 1 + _aerodynamicsEnabled: 1 + _drag: 0.05 + _lift: 0.02 + m_RopeBlueprint: {fileID: 11400000, guid: 90165a559e0af984497f40ee19419ea5, type: 2} + tearingEnabled: 0 + tearResistanceMultiplier: 1000 + tearRate: 1 + _distanceConstraintsEnabled: 1 + _stretchingScale: 1 + _stretchCompliance: 0 + _maxCompression: 0 + _bendConstraintsEnabled: 1 + _bendCompliance: 0.5 + _maxBending: 0.5 + _plasticYield: 0.1 + _plasticCreep: 0 +--- !u!114 &8160422011297183859 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118629857601973003} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98ba9d435a0e49c9bb527c34cc91894d, type: 3} + m_Name: + m_EditorClassIdentifier: + isFloatRope: 0 + rope: {fileID: 8160408579860127552} + cursor: {fileID: 8156279967975087691} + percentageElasticity: 1 +--- !u!114 &8160472619643117612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118629857601973003} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d03c9194b7ab4aaba4dfa5afec22c69, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Actor: {fileID: 8160408579860127552} + m_Target: {fileID: 0} + m_ParticleGroup: {fileID: 5356683708585918033, guid: 90165a559e0af984497f40ee19419ea5, type: 2} + m_AttachmentType: 0 + m_ConstrainOrientation: 0 + m_Projection: 0 + m_Compliance: 0 + breakThreshold: Infinity +--- !u!135 &8163383766948519134 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118612270620924447} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.003 + m_Center: {x: 0, y: -0.0015, z: 0} +--- !u!153 &8253140013628920921 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118612270620924447} + serializedVersion: 4 + m_ConnectedBody: {fileID: 8099828655688219448} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0, y: 0, z: 0} + m_Axis: {x: 0, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 0 + m_ConnectedAnchor: {x: 0, y: 0, z: 0} + m_SecondaryAxis: {x: 0, y: 0, z: 0} + m_XMotion: 1 + m_YMotion: 1 + m_ZMotion: 1 + m_AngularXMotion: 2 + m_AngularYMotion: 2 + m_AngularZMotion: 2 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0.5 + 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: 4 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + useAcceleration: 0 + m_YDrive: + serializedVersion: 4 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + useAcceleration: 0 + m_ZDrive: + serializedVersion: 4 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + useAcceleration: 0 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 0 + m_AngularXDrive: + serializedVersion: 4 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + useAcceleration: 0 + m_AngularYZDrive: + serializedVersion: 4 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + useAcceleration: 0 + m_SlerpDrive: + serializedVersion: 4 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + useAcceleration: 0 + m_ProjectionMode: 1 + m_ProjectionDistance: 0 + m_ProjectionAngle: 0 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 0 + m_MassScale: 1 + m_ConnectedMassScale: 1 +--- !u!153 &8253605012841951763 +ConfigurableJoint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8119478150814791356} + serializedVersion: 4 + m_ConnectedBody: {fileID: 2055159200} + m_ConnectedArticulationBody: {fileID: 0} + m_Anchor: {x: 0, y: -0.01, z: 0} + m_Axis: {x: 0, y: 0, z: 0} + m_AutoConfigureConnectedAnchor: 0 + m_ConnectedAnchor: {x: 0, y: 0, z: 0} + m_SecondaryAxis: {x: 0, y: 0, z: 0} + m_XMotion: 1 + m_YMotion: 1 + m_ZMotion: 1 + m_AngularXMotion: 2 + m_AngularYMotion: 2 + m_AngularZMotion: 2 + m_LinearLimitSpring: + spring: 0 + damper: 0 + m_LinearLimit: + limit: 0.5 + 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: 4 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + useAcceleration: 0 + m_YDrive: + serializedVersion: 4 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + useAcceleration: 0 + m_ZDrive: + serializedVersion: 4 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + useAcceleration: 0 + m_TargetRotation: {x: 0, y: 0, z: 0, w: 1} + m_TargetAngularVelocity: {x: 0, y: 0, z: 0} + m_RotationDriveMode: 0 + m_AngularXDrive: + serializedVersion: 4 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + useAcceleration: 0 + m_AngularYZDrive: + serializedVersion: 4 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + useAcceleration: 0 + m_SlerpDrive: + serializedVersion: 4 + positionSpring: 0 + positionDamper: 0 + maximumForce: 3.4028233e+38 + useAcceleration: 0 + m_ProjectionMode: 1 + m_ProjectionDistance: 0 + m_ProjectionAngle: 0 + m_ConfiguredInWorldSpace: 0 + m_SwapBodies: 0 + m_BreakForce: Infinity + m_BreakTorque: Infinity + m_EnableCollision: 0 + m_EnablePreprocessing: 0 + m_MassScale: 1 + m_ConnectedMassScale: 1 --- !u!114 &8882022755018891054 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3418,4 +4553,4 @@ SceneRoots: - {fileID: 1264227901} - {fileID: 337505879} - {fileID: 1601278529} - - {fileID: 190947009} + - {fileID: 1714253613} diff --git a/Assets/Scripts/Editor/RopeEditor.cs b/Assets/Scripts/Editor/RopeEditor.cs new file mode 100644 index 000000000..3498e1499 --- /dev/null +++ b/Assets/Scripts/Editor/RopeEditor.cs @@ -0,0 +1,57 @@ +using UnityEditor; +using UnityEngine; + +[CustomEditor(typeof(Rope))] +public class RopeFishLineEditor : Editor +{ + private Rope _target; + + void OnEnable() + { + _target = target as Rope; + // lookAtPoint = serializedObject.FindProperty("lookAtPoint"); + } + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + if (GUILayout.Button("增加0.5长度")) + { + _target.AddTargetLength(0.5f); + } + + if (GUILayout.Button("减小0.5长度")) + { + _target.AddTargetLength(-0.5f); + } + + if (GUILayout.Button("增加0.1长度")) + { + _target.AddTargetLength(0.1f); + } + + if (GUILayout.Button("减小0.1长度")) + { + _target.AddTargetLength(-0.1f); + } + + if (GUILayout.Button("增加0.01长度")) + { + _target.AddTargetLength(0.01f); + } + + if (GUILayout.Button("减小0.01长度")) + { + _target.AddTargetLength(-0.01f); + } + + + if (GUILayout.Button("打印总长度")) + { + Debug.Log($"总长度={_target.GetCurrentLength()} 目标长度={_target.GetTargetLength()}"); + } + // serializedObject.Update(); + // EditorGUILayout.PropertyField(lookAtPoint); + // serializedObject.ApplyModifiedProperties(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Editor/RopeEditor.cs.meta b/Assets/Scripts/Editor/RopeEditor.cs.meta new file mode 100644 index 000000000..9fc80e10b --- /dev/null +++ b/Assets/Scripts/Editor/RopeEditor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f24add4ba0ae4e76acd98c4a5512c366 +timeCreated: 1771850618 \ No newline at end of file diff --git a/Assets/Scripts/Fishing/Rope/RodLine.cs b/Assets/Scripts/Fishing/Rope/RodLine.cs index 7a5a46352..ca6853f7c 100644 --- a/Assets/Scripts/Fishing/Rope/RodLine.cs +++ b/Assets/Scripts/Fishing/Rope/RodLine.cs @@ -1,9 +1,9 @@ -using Obi; +// using Obi; using UnityEngine; public class RodLine : MonoBehaviour { - private ObiRope obiRope; + // private ObiRope obiRope; private LineRenderer lineRenderer; diff --git a/Assets/Scripts/Fishing/Rope/Rope.cs b/Assets/Scripts/Fishing/Rope/Rope.cs index 5fb1419ec..bb6c0c1fb 100644 --- a/Assets/Scripts/Fishing/Rope/Rope.cs +++ b/Assets/Scripts/Fishing/Rope/Rope.cs @@ -1,44 +1,512 @@ -using NBC; -using NBF; -using Obi; +using NBF; using UnityEngine; +[RequireComponent(typeof(LineRenderer))] public class Rope : MonoBehaviour { - private FRod _rod; - public bool isFloatRope; - [SerializeField] private ObiRope rope; + [Header("Anchors")] [SerializeField] public Rigidbody startAnchor; + [SerializeField] public Rigidbody endAnchor; - [SerializeField] private ObiRopeCursor cursor; + [Header("Physics (Dynamic Nodes, Fixed Segment Len)")] [SerializeField, Min(0.01f), Tooltip("物理每段固定长度(越小越细致越耗)")] + private float physicsSegmentLen = 0.15f; - [SerializeField] private float percentageElasticity = 0.2f; + [SerializeField, Range(2, 200)] private int minPhysicsNodes = 12; + + [SerializeField, Range(2, 400)] [Tooltip("物理节点上限(仅用于性能保护;与“最大长度不限制”不是一回事)")] + private int maxPhysicsNodes = 120; + + [SerializeField] private float gravityStrength = 2.0f; + [SerializeField, Range(0f, 1f)] private float velocityDampen = 0.95f; + + [SerializeField, Range(0.0f, 1.0f)] [Tooltip("约束修正强度,越大越硬。0.6~0.9 常用")] + private float stiffness = 0.8f; + + [SerializeField, Range(1, 80)] [Tooltip("迭代次数。鱼线 10~30 通常够用")] + private int iterations = 20; + + [Header("Length Control (No Min/Max Clamp)")] + [Tooltip("初始总长度(米)。如果为 0,则用 physicsSegmentLen*(minPhysicsNodes-1) 作为初始长度")] + [SerializeField, Min(0f)] + private float initialLength = 0f; + + [Tooltip("长度变化平滑时间(越小越跟手,越大越稳)")] [SerializeField, Min(0.0001f)] + private float lengthSmoothTime = 0.15f; + + [Tooltip("当长度在变化时,额外把速度压掉一些(防抖)。0=不额外处理,1=变化时几乎清速度")] [SerializeField, Range(0f, 1f)] + private float lengthChangeVelocityKill = 0.6f; + + [Tooltip("允许的最小松弛余量(避免目标长度刚好等于锚点距离时抖动)")] [SerializeField, Min(0f)] + private float minSlack = 0.002f; + + [Header("Head Segment Clamp")] [Tooltip("第一段(起点->第1节点)允许的最小长度,避免收线时第一段被压到0导致数值炸")] [SerializeField, Min(0.0001f)] + private float headMinLen = 0.01f; + + [Header("Simple Ground/Water Constraint (Cheap)")] [SerializeField] + private bool constrainToGround = true; + + [SerializeField] private LayerMask groundMask = ~0; + [SerializeField, Min(0f)] private float groundRadius = 0.01f; + [SerializeField, Min(0f)] private float groundCastHeight = 1.0f; + [SerializeField, Min(0.01f)] private float groundCastDistance = 2.5f; + + [SerializeField] private bool constrainToWater = false; + [SerializeField] private float waterHeight = 0f; + [SerializeField, Min(0f)] private float waterRadius = 0.01f; + + [Header("Render (High Resolution)")] [SerializeField, Min(1), Tooltip("每段物理线段插值加密的数量(越大越顺,越耗)")] + private int renderSubdivisions = 6; + + [SerializeField, Tooltip("是否使用 Catmull-Rom 平滑(推荐开启)")] + private bool smooth = true; + + [SerializeField, Min(0.0001f)] private float lineWidth = 0.002f; + + private LineRenderer lr; + + // physics + private int physicsNodes; + private Vector3[] pCurr; + private Vector3[] pPrev; + + // render + private Vector3[] rPoints; + private int rCountCached = -1; + + private Vector3 gravity; + + // length control runtime + private float targetLength; + private float currentLength; + private float lengthSmoothVel; + + // Only-head-change trick: + // Total rest length = headRestLen + (physicsNodes - 2) * physicsSegmentLen + private float headRestLen; - private float stretchScale; private void Awake() { - rope = GetComponent(); + lr = GetComponent(); + gravity = new Vector3(0f, -gravityStrength, 0f); + + InitLengthSystem(); + AllocateAndInitNodes(); + RebuildRenderBufferIfNeeded(); } + + private FRod _rod; public void Init(FRod rod) { _rod = rod; } - public void LineLength_OnValueChanged(float length) + private void OnValidate() { - cursor = cursor == null ? GetComponent() : cursor; - var old = stretchScale; - stretchScale = Mathf.Clamp(length - percentageElasticity, 0f, float.PositiveInfinity); - // cursor.ChangeLength(length); - if (stretchScale != old) + renderSubdivisions = Mathf.Max(renderSubdivisions, 1); + iterations = Mathf.Clamp(iterations, 1, 80); + groundCastDistance = Mathf.Max(groundCastDistance, 0.01f); + groundCastHeight = Mathf.Max(groundCastHeight, 0f); + lineWidth = Mathf.Max(lineWidth, 0.0001f); + + lengthSmoothTime = Mathf.Max(lengthSmoothTime, 0.0001f); + + physicsSegmentLen = Mathf.Max(physicsSegmentLen, 0.01f); + minPhysicsNodes = Mathf.Max(minPhysicsNodes, 2); + maxPhysicsNodes = Mathf.Max(maxPhysicsNodes, minPhysicsNodes); + + headMinLen = Mathf.Max(headMinLen, 0.0001f); + } + + private void InitLengthSystem() + { + // 没有 min/max 长度限制:初始长度只做一个“非负”保障 + float defaultLen = physicsSegmentLen * (Mathf.Max(minPhysicsNodes, 2) - 1); + currentLength = (initialLength > 0f) ? initialLength : defaultLen; + targetLength = currentLength; + } + + private void AllocateAndInitNodes() + { + // 若锚点存在:最小长度就是两锚点直线距离 + minSlack(防抖) + if (startAnchor && endAnchor) { - Log.Info($"rope name={gameObject.name} stretchScale={stretchScale}"); + float minFeasible = Vector3.Distance(startAnchor.position, endAnchor.position) + minSlack; + currentLength = Mathf.Max(currentLength, minFeasible); + targetLength = Mathf.Max(targetLength, minFeasible); + } + + physicsNodes = Mathf.Clamp(ComputeDesiredNodes(currentLength), 2, maxPhysicsNodes); + pCurr = new Vector3[physicsNodes]; + pPrev = new Vector3[physicsNodes]; + + // 初始从起点往下排 + Vector3 start = startAnchor ? startAnchor.position : transform.position; + Vector3 dir = Vector3.down; + + for (int i = 0; i < physicsNodes; i++) + { + Vector3 pos = start + dir * (physicsSegmentLen * i); + pCurr[i] = pos; + pPrev[i] = pos; + } + + UpdateHeadRestLenFromCurrentLength(); + + if (startAnchor && endAnchor) + LockAnchorsHard(); + } + + private int ComputeDesiredNodes(float lengthMeters) + { + // nodes = floor(length/segLen)+1 + int desired = Mathf.FloorToInt(Mathf.Max(0f, lengthMeters) / physicsSegmentLen) + 1; + desired = Mathf.Clamp(desired, minPhysicsNodes, maxPhysicsNodes); + return desired; + } + + /// 设置目标总长度(米)。不做最小/最大长度限制(最小可行由锚点距离决定)。 + public void SetTargetLength(float lengthMeters) + { + targetLength = Mathf.Max(0f, lengthMeters); + } + + /// 增加/减少目标总长度(米)。正数放线,负数收线。 + public void AddTargetLength(float deltaMeters) + { + SetTargetLength(targetLength + deltaMeters); + } + + public float GetCurrentLength() => currentLength; + public float GetTargetLength() => targetLength; + + public float GetAnchorDistance() + { + if (startAnchor != null && endAnchor != null) + { + return Vector3.Distance(startAnchor.position, endAnchor.position); + } + + return 0; + } + + + private void FixedUpdate2() + { + if (!startAnchor || !endAnchor) + return; + + gravity.y = -gravityStrength; + + UpdateLengthSmooth(); // 只保证 >= 锚点直线距离 + minSlack + UpdateNodesFromLength(); // 只从头部增/减节点 + UpdateHeadRestLenFromCurrentLength(); // 第一段补余量 => 变化集中在头部 + + Simulate(); + + for (int it = 0; it < iterations; it++) + { + SolveDistanceConstraints_HeadOnly(); + LockAnchorsHard(); + } + + if (constrainToWater || constrainToGround) + ConstrainToGroundAndWater(); + + LockAnchorsHard(); + } + + private void LateUpdate() + { + DrawHighResLine(); + FixedUpdate2(); + } + + private void UpdateLengthSmooth() + { + float anchorDist = Vector3.Distance(startAnchor.position, endAnchor.position); + float minFeasible = anchorDist + minSlack; + + // ✅ 最小长度 = 起点终点直线距离(+slack),最大不限制 + float desired = Mathf.Max(targetLength, minFeasible); + + float prevLen = currentLength; + + currentLength = Mathf.SmoothDamp( + currentLength, + desired, + ref lengthSmoothVel, + lengthSmoothTime, + Mathf.Infinity, + Time.fixedDeltaTime + ); + + float lenDelta = Mathf.Abs(currentLength - prevLen); + if (lenDelta > 1e-5f && lengthChangeVelocityKill > 0f && pPrev != null) + { + float kill = Mathf.Clamp01(lengthChangeVelocityKill); + for (int i = 1; i < physicsNodes - 1; i++) + pPrev[i] = Vector3.Lerp(pPrev[i], pCurr[i], kill); } } - private void Update() + private void UpdateNodesFromLength() { - rope.stretchingScale = stretchScale; + int desired = ComputeDesiredNodes(currentLength); + if (desired == physicsNodes) return; + + while (physicsNodes < desired) + AddNodeAtStart(); + + while (physicsNodes > desired) + RemoveNodeAtStart(); + + RebuildRenderBufferIfNeeded(); + } + + private void AddNodeAtStart() + { + int newCount = Mathf.Min(physicsNodes + 1, maxPhysicsNodes); + if (newCount == physicsNodes) return; + + Vector3[] newCurr = new Vector3[newCount]; + Vector3[] newPrev = new Vector3[newCount]; + + newCurr[0] = pCurr[0]; + newPrev[0] = pPrev[0]; + + for (int i = 2; i < newCount; i++) + { + newCurr[i] = pCurr[i - 1]; + newPrev[i] = pPrev[i - 1]; + } + + Vector3 s = startAnchor.position; + Vector3 dir = Vector3.down; + + if (physicsNodes >= 2) + { + Vector3 toOld1 = (pCurr[1] - s); + if (toOld1.sqrMagnitude > 1e-6f) dir = toOld1.normalized; + } + + Vector3 pos = s + dir * physicsSegmentLen; + newCurr[1] = pos; + newPrev[1] = pos; + + pCurr = newCurr; + pPrev = newPrev; + physicsNodes = newCount; + + LockAnchorsHard(); + } + + private void RemoveNodeAtStart() + { + int newCount = Mathf.Max(physicsNodes - 1, 2); + if (newCount == physicsNodes) return; + + Vector3[] newCurr = new Vector3[newCount]; + Vector3[] newPrev = new Vector3[newCount]; + + newCurr[0] = pCurr[0]; + newPrev[0] = pPrev[0]; + + for (int i = 1; i < newCount - 1; i++) + { + newCurr[i] = pCurr[i + 1]; + newPrev[i] = pPrev[i + 1]; + } + + newCurr[newCount - 1] = pCurr[physicsNodes - 1]; + newPrev[newCount - 1] = pPrev[physicsNodes - 1]; + + pCurr = newCurr; + pPrev = newPrev; + physicsNodes = newCount; + + LockAnchorsHard(); + } + + private void UpdateHeadRestLenFromCurrentLength() + { + int fixedSegCount = Mathf.Max(0, physicsNodes - 2); + float baseLen = fixedSegCount * physicsSegmentLen; + + headRestLen = currentLength - baseLen; + + // 第一段允许在一个合理范围内变动(太长会像橡皮筋,太短会炸) + headRestLen = Mathf.Clamp(headRestLen, headMinLen, physicsSegmentLen * 1.5f); + } + + private void Simulate() + { + float dt = Time.fixedDeltaTime; + + for (int i = 0; i < physicsNodes; i++) + { + Vector3 v = (pCurr[i] - pPrev[i]) * velocityDampen; + pPrev[i] = pCurr[i]; + + pCurr[i] += v; + pCurr[i] += gravity * dt; + } + + LockAnchorsHard(); + } + + private void LockAnchorsHard() + { + if (!startAnchor || !endAnchor || pCurr == null || pPrev == null || physicsNodes < 2) return; + float dt = Time.fixedDeltaTime; + Vector3 s = startAnchor.position; + Vector3 e = endAnchor.position; + + pCurr[0] = s; + pPrev[0] = s - startAnchor.linearVelocity * dt; + + int last = physicsNodes - 1; + pCurr[last] = e; + pPrev[last] = e - endAnchor.linearVelocity * dt; + } + + private void SolveDistanceConstraints_HeadOnly() + { + for (int i = 0; i < physicsNodes - 1; i++) + { + float rest = (i == 0) ? headRestLen : physicsSegmentLen; + + Vector3 a = pCurr[i]; + Vector3 b = pCurr[i + 1]; + + Vector3 delta = b - a; + float dist = delta.magnitude; + if (dist < 1e-6f) continue; + + float diff = (dist - rest) / dist; + Vector3 corr = delta * diff * stiffness; + + if (i != 0) + pCurr[i] += corr * 0.5f; + + if (i + 1 != physicsNodes - 1) + pCurr[i + 1] -= corr * 0.5f; + } + } + + private void ConstrainToGroundAndWater() + { + for (int i = 1; i < physicsNodes - 1; i++) + { + Vector3 p = pCurr[i]; + + if (constrainToWater) + { + float minY = waterHeight + waterRadius; + if (p.y < minY) p.y = minY; + } + + if (constrainToGround) + { + Vector3 origin = p + Vector3.up * groundCastHeight; + if (Physics.Raycast(origin, Vector3.down, out RaycastHit hit, groundCastDistance, groundMask, + QueryTriggerInteraction.Ignore)) + { + float minY = hit.point.y + groundRadius; + if (p.y < minY) p.y = minY; + } + } + + pCurr[i] = p; + } + } + + private void DrawHighResLine() + { + if (pCurr == null || physicsNodes < 2) return; + + RebuildRenderBufferIfNeeded(); + + lr.startWidth = lineWidth; + lr.endWidth = lineWidth; + + if (!smooth) + { + lr.positionCount = physicsNodes; + lr.SetPositions(pCurr); + return; + } + + int idx = 0; + + for (int seg = 0; seg < physicsNodes - 1; seg++) + { + Vector3 p0 = pCurr[Mathf.Max(seg - 1, 0)]; + Vector3 p1 = pCurr[seg]; + Vector3 p2 = pCurr[seg + 1]; + Vector3 p3 = pCurr[Mathf.Min(seg + 2, physicsNodes - 1)]; + + for (int s = 0; s < renderSubdivisions; s++) + { + float t = s / (float)renderSubdivisions; + Vector3 pt = CatmullRom_XZ_LinearY(p0, p1, p2, p3, t); + + // 如果水面约束开启:渲染点也夹一下,避免视觉上又穿回去 + if (constrainToWater) + { + float minY = waterHeight + waterRadius; + if (pt.y < minY) pt.y = minY; + } + + rPoints[idx++] = pt; + } + } + + rPoints[idx++] = pCurr[physicsNodes - 1]; + + lr.positionCount = idx; + lr.SetPositions(rPoints); + } + + private void RebuildRenderBufferIfNeeded() + { + int targetCount = (physicsNodes - 1) * renderSubdivisions + 1; + if (rPoints == null || rCountCached != targetCount) + { + rPoints = new Vector3[targetCount]; + rCountCached = targetCount; + } + } + + private static Vector3 CatmullRom(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t) + { + float t2 = t * t; + float t3 = t2 * t; + + return 0.5f * ( + (2f * p1) + + (-p0 + p2) * t + + (2f * p0 - 5f * p1 + 4f * p2 - p3) * t2 + + (-p0 + 3f * p1 - 3f * p2 + p3) * t3 + ); + } + + private void OnDrawGizmosSelected() + { + if (pCurr == null) return; + Gizmos.color = Color.yellow; + for (int i = 0; i < pCurr.Length; i++) + Gizmos.DrawSphere(pCurr[i], 0.01f); + } + + private static Vector3 CatmullRom_XZ_LinearY(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t) + { + // XZ 做 Catmull-Rom + Vector3 cr = CatmullRom(p0, p1, p2, p3, t); + + // Y 不做样条,改成线性(不会过冲) + cr.y = Mathf.Lerp(p1.y, p2.y, t); + + return cr; } } \ No newline at end of file diff --git a/Assets/Scripts/Fishing/Tackle/FLine.cs b/Assets/Scripts/Fishing/Tackle/FLine.cs index b11400fad..4ac27c021 100644 --- a/Assets/Scripts/Fishing/Tackle/FLine.cs +++ b/Assets/Scripts/Fishing/Tackle/FLine.cs @@ -2,14 +2,14 @@ using System.Collections; using System.Collections.Generic; using System.Linq; -using Obi; +// using Obi; using UnityEngine; namespace NBF { public class FLine : FGearBase { - [SerializeField] private ObiParticleAttachment startParticleAttachment; + // [SerializeField] private ObiParticleAttachment startParticleAttachment; [SerializeField] private bool isLureConnect; [SerializeField] private RodLine rodLine; [SerializeField] private Rope fishingRope; @@ -31,7 +31,7 @@ namespace NBF protected override void OnInit() { var tipRb = Rod.Asset.LineConnectorRigidbody; - startParticleAttachment.target = tipRb.transform; + // startParticleAttachment.target = tipRb.transform; if (isLureConnect) { Lure.SetJoint(tipRb); @@ -39,6 +39,7 @@ namespace NBF } else { + fishingRope.startAnchor = tipRb; Bobber.SetJoint(tipRb); Lure.SetJoint(Bobber.rbody); Lure.gameObject.SetActive(true); @@ -78,15 +79,15 @@ namespace NBF public void EnableLineRenderers() { - foreach (ObiRopeExtrudedRenderer item in GetComponentsInChildren().ToList()) - { - item.enabled = true; - } + // foreach (ObiRopeExtrudedRenderer item in GetComponentsInChildren().ToList()) + // { + // item.enabled = true; + // } } public void SetObiRopeStretch(float value) { - fishingRope.LineLength_OnValueChanged(value); + fishingRope.SetTargetLength(value); } } } \ No newline at end of file diff --git a/Assets/Scripts/Fishing/Tackle/FLineHandler.cs b/Assets/Scripts/Fishing/Tackle/FLineHandler.cs index c479b69b6..0d36d77cc 100644 --- a/Assets/Scripts/Fishing/Tackle/FLineHandler.cs +++ b/Assets/Scripts/Fishing/Tackle/FLineHandler.cs @@ -1,194 +1,194 @@ -using NBF; -using Obi; -using UnityEngine; - -public class FLineHandler : MonoBehaviour -{ - public enum LineType - { - None = 0, - OneSegment = 1, - TwoSegment = 2, - ThereSegment = 3 - } - - public LineType lineType = LineType.TwoSegment; - - // public ObiParticleAttachment startParticleAttachment; - - public ObiRope obiRopeSegment_1; - - public ObiRope obiRopeSegment_2; - - public ObiRope obiRopeSegment_3; - - public FixedLine LineConnector_0; - - public SpringJoint LineConnector_1; - - public SpringJoint LineConnector_2; - - public SpringJoint LineConnector_3; - - // [HideInInspector] public FFishingLine currentRodFishingLineComponent; - - // public ObiParticleAttachment toRodConnector; - - // public float PhisicsLineOut { get; set; } - - public float ObiLineOut; - - [HideInInspector] public Rigidbody EndLineRigidbody_0; - - [HideInInspector] public Rigidbody EndLineRigidbody_1; - - [HideInInspector] public Rigidbody EndLineRigidbody_2; - - [HideInInspector] public Rigidbody EndLineRigidbody_3; - - // public JointPinchController pinchController; - - public FRod Rod; - - private Transform waterPlane; - - - public LineRenderer LineRenderer1; - public LineRenderer LineRenderer2; - - // public float ropeToHookDistance; - - void Start() - { - ObiLineOut = obiRopeSegment_1.stretchingScale; - if ((bool)LineConnector_0) - { - EndLineRigidbody_0 = LineConnector_0.GetComponent(); - } - - if ((bool)LineConnector_1) - { - EndLineRigidbody_1 = LineConnector_1.GetComponent(); - } - - if ((bool)LineConnector_2) - { - EndLineRigidbody_2 = LineConnector_2.GetComponent(); - // var fixedJoint = LineConnector_2.GetComponent(); - // pinchController = LineConnector_2.gameObject.AddComponent(); - } - - if ((bool)LineConnector_3) - { - EndLineRigidbody_3 = LineConnector_3.GetComponent(); - } - - waterPlane = GameObject.FindGameObjectWithTag("Water").transform; - - Debug.LogError($"rope.restLength={obiRopeSegment_1.restLength} LineConnector_1={LineConnector_1.maxDistance}"); - } - - - void Update() - { - if (!Rod) return; - - - // ropeToHookDistance = Vector3.Distance(toRodConnector.transform.position, LineConnector_1.transform.position); - - ObiLineOut = 0.1f + Rod.lineLength; - float target = (0f - Mathf.Clamp(Rod.linelenghtDiferent, -1f, 0f)) * 0.1f; - if (Rod.linelenghtDiferent >= 0f) - { - obiRopeSegment_1.stretchCompliance = Mathf.MoveTowards(obiRopeSegment_1.stretchCompliance, target, - Time.smoothDeltaTime * (1f * Rod.linelenghtDiferent)); - } - else - { - obiRopeSegment_1.stretchCompliance = Mathf.MoveTowards(obiRopeSegment_1.stretchCompliance, target, - Time.smoothDeltaTime * 0.1f); - } - - if (Rod.lineLength == 0f) - { - obiRopeSegment_1.stretchCompliance = 0f; - } - - if ((bool)obiRopeSegment_2) - { - if (!Rod.currentFish) - { - obiRopeSegment_2.stretchCompliance = obiRopeSegment_2.stretchingScale * 0.004f; - } - else - { - obiRopeSegment_2.stretchCompliance = 0f; - } - - //TODO:TEST - obiRopeSegment_2.stretchingScale = 0.13F; - } - - obiRopeSegment_1.stretchingScale = ObiLineOut; - obiRopeSegment_1.stretchingScale = 1; - LineConnector_1.maxDistance = 0.1f + Rod.lineLength; - if (Input.GetKey(KeyCode.E)) - { - // var speed = 1; - // obiRopeCursor_1.ChangeLength(LineConnector_1.maxDistance); - // Debug.Log(obiRopeSegment_1.restLength); - } - - // var addLength = LineConnector_1.maxDistance - obiRopeSegment_1.restLength; - // if (Mathf.Abs(addLength) > 0.001f) - // { - // obiRopeCursor_1.ChangeLength(LineConnector_1.maxDistance); - // } - - // if (!Mathf.Approximately(LineConnector_1.maxDistance, obiRopeSegment_1.restLength)) - // { - // obiRopeCursor_1.ChangeLength(LineConnector_1.maxDistance); - // } - - // obiRopeCursor_1.pos - - - // LineConnector_1.minDistance = LineConnector_1.maxDistance; - } - - - public void SetSegmentTwoLenght(float lenght) - { - LineConnector_2.maxDistance = lenght; - // obiRopeCursor_2.ChangeLength(lenght); - // LineConnector_2.minDistance = LineConnector_2.maxDistance; - } - - private void FixedUpdate() - { - // BindRod(); - LineWaterDisplacement(); - } - - private void BindRod() - { - if (!Rod || !Rod.Asset) return; - LineConnector_0.transform.position = Rod.Asset.lineConnector.position; - } - - private void LineWaterDisplacement() - { - if (!waterPlane) - { - return; - } - - for (int i = 0; i < obiRopeSegment_1.activeParticleCount; i++) - { - if (obiRopeSegment_1.GetParticlePosition(i).y < waterPlane.position.y) - { - // obiRopeSegment_1.AddForceParticle(i, Vector3.up * 10f, ForceMode.Acceleration); - } - } - } -} \ No newline at end of file +// using NBF; +// using Obi; +// using UnityEngine; +// +// public class FLineHandler : MonoBehaviour +// { +// public enum LineType +// { +// None = 0, +// OneSegment = 1, +// TwoSegment = 2, +// ThereSegment = 3 +// } +// +// public LineType lineType = LineType.TwoSegment; +// +// // public ObiParticleAttachment startParticleAttachment; +// +// public ObiRope obiRopeSegment_1; +// +// public ObiRope obiRopeSegment_2; +// +// public ObiRope obiRopeSegment_3; +// +// public FixedLine LineConnector_0; +// +// public SpringJoint LineConnector_1; +// +// public SpringJoint LineConnector_2; +// +// public SpringJoint LineConnector_3; +// +// // [HideInInspector] public FFishingLine currentRodFishingLineComponent; +// +// // public ObiParticleAttachment toRodConnector; +// +// // public float PhisicsLineOut { get; set; } +// +// public float ObiLineOut; +// +// [HideInInspector] public Rigidbody EndLineRigidbody_0; +// +// [HideInInspector] public Rigidbody EndLineRigidbody_1; +// +// [HideInInspector] public Rigidbody EndLineRigidbody_2; +// +// [HideInInspector] public Rigidbody EndLineRigidbody_3; +// +// // public JointPinchController pinchController; +// +// public FRod Rod; +// +// private Transform waterPlane; +// +// +// public LineRenderer LineRenderer1; +// public LineRenderer LineRenderer2; +// +// // public float ropeToHookDistance; +// +// void Start() +// { +// ObiLineOut = obiRopeSegment_1.stretchingScale; +// if ((bool)LineConnector_0) +// { +// EndLineRigidbody_0 = LineConnector_0.GetComponent(); +// } +// +// if ((bool)LineConnector_1) +// { +// EndLineRigidbody_1 = LineConnector_1.GetComponent(); +// } +// +// if ((bool)LineConnector_2) +// { +// EndLineRigidbody_2 = LineConnector_2.GetComponent(); +// // var fixedJoint = LineConnector_2.GetComponent(); +// // pinchController = LineConnector_2.gameObject.AddComponent(); +// } +// +// if ((bool)LineConnector_3) +// { +// EndLineRigidbody_3 = LineConnector_3.GetComponent(); +// } +// +// waterPlane = GameObject.FindGameObjectWithTag("Water").transform; +// +// Debug.LogError($"rope.restLength={obiRopeSegment_1.restLength} LineConnector_1={LineConnector_1.maxDistance}"); +// } +// +// +// void Update() +// { +// if (!Rod) return; +// +// +// // ropeToHookDistance = Vector3.Distance(toRodConnector.transform.position, LineConnector_1.transform.position); +// +// ObiLineOut = 0.1f + Rod.lineLength; +// float target = (0f - Mathf.Clamp(Rod.linelenghtDiferent, -1f, 0f)) * 0.1f; +// if (Rod.linelenghtDiferent >= 0f) +// { +// obiRopeSegment_1.stretchCompliance = Mathf.MoveTowards(obiRopeSegment_1.stretchCompliance, target, +// Time.smoothDeltaTime * (1f * Rod.linelenghtDiferent)); +// } +// else +// { +// obiRopeSegment_1.stretchCompliance = Mathf.MoveTowards(obiRopeSegment_1.stretchCompliance, target, +// Time.smoothDeltaTime * 0.1f); +// } +// +// if (Rod.lineLength == 0f) +// { +// obiRopeSegment_1.stretchCompliance = 0f; +// } +// +// if ((bool)obiRopeSegment_2) +// { +// if (!Rod.currentFish) +// { +// obiRopeSegment_2.stretchCompliance = obiRopeSegment_2.stretchingScale * 0.004f; +// } +// else +// { +// obiRopeSegment_2.stretchCompliance = 0f; +// } +// +// //TODO:TEST +// obiRopeSegment_2.stretchingScale = 0.13F; +// } +// +// obiRopeSegment_1.stretchingScale = ObiLineOut; +// obiRopeSegment_1.stretchingScale = 1; +// LineConnector_1.maxDistance = 0.1f + Rod.lineLength; +// if (Input.GetKey(KeyCode.E)) +// { +// // var speed = 1; +// // obiRopeCursor_1.ChangeLength(LineConnector_1.maxDistance); +// // Debug.Log(obiRopeSegment_1.restLength); +// } +// +// // var addLength = LineConnector_1.maxDistance - obiRopeSegment_1.restLength; +// // if (Mathf.Abs(addLength) > 0.001f) +// // { +// // obiRopeCursor_1.ChangeLength(LineConnector_1.maxDistance); +// // } +// +// // if (!Mathf.Approximately(LineConnector_1.maxDistance, obiRopeSegment_1.restLength)) +// // { +// // obiRopeCursor_1.ChangeLength(LineConnector_1.maxDistance); +// // } +// +// // obiRopeCursor_1.pos +// +// +// // LineConnector_1.minDistance = LineConnector_1.maxDistance; +// } +// +// +// public void SetSegmentTwoLenght(float lenght) +// { +// LineConnector_2.maxDistance = lenght; +// // obiRopeCursor_2.ChangeLength(lenght); +// // LineConnector_2.minDistance = LineConnector_2.maxDistance; +// } +// +// private void FixedUpdate() +// { +// // BindRod(); +// LineWaterDisplacement(); +// } +// +// private void BindRod() +// { +// if (!Rod || !Rod.Asset) return; +// LineConnector_0.transform.position = Rod.Asset.lineConnector.position; +// } +// +// private void LineWaterDisplacement() +// { +// if (!waterPlane) +// { +// return; +// } +// +// for (int i = 0; i < obiRopeSegment_1.activeParticleCount; i++) +// { +// if (obiRopeSegment_1.GetParticlePosition(i).y < waterPlane.position.y) +// { +// // obiRopeSegment_1.AddForceParticle(i, Vector3.up * 10f, ForceMode.Acceleration); +// } +// } +// } +// } \ No newline at end of file diff --git a/Assets/Scripts/Fishing/Tackle/FRod.cs b/Assets/Scripts/Fishing/Tackle/FRod.cs index cf76283ca..072cddf67 100644 --- a/Assets/Scripts/Fishing/Tackle/FRod.cs +++ b/Assets/Scripts/Fishing/Tackle/FRod.cs @@ -4,7 +4,6 @@ using System.Collections.Generic; using Fantasy; using NBC.Asset; using NBF.Utils; -using Obi; using UnityEngine; using Object = UnityEngine.Object; @@ -295,7 +294,9 @@ namespace NBF Line.transform.position = Asset.lineConnector.position; Line.Init(this.Player, this); - var obiSolver = solver.GetComponent(); + // var obiSolver = solver.GetComponent(); + // obiSolver.parameters.ambientWind = Vector3.zero; + // obiSolver.wind. // obiSolver.simulateWhenInvisible } } diff --git a/Assets/Scripts/PhysicsTools.meta b/Assets/Scripts/PhysicsTools.meta deleted file mode 100644 index 91a820e83..000000000 --- a/Assets/Scripts/PhysicsTools.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 47fc822e51a6b074bb4b6bd67e69a457 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/PhysicsTools/Bezier.cs b/Assets/Scripts/PhysicsTools/Bezier.cs deleted file mode 100644 index 24f8b16da..000000000 --- a/Assets/Scripts/PhysicsTools/Bezier.cs +++ /dev/null @@ -1,176 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace PhysicsTools -{ - public class Bezier - { - private Vector3[] knots; - - private Vector3[] firstControlPts; - - private Vector3[] secondControlPts; - - private int lastIndex = 1; - - private float lengthCovered; - - private float indexedLength; - - private float totalLength; - - public Bezier(List points) - { - Vector3[] array = new Vector3[points.Count]; - for (int i = 0; i < points.Count; i++) - { - array[i] = points[i].pos; - } - init(array); - } - - public Bezier(Vector3[] points) - { - init(points); - } - - private void init(Vector3[] points) - { - knots = new Vector3[points.Length]; - for (int i = 0; i < points.Length; i++) - { - knots[i] = points[i]; - if (i != 0) - { - totalLength += (knots[i] - knots[i - 1]).magnitude; - } - } - GetCurveControlPoints(knots, out firstControlPts, out secondControlPts); - indexedLength = (knots[1] - knots[0]).magnitude; - } - - public float TotalLength() - { - return totalLength; - } - - public PosOri getNext(float deltaLen) - { - return new PosOri(getNextPos(deltaLen), Quaternion.identity); - } - - public Vector3 getNextPos(float deltaLen) - { - bool flag = false; - float num = indexedLength; - float num2 = indexedLength; - while (!flag) - { - num = indexedLength; - num2 = indexedLength - (knots[lastIndex] - knots[lastIndex - 1]).magnitude; - if (lengthCovered + deltaLen > num) - { - lastIndex++; - if (lastIndex == knots.Length) - { - flag = true; - deltaLen = num - lengthCovered; - lastIndex = knots.Length - 1; - } - else - { - indexedLength += (knots[lastIndex] - knots[lastIndex - 1]).magnitude; - } - continue; - } - break; - } - float num3 = (lengthCovered + deltaLen - num2) / (num - num2); - Vector3 result = (float)Math.Pow(1f - num3, 3.0) * knots[lastIndex - 1] + 3f * (float)Math.Pow(1f - num3, 2.0) * num3 * firstControlPts[lastIndex - 1] + 3f * (1f - num3) * num3 * num3 * secondControlPts[lastIndex - 1] + num3 * num3 * num3 * knots[lastIndex]; - lengthCovered += deltaLen; - return result; - } - - private void GetCurveControlPoints(Vector3[] knots, out Vector3[] firstControlPoints, out Vector3[] secondControlPoints) - { - if (knots == null) - { - throw new ArgumentNullException("knots"); - } - int num = knots.Length - 1; - if (num < 1) - { - throw new ArgumentException("At least two knot points required", "knots"); - } - if (num == 1) - { - firstControlPoints = new Vector3[1]; - firstControlPoints[0].x = (2f * knots[0].x + knots[1].x) / 3f; - firstControlPoints[0].y = (2f * knots[0].y + knots[1].y) / 3f; - firstControlPoints[0].z = (2f * knots[0].z + knots[1].z) / 3f; - secondControlPoints = new Vector3[1]; - secondControlPoints[0].x = 2f * firstControlPoints[0].x - knots[0].x; - secondControlPoints[0].y = 2f * firstControlPoints[0].y - knots[0].y; - secondControlPoints[0].z = 2f * firstControlPoints[0].z - knots[0].z; - return; - } - float[] array = new float[num]; - for (int i = 1; i < num - 1; i++) - { - array[i] = 4f * knots[i].x + 2f * knots[i + 1].x; - } - array[0] = knots[0].x + 2f * knots[1].x; - array[num - 1] = (8f * knots[num - 1].x + knots[num].x) / 2f; - float[] firstControlPoints2 = GetFirstControlPoints(array); - for (int j = 1; j < num - 1; j++) - { - array[j] = 4f * knots[j].y + 2f * knots[j + 1].y; - } - array[0] = knots[0].y + 2f * knots[1].y; - array[num - 1] = (8f * knots[num - 1].y + knots[num].y) / 2f; - float[] firstControlPoints3 = GetFirstControlPoints(array); - for (int k = 1; k < num - 1; k++) - { - array[k] = 4f * knots[k].z + 2f * knots[k + 1].z; - } - array[0] = knots[0].z + 2f * knots[1].z; - array[num - 1] = (8f * knots[num - 1].z + knots[num].z) / 2f; - float[] firstControlPoints4 = GetFirstControlPoints(array); - firstControlPoints = new Vector3[num]; - secondControlPoints = new Vector3[num]; - for (int l = 0; l < num; l++) - { - firstControlPoints[l] = new Vector3(firstControlPoints2[l], firstControlPoints3[l], firstControlPoints4[l]); - if (l < num - 1) - { - secondControlPoints[l] = new Vector3(2f * knots[l + 1].x - firstControlPoints2[l + 1], 2f * knots[l + 1].y - firstControlPoints3[l + 1], 2f * knots[l + 1].z - firstControlPoints4[l + 1]); - } - else - { - secondControlPoints[l] = new Vector3((knots[num].x + firstControlPoints2[num - 1]) / 2f, (knots[num].y + firstControlPoints3[num - 1]) / 2f, (knots[num].z + firstControlPoints4[num - 1]) / 2f); - } - } - } - - private float[] GetFirstControlPoints(float[] rhs) - { - int num = rhs.Length; - float[] array = new float[num]; - float[] array2 = new float[num]; - float num2 = 2f; - array[0] = rhs[0] / num2; - for (int i = 1; i < num; i++) - { - array2[i] = 1f / num2; - num2 = ((i >= num - 1) ? 3.5f : 4f) - array2[i]; - array[i] = (rhs[i] - array[i - 1]) / num2; - } - for (int j = 1; j < num; j++) - { - array[num - j - 1] -= array2[num - j] * array[num - j]; - } - return array; - } - } -} diff --git a/Assets/Scripts/PhysicsTools/Bezier.cs.meta b/Assets/Scripts/PhysicsTools/Bezier.cs.meta deleted file mode 100644 index f2043f5bd..000000000 --- a/Assets/Scripts/PhysicsTools/Bezier.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9c65206b6e7283d4396bb4c47f4ddf88 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/PhysicsTools/BoneSegment.cs b/Assets/Scripts/PhysicsTools/BoneSegment.cs deleted file mode 100644 index 9ead86ac7..000000000 --- a/Assets/Scripts/PhysicsTools/BoneSegment.cs +++ /dev/null @@ -1,18 +0,0 @@ -using UnityEngine; - -namespace PhysicsTools -{ - internal class BoneSegment : Segment - { - public GameObject bone; - - public Matrix4x4 initTransform; - - public BoneSegment(string name, float len, Vector3 pos, Quaternion q, SegmentPropertiesBase segProperties, Rope r, GameObject b) - : base(name, len, pos, q, segProperties, r) - { - bone = b; - initTransform = seg.transform.worldToLocalMatrix * bone.transform.localToWorldMatrix; - } - } -} diff --git a/Assets/Scripts/PhysicsTools/BoneSegment.cs.meta b/Assets/Scripts/PhysicsTools/BoneSegment.cs.meta deleted file mode 100644 index 760ca6d72..000000000 --- a/Assets/Scripts/PhysicsTools/BoneSegment.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 265d31d4ce3243c4cadb3a8ba8c80dae -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/PhysicsTools/ControlPoint.cs b/Assets/Scripts/PhysicsTools/ControlPoint.cs deleted file mode 100644 index acfdc67ab..000000000 --- a/Assets/Scripts/PhysicsTools/ControlPoint.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using UnityEngine; - -namespace PhysicsTools -{ - [Serializable] - public class ControlPoint - { - [Tooltip("Optional: Object")] - public GameObject obj; - - [Tooltip("Position through which rope will pass... If Object is specified then it is the local to the object otherwise it is global position")] - public Vector3 localPos; - - [Range(1f, 5f)] - [Tooltip("SlackFraction: How much of the rope length should be created between two control points... If it is more than 1 then a catenary is formed between the control points")] - public float slackFraction; - - [Tooltip("Specify whether it is attached to the control point or not")] - public bool attached; - - public ControlPoint() - { - obj = null; - slackFraction = 1f; - attached = true; - } - - public override string ToString() - { - return ((!(obj != null)) ? "Object: null" : ("Object:" + obj.ToString())) + ", Position: " + localPos.ToString() + ", SlackFraction: " + slackFraction + ", Attached: " + attached; - } - - public bool compare(ControlPoint rhs) - { - if (obj != rhs.obj || localPos != rhs.localPos || slackFraction != rhs.slackFraction || attached != rhs.attached) - { - return false; - } - return true; - } - - public ControlPoint clone() - { - ControlPoint controlPoint = new ControlPoint(); - controlPoint.obj = obj; - controlPoint.localPos = localPos; - controlPoint.slackFraction = slackFraction; - controlPoint.attached = attached; - return controlPoint; - } - - public Vector3 globalPos(Rope rope) - { - if (obj != null) - { - return obj.transform.TransformPoint(localPos); - } - return rope.transform.TransformPoint(localPos); - } - } -} diff --git a/Assets/Scripts/PhysicsTools/ControlPoint.cs.meta b/Assets/Scripts/PhysicsTools/ControlPoint.cs.meta deleted file mode 100644 index bfbc2046e..000000000 --- a/Assets/Scripts/PhysicsTools/ControlPoint.cs.meta +++ /dev/null @@ -1,14 +0,0 @@ -fileFormatVersion: 2 -guid: 4c3919bd67247ecf47ac8b5970b70372 -timeCreated: 1771646562 -licenseType: Free -MonoImporter: - serializedVersion: 2 - name: - externalObjects: {} - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/PhysicsTools/Joint.cs b/Assets/Scripts/PhysicsTools/Joint.cs deleted file mode 100644 index 3a1d70e71..000000000 --- a/Assets/Scripts/PhysicsTools/Joint.cs +++ /dev/null @@ -1,142 +0,0 @@ -using UnityEngine; - -namespace PhysicsTools -{ - public class Joint - { - public UnityEngine.Joint joint; - - public Joint(Segment seg1, Segment seg2, JointProperties prop, SegmentPropertiesBase segProperties, Quaternion twistOffset) - { - if (seg2 == null) - { - } - seg2.seg.transform.rotation = seg2.seg.transform.rotation * twistOffset; - switch (prop.type) - { - case JointProperties.Type.HINGE_JOINT: - { - HingeJoint hingeJoint = seg1.seg.AddComponent(); - hingeJoint.autoConfigureConnectedAnchor = false; - joint = hingeJoint; - JointLimits limits = new JointLimits - { - min = 0f - prop.swingLimitDeg, - max = prop.swingLimitDeg - }; - joint.axis = new Vector3(0f, 0f, 1f); - hingeJoint.limits = limits; - break; - } - case JointProperties.Type.CONFIGURABLE_JOINT: - { - ConfigurableJoint configurableJoint = seg1.seg.AddComponent(); - configurableJoint.enableCollision = false; - configurableJoint.xMotion = ConfigurableJointMotion.Locked; - configurableJoint.yMotion = ConfigurableJointMotion.Locked; - configurableJoint.zMotion = ConfigurableJointMotion.Locked; - configurableJoint.angularXMotion = ConfigurableJointMotion.Limited; - configurableJoint.angularYMotion = ConfigurableJointMotion.Limited; - configurableJoint.angularZMotion = ConfigurableJointMotion.Limited; - configurableJoint.autoConfigureConnectedAnchor = false; - configurableJoint.lowAngularXLimit = new SoftJointLimit - { - limit = 0f - prop.twistLimitDeg - }; - configurableJoint.highAngularXLimit = new SoftJointLimit - { - limit = prop.twistLimitDeg - }; - configurableJoint.projectionMode = JointProjectionMode.PositionAndRotation; - configurableJoint.projectionDistance = prop.projectionDistance; - SoftJointLimit softJointLimit = new SoftJointLimit - { - limit = prop.swingLimitDeg - }; - configurableJoint.angularYLimit = softJointLimit; - configurableJoint.angularZLimit = softJointLimit; - joint = configurableJoint; - joint.axis = new Vector3(0f, 1f, 0f); - if (prop.breakingForce != 0f) - { - configurableJoint.breakForce = prop.breakingForce; - } - configurableJoint.enablePreprocessing = false; - break; - } - } - if (segProperties is SegmentPropertiesCylinder) - { - joint.anchor = new Vector3(0f, 1f - prop.offsetScale, 0f); - joint.connectedAnchor = new Vector3(0f, -1f + prop.offsetScale, 0f); - } - else - { - joint.anchor = new Vector3(0f, (1f - prop.offsetScale) / 2f, 0f); - joint.connectedAnchor = new Vector3(0f, (-1f + prop.offsetScale) / 2f, 0f); - } - joint.connectedBody = seg2.seg.GetComponent(); - } - - public Joint(GameObject seg1, GameObject seg2, Vector3 vGlobalAnchor, Vector3 vGlobalAxis, JointProperties prop, Rope r, int jtPos) - { - ConfigurableJoint configurableJoint = seg1.AddComponent(); - configurableJoint.enableCollision = false; - configurableJoint.xMotion = ConfigurableJointMotion.Limited; - configurableJoint.yMotion = ConfigurableJointMotion.Limited; - configurableJoint.zMotion = ConfigurableJointMotion.Limited; - configurableJoint.angularXMotion = ConfigurableJointMotion.Limited; - configurableJoint.angularYMotion = ConfigurableJointMotion.Free; - configurableJoint.angularZMotion = ConfigurableJointMotion.Free; - configurableJoint.anchor = seg1.transform.InverseTransformPoint(vGlobalAnchor); - configurableJoint.axis = seg1.transform.InverseTransformDirection(vGlobalAxis); - if (seg2 != null) - { - configurableJoint.connectedBody = seg2.GetComponent(); - } - SoftJointLimit linearLimit = new SoftJointLimit - { - limit = 0.01f - }; - SoftJointLimitSpring linearLimitSpring = default(SoftJointLimitSpring); - switch (jtPos) - { - case 0: - linearLimitSpring = r.getStartJtSpring(); - break; - case 1: - linearLimitSpring = r.getEndJtSpring(); - break; - default: - { - float damper = (linearLimitSpring.spring = 0f); - linearLimitSpring.damper = damper; - break; - } - } - if (linearLimitSpring.spring == 0f) - { - linearLimit.limit = 0f; - } - configurableJoint.linearLimitSpring = linearLimitSpring; - configurableJoint.linearLimit = linearLimit; - configurableJoint.projectionMode = JointProjectionMode.PositionAndRotation; - configurableJoint.projectionDistance = prop.projectionDistanceFirst; - configurableJoint.lowAngularXLimit = new SoftJointLimit - { - limit = 0f - prop.twistLimitDeg - }; - configurableJoint.highAngularXLimit = new SoftJointLimit - { - limit = prop.twistLimitDeg - }; - if (prop.breakingForce != 0f) - { - configurableJoint.breakForce = prop.breakingForce; - } - joint = configurableJoint; - configurableJoint.autoConfigureConnectedAnchor = false; - configurableJoint.enablePreprocessing = false; - } - } -} diff --git a/Assets/Scripts/PhysicsTools/Joint.cs.meta b/Assets/Scripts/PhysicsTools/Joint.cs.meta deleted file mode 100644 index 64eeed7ec..000000000 --- a/Assets/Scripts/PhysicsTools/Joint.cs.meta +++ /dev/null @@ -1,14 +0,0 @@ -fileFormatVersion: 2 -guid: 3e680fa725d3066a2472a42dc6f1ba88 -timeCreated: 1771646562 -licenseType: Free -MonoImporter: - serializedVersion: 2 - name: - externalObjects: {} - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/PhysicsTools/JointProperties.cs b/Assets/Scripts/PhysicsTools/JointProperties.cs deleted file mode 100644 index 4d7e2124b..000000000 --- a/Assets/Scripts/PhysicsTools/JointProperties.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using UnityEngine; - -namespace PhysicsTools -{ - [Serializable] - public class JointProperties - { - [Serializable] - public enum Type - { - CONFIGURABLE_JOINT = 0, - HINGE_JOINT = 1 - } - - public Type type; - - [Range(0f, 180f)] - public float twistLimitDeg; - - [Range(0f, 180f)] - public float swingLimitDeg; - - [Range(0f, 0.5f)] - public float offsetScale; - - [Range(0f, 90f)] - public float twistOffsetDeg; - - public float breakingForce; - - public float projectionDistance; - - public float projectionDistanceFirst; - - public JointProperties() - { - type = Type.CONFIGURABLE_JOINT; - twistLimitDeg = 10f; - swingLimitDeg = 50f; - offsetScale = 0f; - twistOffsetDeg = 0f; - breakingForce = 0f; - projectionDistance = 0.1f; - projectionDistanceFirst = 0.001f; - } - } -} diff --git a/Assets/Scripts/PhysicsTools/JointProperties.cs.meta b/Assets/Scripts/PhysicsTools/JointProperties.cs.meta deleted file mode 100644 index 849038ca7..000000000 --- a/Assets/Scripts/PhysicsTools/JointProperties.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a0a2d569b86ab9e4f96ae4345b0340de -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/PhysicsTools/LinkMesh.cs b/Assets/Scripts/PhysicsTools/LinkMesh.cs deleted file mode 100644 index dab64351a..000000000 --- a/Assets/Scripts/PhysicsTools/LinkMesh.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System; -using UnityEngine; - -namespace PhysicsTools -{ - [Serializable] - public class LinkMesh - { - [HideInInspector] - public Mesh modifiedMesh; - - [HideInInspector] - public Matrix4x4 transform; - - [HideInInspector] - public Mesh defaultMesh; - - [HideInInspector] - public Material defaultMeshMaterial; - - [HideInInspector] - public Matrix4x4 defaultTransform; - - public Mesh mesh; - - public Material meshMaterial; - - public Vector3 position; - - public Vector3 rotation; - - public Vector3 scale; - - public LinkMesh() - { - mesh = null; - position = new Vector3(0f, 0f, 0f); - rotation = new Vector3(0f, 0f, 0f); - scale = new Vector3(1f, 1f, 1f); - defaultTransform = default(Matrix4x4); - defaultTransform.SetTRS(position, Quaternion.Euler(rotation), scale); - transform = default(Matrix4x4); - transform.SetTRS(position, Quaternion.Euler(rotation), scale); - } - - public void update() - { - if (mesh == null) - { - mesh = defaultMesh; - transform = defaultTransform; - Quaternion rot; - Utility.MatrixToTRS(transform, out position, out rot, out scale); - rotation = rot.eulerAngles; - } - if (mesh != null) - { - modifiedMesh = UnityEngine.Object.Instantiate(mesh); - } - if (modifiedMesh != null) - { - transform.SetTRS(position, Quaternion.Euler(rotation), scale); - ScaleMesh(); - } - } - - public void ScaleMesh() - { - Vector3[] vertices = modifiedMesh.vertices; - for (int i = 0; i < vertices.Length; i++) - { - Vector3 point = vertices[i]; - point = transform.MultiplyPoint(point); - vertices[i] = point; - } - modifiedMesh.vertices = vertices; - } - - public Mesh getMesh() - { - return modifiedMesh; - } - - public Material getMaterial() - { - return null; - } - } -} diff --git a/Assets/Scripts/PhysicsTools/LinkMesh.cs.meta b/Assets/Scripts/PhysicsTools/LinkMesh.cs.meta deleted file mode 100644 index 914d43d24..000000000 --- a/Assets/Scripts/PhysicsTools/LinkMesh.cs.meta +++ /dev/null @@ -1,14 +0,0 @@ -fileFormatVersion: 2 -guid: 88218b6dac3a1d87d3867523046c804d -timeCreated: 1771646562 -licenseType: Free -MonoImporter: - serializedVersion: 2 - name: - externalObjects: {} - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/PhysicsTools/PosOri.cs b/Assets/Scripts/PhysicsTools/PosOri.cs deleted file mode 100644 index 76c910095..000000000 --- a/Assets/Scripts/PhysicsTools/PosOri.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using UnityEngine; - -namespace PhysicsTools -{ - [Serializable] - public class PosOri - { - public Vector3 pos; - - public Quaternion rot; - - public PosOri(Vector3 p, Quaternion q) - { - pos = p; - rot = q; - } - } -} diff --git a/Assets/Scripts/PhysicsTools/PosOri.cs.meta b/Assets/Scripts/PhysicsTools/PosOri.cs.meta deleted file mode 100644 index 958aa1ffe..000000000 --- a/Assets/Scripts/PhysicsTools/PosOri.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0da6209e0750de846b70cb074a64d5bc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/PhysicsTools/Rope.cs b/Assets/Scripts/PhysicsTools/Rope.cs deleted file mode 100644 index c74bb87f2..000000000 --- a/Assets/Scripts/PhysicsTools/Rope.cs +++ /dev/null @@ -1,1530 +0,0 @@ -using System; -using System.Collections.Generic; -using NBF; -// using UltimateWater; -using UnityEngine; -using UnityEngine.Rendering; - -namespace PhysicsTools -{ - [RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))] - public class Rope : MonoBehaviour - { - public enum RopeGameplayType - { - NORMAL = 0, - ICE = 1, - FLOAT = 2 - } - - [Serializable] - public enum LOGGING - { - NONE = 0, - INFO = 1, - DEBUG = 2 - } - - [Serializable] - public enum RopeType - { - Procedural = 0, - FromBones = 1 - } - - [Serializable] - public enum RendererType - { - None = 0, - Continuous = 1, - Segment = 2 - } - - public delegate void BrokenHandler(object sender); - - public delegate void CreateHandler(object sender); - - public delegate void DeleteHandler(object sender); - - public RopeGameplayType ropeGameplayType; - - private List prevControlPoints = new List(); - - private bool prevKinematic = true; - - private bool prevHideChildren = true; - - private RendererType prevRendererType = RendererType.Continuous; - - public bool startJointSpringy; - - public SerializedSoftJointLimitSpring startJtSpring; - - public bool endJointSpringy; - - public SerializedSoftJointLimitSpring endJtSpring; - - private string prevStrStaticBones; - - public string strStaticBones; - - private HashSet staticBones = new HashSet(); - - public PhysicsMaterial ropeMaterial; - - private GameObject springHolder; - - private Joint springJoint; - - [HideInInspector] public List lstComponentsCreated = new List(); - - public bool HideChildren = true; - - public LOGGING loggingType = LOGGING.INFO; - - public RopeType ropeType; - - public int numControlPoints = 2; - - public List controlPoints = new List(); - - public Transform startPosition; - - public float rate; - - [Range(0f, 10f)] public float gravity = 1f; - - public bool kinematic = true; - - private GameObject prevFirstBone; - - private GameObject prevLastBone; - - public GameObject firstBone; - - public GameObject lastBone; - - public bool sendRopeEvents; - - public RendererType rendererType = RendererType.Continuous; - - public LinkMesh linkMesh = new LinkMesh(); - - public Material continuousMaterial; - - public MeshRenderer meshRenderer; - - public MeshFilter meshFilter; - - public bool useColliders = true; - - public float radiusFactor = 1f; - - public float segmentBordersScaleFactor = 1f; - - public bool useSegmentBordersOffset; - - public SegmentProperties.Type segPropertyType; - - public SegmentPropertiesBox segPropertiesBox = new SegmentPropertiesBox(); - - public SegmentPropertiesCylinder segPropertiesCylinder = new SegmentPropertiesCylinder(); - - public JointProperties jointProp = new JointProperties(); - - private int initialNumSegemnts; - - public List lstSegments = new List(); - - private Mesh mesh; - - private Vector3[] vertexBuffer; - - private Vector2[] uv; - - private int[] indexBuffer; - - private Vector4[] tangents; - - public float totalLengthGet; - - public float tensionGet; - - public float totalLength; - - public float totalLengthColliders; - - public float ropeStretchThreshold = -1f; - - public float textureLength = 0.33f; - - private int numCirclePt = 3; - - public event BrokenHandler Broken; - - public event CreateHandler Created; - - public event DeleteHandler Deleted; - - public void setStartJointSpring(SoftJointLimitSpring sp) - { - startJtSpring = (SerializedSoftJointLimitSpring)sp; - if (springJoint != null) - { - ConfigurableJoint configurableJoint = (ConfigurableJoint)springJoint.joint; - if (configurableJoint != null) - { - configurableJoint.linearLimitSpring = getStartJtSpring(); - configurableJoint.linearLimit = new SoftJointLimit - { - limit = 0.01f - }; - } - } - } - - public void setEndJointSpring(SoftJointLimitSpring sp) - { - endJtSpring = (SerializedSoftJointLimitSpring)sp; - if (lstSegments.Count != 0) - { - ConfigurableJoint configurableJoint = ((lstSegments[lstSegments.Count - 1].next == null) - ? null - : ((ConfigurableJoint)lstSegments[lstSegments.Count - 1].next.joint)); - if (configurableJoint != null) - { - configurableJoint.linearLimitSpring = getEndJtSpring(); - configurableJoint.linearLimit = new SoftJointLimit - { - limit = 0.01f - }; - } - } - } - - public SegmentPropertiesBase getSegmentProperties() - { - switch (segPropertyType) - { - case SegmentProperties.Type.BOX: - return segPropertiesBox; - case SegmentProperties.Type.CYLINDER: - return segPropertiesCylinder; - default: - return segPropertiesCylinder; - } - } - - public void setPhysicsMaterial(PhysicsMaterial mat) - { - foreach (Segment lstSegment in lstSegments) - { - lstSegment.capsuleCollider.sharedMaterial = mat; - } - } - - private void Debug(string msg, LOGGING type) - { - if (type <= loggingType) - { - UnityEngine.Debug.Log(msg, this); - } - } - - private void OnJointBreak(float breakForce) - { - if (sendRopeEvents && this.Broken != null) - { - this.Broken(this); - } - } - - public void setContinuousMaterialMapping(float f) - { - textureLength = f; - } - - public void setFirstBone(GameObject bone) - { - firstBone = bone; - } - - public void setLastBone(GameObject bone) - { - lastBone = bone; - } - - public List getSegments() - { - return lstSegments; - } - - public void setStaticBoneList(string str) - { - staticBones.Clear(); - str.Trim(); - if (str != string.Empty) - { - string[] array = str.Split(','); - string[] array2 = array; - foreach (string text in array2) - { - string[] array3 = text.Split('-'); - if (array3.Length == 1) - { - staticBones.Add(int.Parse(array3[0])); - } - else if (array3.Length == 2) - { - int num = int.Parse(array3[0]); - int num2 = int.Parse(array3[1]); - for (int j = num; j <= num2; j++) - { - staticBones.Add(j); - } - } - } - } - - strStaticBones = str; - prevStrStaticBones = str; - } - - public bool setControlPoints(List lstControlPoints) - { - if (numControlPoints < 2 && ropeType == RopeType.Procedural) - { - throw new ArgumentException("Control points should be more than 1"); - } - - bool flag = false; - if (numControlPoints != lstControlPoints.Count) - { - while (lstControlPoints.Count < numControlPoints) - { - lstControlPoints.Add(new ControlPoint()); - } - - while (lstControlPoints.Count > numControlPoints) - { - lstControlPoints.RemoveAt(lstControlPoints.Count - 1); - } - - flag = true; - } - - for (int i = 0; i < lstControlPoints.Count; i++) - { - if (i < prevControlPoints.Count && !lstControlPoints[i].compare(prevControlPoints[i])) - { - flag = true; - break; - } - } - - prevControlPoints.Clear(); - for (int j = 0; j < lstControlPoints.Count; j++) - { - prevControlPoints.Add(lstControlPoints[j].clone()); - } - - if (flag) - { - controlPoints.Clear(); - for (int k = 0; k < prevControlPoints.Count; k++) - { - controlPoints.Add(prevControlPoints[k].clone()); - } - } - - numControlPoints = lstControlPoints.Count; - return flag; - } - - public SoftJointLimitSpring getStartJtSpring() - { - SoftJointLimitSpring result = default(SoftJointLimitSpring); - if (startJointSpringy) - { - result.spring = startJtSpring.spring; - result.damper = startJtSpring.damper; - } - else - { - float spring = (result.damper = 0f); - result.spring = spring; - } - - return result; - } - - public SoftJointLimitSpring getEndJtSpring() - { - SoftJointLimitSpring result = default(SoftJointLimitSpring); - if (endJointSpringy) - { - result.spring = endJtSpring.spring; - result.damper = endJtSpring.damper; - } - else - { - float spring = (result.damper = 0f); - result.spring = spring; - } - - return result; - } - - public void RefreshJointSpring() - { - setStartJointSpring(startJtSpring); - setEndJointSpring(endJtSpring); - } - - public void RefreshProperties(bool bForce) - { - Debug("Refreshing Properties Force = " + bForce, LOGGING.INFO); - bool flag = bForce; - if (numControlPoints < 2) - { - numControlPoints = 2; - } - - bool flag2 = setControlPoints(controlPoints); - flag = flag || flag2; - if (prevStrStaticBones != strStaticBones) - { - setStaticBoneList(strStaticBones); - flag = true; - } - - if (flag) - { - regenerateRope(true); - } - - if (prevHideChildren != HideChildren) - { - HideChildrenObjects(HideChildren); - } - - if (prevKinematic != kinematic) - { - changeToKinematic(kinematic); - } - - if (prevRendererType != rendererType) - { - setRendererType(rendererType); - } - - linkMesh.update(); - setLinkMesh(linkMesh); - if (rendererType == RendererType.Continuous) - { - generateOverallMesh(); - } - - Debug("Refreshing Properties Done", LOGGING.INFO); - } - - public void setBreakingForce(float force) - { - Debug("Setting breaking force to " + force, LOGGING.INFO); - foreach (Segment lstSegment in lstSegments) - { - if (lstSegment.next != null) - { - if (force != 0f) - { - lstSegment.next.joint.breakForce = force; - } - else - { - lstSegment.next.joint.breakForce = 1E+10f; - } - } - } - - jointProp.breakingForce = force; - Debug("Setting breaking force done", LOGGING.INFO); - } - - public void setRendererType(RendererType rType) - { - Debug("Setting Renderer Type to " + rType, LOGGING.INFO); - switch (rType) - { - case RendererType.Continuous: - enableRendering(true); - enableSegmentRendering(false); - break; - case RendererType.Segment: - enableRendering(false); - enableSegmentRendering(true); - break; - case RendererType.None: - enableRendering(false); - enableSegmentRendering(false); - break; - } - - rendererType = rType; - prevRendererType = rType; - } - - public void setLinkMesh(LinkMesh lMesh) - { - if (lMesh != null && lMesh.getMesh() != null) - { - foreach (Segment lstSegment in lstSegments) - { - lstSegment.meshFilter.sharedMesh = lMesh.getMesh(); - lstSegment.meshRenderer.sharedMaterial = lMesh.meshMaterial; - } - } - - linkMesh = lMesh; - } - - public void applyGravity(float f) - { - if (f == -1f) - { - return; - } - - foreach (Segment lstSegment in lstSegments) - { - lstSegment.body.AddForce((0f - (1f - f)) * lstSegment.body.mass * Physics.gravity); - } - } - - public void updateMass(float m) - { - getSegmentProperties().massPerUnitLength = m; - float mass = getSegmentProperties().massPerUnitLength * getSegmentProperties().length; - foreach (Segment lstSegment in lstSegments) - { - lstSegment.body.mass = mass; - } - } - - private void HideChildrenObjects(bool bHide) - { - foreach (Segment lstSegment in lstSegments) - { - if (bHide) - { - lstSegment.seg.hideFlags = HideFlags.HideInHierarchy; - } - else - { - lstSegment.seg.hideFlags = HideFlags.None; - } - } - - prevHideChildren = bHide; - } - - public List> getTrajectory() - { - List> list = new List>(); - float num = segmentBordersScaleFactor; - float num2 = ((!useSegmentBordersOffset || lstSegments.Count <= 0) - ? 0f - : lstSegments[0].capsuleCollider.radius); - num2 *= num; - float num3 = 1f; - int num4 = lstSegments.Count; - // if (num4 > 30 && GameController.Instance.useFastRopeDraw) - //TODO : Change - if (num4 > 30) - { - num4 = 30; - } - - List list2 = new List(); - int num5 = 0; - if (lstSegments.Count > 0) - { - foreach (Segment lstSegment in lstSegments) - { - if (list2.Count == 0) - { - PosOri posOri = - new PosOri( - lstSegment.seg.transform.TransformPoint(new Vector3(0f, - 0f - getSegmentProperties().length - num2, 0f)), lstSegment.seg.transform.rotation); - posOri.pos = startPosition.position; - list2.Add(posOri); - } - - PosOri item = new PosOri(lstSegment.seg.transform.position, lstSegment.seg.transform.rotation); - list2.Add(item); - if (lstSegment.next == null && num5 < num4 - 1) - { - PosOri item2 = - new PosOri( - lstSegment.seg.transform.TransformPoint(new Vector3(0f, - getSegmentProperties().length * num3, 0f)), lstSegment.seg.transform.rotation); - list2.Add(item2); - list.Add(list2); - list2 = new List(); - } - - num5++; - if (num5 > num4) - { - break; - } - } - - PosOri item3 = - new PosOri( - lstSegments[Mathf.Min(num4, lstSegments.Count) - 1].seg.transform - .TransformPoint(new Vector3(0f, getSegmentProperties().length + num2, 0f)), - lstSegments[0].seg.transform.rotation); - list2.Add(item3); - } - - list.Add(list2); - return list; - } - - private void generateMeshForTrajectory(List trajectory, Bezier interpolator, float totalLen, - ref float lengthCovered, ref int lastVertId, ref int lastIndexID) - { - float num = ((segPropertyType != SegmentProperties.Type.CYLINDER) - ? segPropertiesBox.width - : segPropertiesCylinder.radius); - num *= radiusFactor; - float num2 = 6.28318f / (float)numCirclePt; - Vector3[] array = new Vector3[numCirclePt]; - Vector3[] array2 = new Vector3[numCirclePt]; - for (int i = 0; i < numCirclePt; i++) - { - array[i] = new Vector3((float)((double)num * Math.Cos((float)i * num2)), 0f, - (float)((double)num * Math.Sin((float)i * num2))); - array2[i] = new Vector3((float)((double)(0f - num) * Math.Sin((float)i * num2)), 0f, - (float)((double)num * Math.Cos((float)i * num2))); - array2[i].Normalize(); - } - - int num3 = lastVertId; - Vector3 v = new Vector3(0f, 0f, 1f); - Vector3 vector = new Vector3(1f, 1f, 1f); - Vector3 vector2 = new Vector3(0.3f, 1f, 0.3f); - Vector3 s = new Vector3(0.2f, 1f, 0.2f); - float num4 = 0f; - Vector3 vector3 = trajectory[0].pos; - int num5 = trajectory.Count * 4; - float deltaLen = totalLen / (float)(num5 - 1); - for (int j = 0; j < num5; j++) - { - Vector3 vector4 = ((j != 0) ? interpolator.getNext(deltaLen).pos : trajectory[0].pos); - if (j != 0) - { - v = vector4 - vector3; - v.Normalize(); - } - else if (j == 0 && trajectory.Count > 1) - { - v = trajectory[1].pos - vector4; - v.Normalize(); - } - - Vector3 vector5 = vector4 - vector3; - vector3 = vector4; - Matrix4x4 matrix4x = default(Matrix4x4); - for (int k = 0; k < numCirclePt; k++) - { - Quaternion q = Utility.createOrientation(v); - //TODO : Change - - // if (GameController.Instance.fishingPlayer.currentHands.fishingLine.lineType == FishingLine.LineType.FLY && j >= num5 - 8) - // { - // matrix4x.SetTRS(vector4, q, s); - // } - // else - { - matrix4x.SetTRS(vector4, q, (!(vector4.y < 0f)) ? vector : vector2); - } - vertexBuffer[num3] = base.transform.InverseTransformPoint(matrix4x.MultiplyPoint(array[k])); - if (j == 0) - { - } - - Vector3 vector6 = base.transform.InverseTransformDirection(matrix4x.MultiplyVector(array2[k])); - tangents[num3] = new Vector4(vector6.x, vector6.y, vector6.z, -1f); - if (j == 1) - { - } - - uv[num3] = new Vector2((float)k * 1f / (float)numCirclePt, (totalLen - num4) / textureLength); - num3++; - } - - num4 += vector5.magnitude; - } - - if (true) - { - int num6 = lastIndexID; - for (int l = 0; l < num5 - 1; l++) - { - for (int m = 0; m < numCirclePt; m++) - { - int num7 = l + lastVertId / numCirclePt; - indexBuffer[num6++] = num7 * numCirclePt + m; - indexBuffer[num6++] = (num7 + 1) * numCirclePt + m; - indexBuffer[num6++] = num7 * numCirclePt + (m + 1) % numCirclePt; - indexBuffer[num6++] = num7 * numCirclePt + (m + 1) % numCirclePt; - indexBuffer[num6++] = (num7 + 1) * numCirclePt + m; - indexBuffer[num6++] = (num7 + 1) * numCirclePt + (m + 1) % numCirclePt; - } - } - - lastIndexID = num6; - } - - lengthCovered += num4; - lastVertId = num3; - } - - public void generateOverallMesh() - { - //TODO : Change - - // if ((bool)GameController.Instance.fishingPlayer && GameController.Instance.optimalRopeGenerator && - // ((GameController.Instance.fishingPlayer.currentHands.fakeStraightLine.enabled && - // ropeGameplayType != RopeGameplayType.FLOAT) || - // GameController.Instance.fishingPlayer.underwaterCamera.isTurnedOn)) - // { - // return; - // } - - List> trajectory = getTrajectory(); - if (trajectory[0].Count <= 0) - { - return; - } - - int num = 0; - int num2 = 0; - bool flag = false; - foreach (List item in trajectory) - { - int num3 = item.Count * 4; - num += num3; - num2 += (num3 - 1) * (numCirclePt * 2); - } - - int num4 = numCirclePt * num; - if (vertexBuffer == null || num4 != vertexBuffer.Length) - { - flag = vertexBuffer == null || num4 > vertexBuffer.Length; - vertexBuffer = new Vector3[num4]; - tangents = new Vector4[num4]; - uv = new Vector2[num4]; - } - - if (indexBuffer == null || num2 * 3 != indexBuffer.Length) - { - indexBuffer = new int[num2 * 3]; - } - - int lastVertId = 0; - int lastIndexID = 0; - List list = new List(); - float num5 = 0f; - foreach (List item2 in trajectory) - { - list.Add(new Bezier(item2)); - num5 += list[list.Count - 1].TotalLength(); - } - - float lengthCovered = 0f; - for (int i = 0; i < trajectory.Count; i++) - { - generateMeshForTrajectory(trajectory[i], list[i], num5, ref lengthCovered, ref lastVertId, - ref lastIndexID); - } - - if (mesh == null) - { - mesh = new Mesh(); - } - - if (flag) - { - mesh.vertices = vertexBuffer; - mesh.triangles = indexBuffer; - } - else - { - mesh.triangles = indexBuffer; - mesh.vertices = vertexBuffer; - } - - mesh.uv = uv; - mesh.RecalculateNormals(); - mesh.tangents = tangents; - meshFilter.sharedMesh = mesh; - meshRenderer.sharedMaterial = continuousMaterial; - mesh.bounds = new Bounds(base.transform.position, new Vector3(10000f, 10000f, 10000f)); - } - - public void regenerateRope(bool bDestroyImmediate) - { - deleteRope(bDestroyImmediate); - generateCatnaryRope(controlPoints.ToArray()); - setLinkMesh(linkMesh); - initialNumSegemnts = lstSegments.Count; - } - - public void generateRope(ControlPoint[] arrPoints) - { - bool flag = false; - List list = new List(arrPoints.Length); - for (int i = 0; i < arrPoints.Length; i++) - { - list.Add(arrPoints[i].localPos); - if (arrPoints[i].obj != null) - { - list[i] = arrPoints[i].obj.transform.TransformPoint(arrPoints[i].localPos); - } - else - { - list[i] = ((!flag) - ? base.gameObject.transform.TransformPoint(arrPoints[i].localPos) - : arrPoints[i].localPos); - } - } - - SCapsulePos sCapsulePos = new SCapsulePos(); - bool flag2 = false; - int last = 0; - bool flag3 = false; - Segment segment = null; - Quaternion quaternion = Quaternion.identity; - Quaternion quaternion2 = Quaternion.AngleAxis(jointProp.twistOffsetDeg, new Vector3(0f, 1f, 0f)); - totalLength = 0f; - Vector3 vector = list[0]; - int num = 0; - while (!flag2) - { - int num2 = last; - flag2 = getNextCapsulePos(sCapsulePos, list, ref last, getSegmentProperties(), jointProp, false); - Segment segment2 = null; - if (sCapsulePos.fLen > 0f) - { - segment2 = createSegment(sCapsulePos.fLen, sCapsulePos.vPos, sCapsulePos.vDir); - if (useColliders && num >= 0) - { - if ((bool)segment2.capsuleCollider) - { - segment2.capsuleCollider.enabled = true; - } - - num = 0; - } - else - { - if ((bool)segment2.capsuleCollider) - { - segment2.capsuleCollider.enabled = false; - } - - num++; - } - - lstSegments.Add(segment2); - if (segment != null) - { - totalLength += (sCapsulePos.vPos - vector).magnitude; - vector = sCapsulePos.vPos; - segment.next = createSegmentJoint(segment, segment2, quaternion); - segment2.prev = segment.next; - } - - GameObject gameObject = null; - Vector3 vector2 = new Vector3(0f, 0f, 0f); - bool flag4 = false; - if (!flag3 && num2 == 0) - { - if (arrPoints[num2].attached) - { - gameObject = arrPoints[num2].obj; - vector2 = arrPoints[num2].localPos; - flag4 = true; - } - } - else if (num2 != last && last < arrPoints.Length && arrPoints[last].attached) - { - gameObject = arrPoints[last].obj; - vector2 = arrPoints[last].localPos; - flag4 = true; - } - - if (flag4) - { - vector2 = ((gameObject != null) - ? gameObject.transform.TransformPoint(vector2) - : ((!flag) ? base.gameObject.transform.TransformPoint(vector2) : vector2)); - int jtPos = -1; - Joint prev = new Joint(segment2.seg, gameObject, vector2, - segment2.seg.transform.TransformDirection(0f, 1f, 0f), jointProp, this, jtPos); - if (num2 == 0) - { - segment2.prev = prev; - } - - flag3 = true; - } - - segment = segment2; - quaternion = quaternion2 * quaternion; - } - else - { - flag2 = true; - } - } - - if (lstSegments.Count == 1) - { - GameObject obj = arrPoints[last].obj; - Vector3 localPos = arrPoints[last].localPos; - int jtPos2 = -1; - Segment segment3 = lstSegments[0]; - Joint prev2 = new Joint(segment3.seg, obj, localPos, - segment3.seg.transform.TransformDirection(0f, 1f, 0f), jointProp, this, jtPos2); - segment3.prev = prev2; - } - - if (lstSegments.Count > 0 && !lstSegments[lstSegments.Count - 1].seg.GetComponent()) - { - GameObject obj2 = arrPoints[last].obj; - Vector3 localPos2 = arrPoints[last].localPos; - int jtPos3 = -1; - Segment segment4 = lstSegments[lstSegments.Count - 1]; - Joint joint = new Joint(segment4.seg, obj2, localPos2, - segment4.seg.transform.TransformDirection(0f, 1f, 0f), jointProp, this, jtPos3); - } - - if (sendRopeEvents && this.Created != null) - { - this.Created(this); - } - } - - public void generateCatnaryRope(ControlPoint[] arrPoints) - { - Debug("Generating Catenary Rope " + arrPoints.ToString(), LOGGING.INFO); - if (arrPoints.Length < 2) - { - return; - } - - List list = new List(); - Vector3 vector = ((!(arrPoints[0].obj != null)) - ? arrPoints[0].localPos - : arrPoints[0].obj.transform.TransformPoint(arrPoints[0].localPos)); - list.Add(arrPoints[0]); - for (int i = 1; i < arrPoints.Length; i++) - { - Vector3 vector2 = ((!(arrPoints[i].obj != null)) - ? arrPoints[i].localPos - : arrPoints[i].obj.transform.TransformPoint(arrPoints[i].localPos)); - ControlPoint controlPoint = arrPoints[i - 1]; - if (controlPoint.slackFraction > 1f) - { - float magnitude = (vector2 - vector).magnitude; - SegmentPropertiesBase segmentProperties = getSegmentProperties(); - List catenaryPts = Utility.getCatenaryPts(vector, vector2, - magnitude * controlPoint.slackFraction, (int)(magnitude / segmentProperties.length)); - for (int j = 1; j < catenaryPts.Count; j++) - { - ControlPoint controlPoint2 = new ControlPoint(); - controlPoint2.attached = false; - controlPoint2.obj = null; - controlPoint2.localPos = catenaryPts[j]; - if (j == catenaryPts.Count - 1) - { - controlPoint2.attached = arrPoints[i].attached; - controlPoint2.obj = arrPoints[i].obj; - controlPoint2.localPos = ((!(controlPoint2.obj != null)) - ? controlPoint2.localPos - : controlPoint2.obj.transform.InverseTransformPoint(controlPoint2.localPos)); - } - - list.Add(controlPoint2); - } - } - else - { - list.Add(arrPoints[i]); - } - - vector = vector2; - } - - generateRope(list.ToArray()); - Debug("Generating Catenary Rope done", LOGGING.INFO); - } - - public void deleteRope(bool bDestroyImmediate) - { - if (lstSegments != null) - { - foreach (Segment lstSegment in lstSegments) - { - if (bDestroyImmediate) - { - UnityEngine.Object.DestroyImmediate(lstSegment.seg); - } - else - { - UnityEngine.Object.Destroy(lstSegment.seg); - } - } - - lstSegments.Clear(); - } - - if (springJoint != null) - { - UnityEngine.Object.Destroy(springJoint.joint); - } - - if (springHolder != null) - { - UnityEngine.Object.Destroy(springHolder); - } - - if (bDestroyImmediate) - { - clearOrphan(); - } - - if (sendRopeEvents && this.Deleted != null) - { - this.Deleted(this); - } - } - - public float getLength() - { - return totalLength; - } - - public float getLengthColliders() - { - return totalLengthColliders; - } - - public float getTension() - { - if (springJoint != null && springJoint.joint != null) - { - ConfigurableJoint configurableJoint = (ConfigurableJoint)springJoint.joint; - Vector3 vector = configurableJoint.connectedAnchor; - Rigidbody connectedBody = configurableJoint.connectedBody; - Vector3 vector2 = configurableJoint.anchor; - Rigidbody body = lstSegments[0].body; - if (connectedBody != null) - { - vector = connectedBody.transform.TransformPoint(vector); - } - - if (body != null) - { - vector2 = body.transform.TransformPoint(vector2); - } - - float num = (vector - vector2).magnitude - 0.01f; - return num * configurableJoint.linearLimitSpring.spring; - } - - if (lstSegments.Count > 0 && lstSegments[0].prev != null) - { - UnityEngine.Joint joint = lstSegments[0].prev.joint; - Vector3 vector3 = joint.connectedAnchor; - Rigidbody connectedBody2 = joint.connectedBody; - Vector3 vector4 = joint.anchor; - Rigidbody body2 = lstSegments[0].body; - if (connectedBody2 != null) - { - vector3 = connectedBody2.transform.TransformPoint(vector3); - } - - if (body2 != null) - { - vector4 = body2.transform.TransformPoint(vector4); - } - - float num2 = (vector3 - vector4).magnitude - 0.01f; - return num2 * ((ConfigurableJoint)joint).linearLimitSpring.spring; - } - - return 0f; - } - - public void breakRope(float fraction) - { - Debug("Breaking Rope from Fraction: " + fraction, LOGGING.INFO); - int num = (int)((float)lstSegments.Count * fraction); - if (num < lstSegments.Count - 1 && num >= 0) - { - Debug("Breaking Rope from segment: " + num, LOGGING.DEBUG); - if (lstSegments[num].next != null) - { - UnityEngine.Object.Destroy(lstSegments[num].next.joint); - lstSegments[num].next = null; - lstSegments[num + 1].prev = null; - } - } - - Debug("Breaking Rope done", LOGGING.INFO); - } - - public void setLength(float newLength) - { - newLength -= getLength(); - changeLength(newLength); - } - - public void changeLength(float deltaLen) - { - if (lstSegments.Count < 1 || deltaLen == 0f) - { - CalculateTotalLength(); - return; - } - - deltaLen *= 0.5f; - int num = 0; - Segment segment = lstSegments[num]; - SegmentPropertiesBase segmentProperties = getSegmentProperties(); - Vector3 localScale = segment.seg.transform.localScale; - if (localScale.y > 0f) - { - localScale.y += deltaLen; - } - - if (localScale.y < 0.01f) - { - localScale.y = 0.01f; - } - - float num2 = 0.5f; - float num3 = 1f; - float num4 = 0f; - float num5 = 0f; - float num6 = segmentProperties.length * num2; - num5 = ((SegmentPropertiesCylinder)segmentProperties).radius * 2f; - if (localScale.y > (segmentProperties.length + num5) * num2) - { - Vector3 localScale2 = segment.seg.transform.localScale; - localScale2.y = num6; - segment.seg.transform.localScale = localScale2; - float num7 = 0f; - for (deltaLen = 0f - segmentProperties.length + localScale.y / num2; deltaLen > 0f; deltaLen -= num7) - { - num7 = Mathf.Clamp(deltaLen, 0.01f, num6); - segment.seg.transform.position += segment.seg.transform.TransformDirection(0f, 1f, 0f) * num7; - if (segment.next != null) - { - if (segment.next.joint.connectedBody != segment.body) - { - segment.next.joint.anchor = new Vector3(0f, (1f - jointProp.offsetScale) * num3, 0f); - } - else - { - segment.next.joint.connectedAnchor = - new Vector3(0f, (1f - jointProp.offsetScale) * num3, 0f); - } - } - - Vector3 pos = segment.seg.transform.position - - segment.seg.transform.TransformDirection(0f, 1f, 0f) * - (num7 + segmentProperties.length / 2f); - Segment segment2 = createSegment(num7 * 2f, pos, - segment.seg.transform.TransformDirection(0f, 1f, 0f)); - float num8 = jointProp.twistOffsetDeg * (float)(-1 + (initialNumSegemnts - lstSegments.Count)); - num8 = (num8 + 36000f) % 360f; - Quaternion quaternion = Quaternion.AngleAxis(num8, new Vector3(0f, 1f, 0f)); - segment2.seg.transform.rotation = segment2.seg.transform.rotation * quaternion; - Rigidbody connectedBody = segment.prev.joint.connectedBody; - Vector3 connectedAnchor = segment.prev.joint.connectedAnchor; - Vector3 vGlobalAnchor = ((!connectedBody) - ? connectedAnchor - : connectedBody.transform.TransformPoint(connectedAnchor)); - Joint prev = new Joint(segment2.seg, (!connectedBody) ? null : connectedBody.gameObject, - vGlobalAnchor, segment2.seg.transform.TransformDirection(0f, 1f, 0f), jointProp, this, -1); - segment2.prev = prev; - Joint prev2 = (segment2.next = new Joint(segment2, segment, jointProp, getSegmentProperties(), - Quaternion.identity)); - Joint prev3 = segment.prev; - segment.prev = prev2; - lstSegments.Insert(0, segment2); - UnityEngine.Object.Destroy(prev3.joint); - FixAnchors(segment2, num3); - segment = segment2; - } - - CalculateTotalLength(); - } - else if (localScale.y < num5 * num2) - { - while (deltaLen < 0f) - { - if (lstSegments.Count < num + 1 + 1) - { - UnityEngine.Debug.LogError("!!! changeLength lstSegments size error index !!!: " + num); - //TODO: Change - if (Fishing.Instance.Player != null) - { - Fishing.Instance.Player.LineBreak("HUD_MESSAGE/LINE_BROKE_TENSION", 0f); - } - // if (GameController.Instance.fishingPlayer.currentState == FishingPlayer.PlayerState.FISHING || GameController.Instance.fishingPlayer.currentState == FishingPlayer.PlayerState.ICE_FISHING) - // { - // GameController.Instance.fishingPlayer.LineBreak(Utilities.GetTranslation("HUD_MESSAGE/LINE_BROKE_TENSION"), 0f); - // } - - - return; - } - - Segment segment3 = lstSegments[num + 1]; - Vector3 localScale3 = segment3.seg.transform.localScale; - localScale3.y = num6; - segment3.seg.transform.localScale = localScale3; - segment.seg.transform.position += - segment.seg.transform.TransformDirection(0f, -1f, 0f) * localScale.y / num2; - Vector3 connectedAnchor2 = segment.prev.joint.connectedAnchor; - Rigidbody connectedBody2 = segment.prev.joint.connectedBody; - Vector3 vGlobalAnchor2 = ((!connectedBody2) - ? connectedAnchor2 - : connectedBody2.transform.TransformPoint(connectedAnchor2)); - Joint prev4 = new Joint(segment3.seg, (!connectedBody2) ? null : connectedBody2.gameObject, - vGlobalAnchor2, segment3.seg.transform.TransformDirection(0f, 1f, 0f), jointProp, this, -1); - segment3.prev = prev4; - deltaLen += segment.seg.transform.localScale.y; - lstSegments.Remove(segment); - UnityEngine.Object.Destroy(segment.seg); - FixAnchors(segment3, num3); - segment = segment3; - if (!(deltaLen < 0f)) - { - } - } - - CalculateTotalLength(); - } - else - { - segment.seg.transform.localScale = localScale; - FixAnchors(segment, num3); - CalculateTotalLength(); - } - } - - public void FixAnchors(Segment seg, float anchorMult) - { - Joint prev = seg.prev; - Joint next = seg.next; - if (prev != null) - { - if (prev.joint.connectedBody != seg.body) - { - prev.joint.anchor = new Vector3(0f, (-1f + jointProp.offsetScale) * anchorMult, 0f); - } - else - { - prev.joint.connectedAnchor = new Vector3(0f, (-1f + jointProp.offsetScale) * anchorMult, 0f); - } - } - - if (next != null) - { - if (next.joint.connectedBody != seg.body) - { - next.joint.anchor = new Vector3(0f, (1f - jointProp.offsetScale) * anchorMult, 0f); - } - else - { - next.joint.connectedAnchor = new Vector3(0f, (1f - jointProp.offsetScale) * anchorMult, 0f); - } - } - } - - private void clearOrphan() - { - Debug("Clear Orphan", LOGGING.INFO); - if (lstComponentsCreated != null) - { - foreach (UnityEngine.Object item in lstComponentsCreated) - { - UnityEngine.Object.DestroyImmediate(item); - } - - lstComponentsCreated.Clear(); - } - - Debug("Clear Orphan done", LOGGING.INFO); - } - - private void OnEnable() - { - } - - private void Awake() - { - meshRenderer = GetComponent(); - meshFilter = GetComponent(); - if (startPosition == null && (bool)controlPoints[0].obj) - { - startPosition = controlPoints[0].obj.transform; - } - - List list = new List(); - for (int i = 0; i < base.transform.childCount; i++) - { - if (base.transform.GetChild(i).name.Contains("__rope__")) - { - list.Add(base.transform.GetChild(i).gameObject); - } - } - - foreach (GameObject item in list) - { - UnityEngine.Object.Destroy(item); - } - - lstSegments = new List(); - if (ropeType == RopeType.FromBones) - { - rendererType = RendererType.None; - } - - regenerateRope(true); - setRendererType(rendererType); - } - - private void Start() - { - } - - private void FixedUpdate() - { - changeLength(rate); - if (gravity != -1f) - { - applyGravity(gravity); - } - } - - private void LateUpdate() - { - generateOverallMesh(); - } - - private void checkBrokenJoints() - { - foreach (Segment lstSegment in lstSegments) - { - if (lstSegment.prev != null && lstSegment.prev.joint == null) - { - lstSegment.prev = null; - } - - if (lstSegment.next != null && lstSegment.next.joint == null) - { - lstSegment.next = null; - } - } - } - - private void checkStabilization() - { - foreach (Segment lstSegment in lstSegments) - { - float num = lstSegment.body.linearVelocity.sqrMagnitude * lstSegment.body.mass + - lstSegment.body.inertiaTensor.magnitude * lstSegment.body.angularVelocity.sqrMagnitude; - if (num > lstSegment.body.mass * 25f) - { - lstSegment.body.linearVelocity = new Vector3(0f, 0f, 0f); - lstSegment.body.angularVelocity = new Vector3(0f, 0f, 0f); - } - } - } - - public void changeToKinematic(bool b) - { - int num = 0; - foreach (Segment lstSegment in lstSegments) - { - if (ropeType == RopeType.Procedural || (ropeType == RopeType.FromBones && !staticBones.Contains(num))) - { - lstSegment.body.isKinematic = b; - } - - num++; - } - - kinematic = b; - prevKinematic = b; - } - - private void enableRendering(bool b) - { - Debug("Enable Rendering " + b, LOGGING.INFO); - meshRenderer.enabled = b; - Debug("Enable Rendering done", LOGGING.INFO); - } - - private void enableSegmentRendering(bool b) - { - Debug("Enable Segment Rendering " + b, LOGGING.INFO); - foreach (Segment lstSegment in lstSegments) - { - lstSegment.meshRenderer.enabled = b; - } - - Debug("Enable Segment Rendering done", LOGGING.INFO); - } - - private bool getNextCapsulePos(SCapsulePos capPose, List vecPts, ref int last, - SegmentPropertiesBase segProp, JointProperties jointProp, bool bExtraSegPosAtStart) - { - capPose.vPrevPos = capPose.vPos; - capPose.vPrevDir = capPose.vDir; - if (bExtraSegPosAtStart) - { - capPose.vPos += capPose.vDir * capPose.fLen * (1f - jointProp.offsetScale); - capPose.vDir *= -1f; - } - - bool result = false; - if (capPose.vDir.magnitude != 0f) - { - Vector3 vDir = capPose.vDir; - capPose.vPos += vDir * capPose.fLen * (1f - jointProp.offsetScale); - } - else - { - capPose.vPos = vecPts[last]; - } - - int num = last + 1; - if (num < vecPts.Count && num >= 0) - { - Vector3 vDir2 = vecPts[num] - capPose.vPos; - float magnitude = vDir2.magnitude; - vDir2.Normalize(); - float length = segProp.length; - capPose.fLen = length; - capPose.vDir = vDir2; - if (magnitude < segProp.length) - { - last = num; - num = last + 1; - if (last == 0 || last == vecPts.Count - 1) - { - capPose.fLen = magnitude; - result = true; - } - } - } - - if (bExtraSegPosAtStart) - { - capPose.vPos += capPose.vDir * capPose.fLen; - capPose.vDir *= -1f; - } - - return result; - } - - private Segment createBoneSegment(float len, Vector3 pos, Vector3 dir, GameObject bone) - { - Quaternion q = Utility.createOrientation(dir); - BoneSegment boneSegment = new BoneSegment("segment-" + lstSegments.Count + "__rope__", len, - pos + dir * len / 2f, q, getSegmentProperties(), this, bone); - boneSegment.seg.transform.parent = base.gameObject.transform; - return boneSegment; - } - - private Segment createSegment(float len, Vector3 pos, Vector3 dir) - { - Quaternion q = Utility.createOrientation(dir); - Segment segment = new Segment("segment-" + lstSegments.Count + "__rope__", len, pos + dir * len / 2f, q, - getSegmentProperties(), this); - segment.seg.transform.parent = base.gameObject.transform; - - //TODO: Change - - // if ((bool)GameController.Instance) - { - segment.meshRenderer.enabled = true; - // segment.meshRenderer.material = GameController.Instance.waterInteractiveMaterial; - segment.meshRenderer.shadowCastingMode = ShadowCastingMode.Off; - } - // else - // { - // segment.meshRenderer.enabled = false; - // } - - if (totalLength <= 105f) - { - //TODO:Change - - // segment.waterInteractive = segment.seg.AddComponent(); - // segment.waterInteractive.Multiplier = 1.5f; - } - - return segment; - } - - private Joint createSegmentJoint(Segment seg1, Segment seg2, Quaternion twistOffset) - { - return new Joint(seg1, seg2, jointProp, getSegmentProperties(), twistOffset); - } - - public void CalculateTotalLength() - { - totalLength = 0f; - totalLengthColliders = 0f; - for (int i = 0; i < lstSegments.Count; i++) - { - totalLengthColliders += - lstSegments[i].seg.transform.localScale.y * lstSegments[i].capsuleCollider.height; - if (i == 0) - { - totalLength += (lstSegments[i].seg.transform.position - controlPoints[0].obj.transform.position) - .magnitude; - } - - if (i == lstSegments.Count - 1) - { - totalLength += (lstSegments[i].seg.transform.position - controlPoints[1].obj.transform.position) - .magnitude; - } - - if (i > 0) - { - totalLength += (lstSegments[i].seg.transform.position - lstSegments[i - 1].seg.transform.position) - .magnitude; - } - } - - if (ropeStretchThreshold > 0f && totalLength - totalLengthColliders > ropeStretchThreshold) - { - regenerateRope(true); - UnityEngine.Debug.LogError("Rope stretch regenerate"); - } - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/PhysicsTools/Rope.cs.meta b/Assets/Scripts/PhysicsTools/Rope.cs.meta deleted file mode 100644 index 196e77a28..000000000 --- a/Assets/Scripts/PhysicsTools/Rope.cs.meta +++ /dev/null @@ -1,14 +0,0 @@ -fileFormatVersion: 2 -guid: 8d8b3d7293da4ed8736330164944ddd3 -timeCreated: 1771646562 -licenseType: Free -MonoImporter: - serializedVersion: 2 - name: - externalObjects: {} - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/PhysicsTools/SCapsulePos.cs b/Assets/Scripts/PhysicsTools/SCapsulePos.cs deleted file mode 100644 index b6153e9f1..000000000 --- a/Assets/Scripts/PhysicsTools/SCapsulePos.cs +++ /dev/null @@ -1,26 +0,0 @@ -using UnityEngine; - -namespace PhysicsTools -{ - internal class SCapsulePos - { - public Vector3 vPos; - - public Vector3 vDir; - - public Vector3 vPrevPos; - - public Vector3 vPrevDir; - - public float fLen; - - public SCapsulePos() - { - vPos = new Vector3(0f, 0f, 0f); - vDir = new Vector3(0f, 0f, 0f); - vPrevPos = new Vector3(0f, 0f, 0f); - vPrevDir = new Vector3(0f, 0f, 0f); - fLen = 0f; - } - } -} diff --git a/Assets/Scripts/PhysicsTools/SCapsulePos.cs.meta b/Assets/Scripts/PhysicsTools/SCapsulePos.cs.meta deleted file mode 100644 index 991a13719..000000000 --- a/Assets/Scripts/PhysicsTools/SCapsulePos.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3881b5b71590e5142bc7910fe64dbc69 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/PhysicsTools/Segment.cs b/Assets/Scripts/PhysicsTools/Segment.cs deleted file mode 100644 index 98e17980f..000000000 --- a/Assets/Scripts/PhysicsTools/Segment.cs +++ /dev/null @@ -1,58 +0,0 @@ -// using UltimateWater; -using UnityEngine; - -namespace PhysicsTools -{ - public class Segment - { - public GameObject seg; - - public Rigidbody body; - - public Joint prev; - - public Joint next; - - public CapsuleCollider capsuleCollider; - - public MeshFilter meshFilter; - - public MeshRenderer meshRenderer; - - // public WaterInteractive waterInteractive; - - public Segment(string name, float len, Vector3 pos, Quaternion q, SegmentPropertiesBase segProperties, Rope r) - { - SegmentPropertiesCylinder segmentPropertiesCylinder = (SegmentPropertiesCylinder)segProperties; - float radius = segmentPropertiesCylinder.radius; - seg = GameObject.CreatePrimitive(PrimitiveType.Cylinder); - capsuleCollider = seg.GetComponent(); - meshFilter = seg.GetComponent(); - meshRenderer = seg.GetComponent(); - body = seg.AddComponent(); - capsuleCollider.sharedMaterial = r.ropeMaterial; - capsuleCollider.enabled = r.useColliders; - r.lstComponentsCreated.Add(seg); - seg.hideFlags = (r.HideChildren ? HideFlags.HideInHierarchy : HideFlags.None); - meshRenderer.enabled = true; - r.linkMesh.defaultMesh = meshFilter.sharedMesh; - r.linkMesh.defaultMeshMaterial = meshRenderer.sharedMaterial; - r.linkMesh.defaultTransform = Matrix4x4.identity; - if (r.linkMesh.getMesh() != null) - { - meshFilter.sharedMesh = r.linkMesh.getMesh(); - meshRenderer.sharedMaterial = r.linkMesh.meshMaterial; - } - seg.name = name; - seg.transform.localScale = new Vector3(radius * 2f, len / 2f, radius * 2f); - seg.transform.localPosition = pos; - seg.transform.localRotation = q; - body.maxAngularVelocity = 1f; - body.angularDamping = segmentPropertiesCylinder.angularDamping; - body.linearDamping = segmentPropertiesCylinder.linearDamping; - body.mass = segmentPropertiesCylinder.massPerUnitLength * segmentPropertiesCylinder.length; - body.solverIterations = segmentPropertiesCylinder.solverCount; - body.isKinematic = r.kinematic; - } - } -} diff --git a/Assets/Scripts/PhysicsTools/Segment.cs.meta b/Assets/Scripts/PhysicsTools/Segment.cs.meta deleted file mode 100644 index 8a0dac1dd..000000000 --- a/Assets/Scripts/PhysicsTools/Segment.cs.meta +++ /dev/null @@ -1,14 +0,0 @@ -fileFormatVersion: 2 -guid: b876b665f2164469858aa78787017d4d -timeCreated: 1771646563 -licenseType: Free -MonoImporter: - serializedVersion: 2 - name: - externalObjects: {} - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/PhysicsTools/SegmentProperties.cs b/Assets/Scripts/PhysicsTools/SegmentProperties.cs deleted file mode 100644 index c2661eb68..000000000 --- a/Assets/Scripts/PhysicsTools/SegmentProperties.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; - -namespace PhysicsTools -{ - [Serializable] - public class SegmentProperties - { - [Serializable] - public enum Type - { - CYLINDER = 0, - BOX = 1 - } - - public Type type; - - public SegmentPropertiesBase properties; - - public SegmentProperties() - { - properties = new SegmentPropertiesCylinder(); - type = Type.CYLINDER; - } - - public void setType(Type t) - { - switch (t) - { - case Type.BOX: - properties = new SegmentPropertiesBox(); - break; - case Type.CYLINDER: - properties = new SegmentPropertiesCylinder(); - break; - } - type = t; - } - } -} diff --git a/Assets/Scripts/PhysicsTools/SegmentProperties.cs.meta b/Assets/Scripts/PhysicsTools/SegmentProperties.cs.meta deleted file mode 100644 index be2915fa3..000000000 --- a/Assets/Scripts/PhysicsTools/SegmentProperties.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4cc846e1c08f18140bdf8f716aff9d45 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/PhysicsTools/SegmentPropertiesBase.cs b/Assets/Scripts/PhysicsTools/SegmentPropertiesBase.cs deleted file mode 100644 index 621c13a0b..000000000 --- a/Assets/Scripts/PhysicsTools/SegmentPropertiesBase.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; - -namespace PhysicsTools -{ - [Serializable] - public class SegmentPropertiesBase - { - public float massPerUnitLength; - - public int solverCount; - - public float length; - - public float linearDamping; - - public float angularDamping; - - public SegmentPropertiesBase() - { - massPerUnitLength = 10f; - solverCount = 255; - length = 1f; - linearDamping = 0.01f; - angularDamping = 0.01f; - } - } -} diff --git a/Assets/Scripts/PhysicsTools/SegmentPropertiesBase.cs.meta b/Assets/Scripts/PhysicsTools/SegmentPropertiesBase.cs.meta deleted file mode 100644 index 1a179e51b..000000000 --- a/Assets/Scripts/PhysicsTools/SegmentPropertiesBase.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: adbcbbf68b6c67b4a919921e96801c2b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/PhysicsTools/SegmentPropertiesBox.cs b/Assets/Scripts/PhysicsTools/SegmentPropertiesBox.cs deleted file mode 100644 index 1a03d069d..000000000 --- a/Assets/Scripts/PhysicsTools/SegmentPropertiesBox.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; - -namespace PhysicsTools -{ - [Serializable] - public class SegmentPropertiesBox : SegmentPropertiesBase - { - public float width; - - public float height; - - public SegmentPropertiesBox() - { - length = 1f; - width = 0.05f; - height = 0.2f; - } - } -} diff --git a/Assets/Scripts/PhysicsTools/SegmentPropertiesBox.cs.meta b/Assets/Scripts/PhysicsTools/SegmentPropertiesBox.cs.meta deleted file mode 100644 index f65d91125..000000000 --- a/Assets/Scripts/PhysicsTools/SegmentPropertiesBox.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 278f3471b842200469e66a88287e903f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/PhysicsTools/SegmentPropertiesCylinder.cs b/Assets/Scripts/PhysicsTools/SegmentPropertiesCylinder.cs deleted file mode 100644 index 17acf3661..000000000 --- a/Assets/Scripts/PhysicsTools/SegmentPropertiesCylinder.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; - -namespace PhysicsTools -{ - [Serializable] - public class SegmentPropertiesCylinder : SegmentPropertiesBase - { - public float radius; - - public SegmentPropertiesCylinder() - { - length = 1f; - radius = 0.1f; - } - } -} diff --git a/Assets/Scripts/PhysicsTools/SegmentPropertiesCylinder.cs.meta b/Assets/Scripts/PhysicsTools/SegmentPropertiesCylinder.cs.meta deleted file mode 100644 index 54ea0e91e..000000000 --- a/Assets/Scripts/PhysicsTools/SegmentPropertiesCylinder.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1876d7df821e9ca46a62254142001c6c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/PhysicsTools/SerializedSoftJointLimitSpring.cs b/Assets/Scripts/PhysicsTools/SerializedSoftJointLimitSpring.cs deleted file mode 100644 index 14cc3ddbc..000000000 --- a/Assets/Scripts/PhysicsTools/SerializedSoftJointLimitSpring.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using UnityEngine; - -namespace PhysicsTools -{ - [Serializable] - public class SerializedSoftJointLimitSpring - { - public float spring = 30000f; - - public float damper = 30000f; - - public SerializedSoftJointLimitSpring() - { - spring = 30000f; - damper = 30000f; - } - - private SerializedSoftJointLimitSpring(SoftJointLimitSpring c) - { - damper = c.damper; - spring = c.spring; - } - - public static implicit operator SoftJointLimitSpring(SerializedSoftJointLimitSpring c) - { - return new SoftJointLimitSpring - { - spring = c.spring, - damper = c.damper - }; - } - - public static explicit operator SerializedSoftJointLimitSpring(SoftJointLimitSpring c) - { - return new SerializedSoftJointLimitSpring(c); - } - } -} diff --git a/Assets/Scripts/PhysicsTools/SerializedSoftJointLimitSpring.cs.meta b/Assets/Scripts/PhysicsTools/SerializedSoftJointLimitSpring.cs.meta deleted file mode 100644 index 385bd4fef..000000000 --- a/Assets/Scripts/PhysicsTools/SerializedSoftJointLimitSpring.cs.meta +++ /dev/null @@ -1,14 +0,0 @@ -fileFormatVersion: 2 -guid: e9f687b18e562c31f90c28822c0f641d -timeCreated: 1771646562 -licenseType: Free -MonoImporter: - serializedVersion: 2 - name: - externalObjects: {} - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/PhysicsTools/Utility.cs b/Assets/Scripts/PhysicsTools/Utility.cs deleted file mode 100644 index 00558282c..000000000 --- a/Assets/Scripts/PhysicsTools/Utility.cs +++ /dev/null @@ -1,272 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Runtime.Serialization.Formatters.Binary; -using UnityEngine; - -namespace PhysicsTools -{ - public class Utility - { - public class Calc - { - private float r_length; - - private float h; - - private float d; - - public Calc(float r_, float h_, float d_) - { - r_length = r_; - h = h_; - d = d_; - } - - public float g(float s) - { - return (float)(2.0 * Math.Sinh(s * d / 2f) / (double)s - Math.Sqrt(r_length * r_length - h * h)); - } - - public float dg(float s) - { - return (float)(2.0 * Math.Cosh(s * d / 2f) * (double)d / (double)(2f * s) - 2.0 * Math.Sinh(s * d / 2f) / (double)(s * s)); - } - } - - private const float DEG_2_RAD = 0.017453277f; - - private const float RAD_2_DEG = 57.29583f; - - public static void MatrixToTRS(Matrix4x4 mat, out Vector3 pos, out Quaternion rot, out Vector3 scale) - { - pos = mat.GetColumn(3); - rot = Quaternion.LookRotation(mat.GetColumn(2), mat.GetColumn(1)); - scale = new Vector3(mat.GetColumn(0).magnitude, mat.GetColumn(1).magnitude, mat.GetColumn(2).magnitude); - } - - private static void Swap(ref T lhs, ref T rhs) - { - T val = lhs; - lhs = rhs; - rhs = val; - } - - public static List getCatenaryPts(Vector3 vStart, Vector3 vEnd, float r_length, int N) - { - bool flag = false; - int num = 100; - float num2 = 1E-10f; - float num3 = 1E-08f; - float num4 = 0.5f; - float num5 = 1E-09f; - float num6 = 0.001f; - if (vStart.y > vEnd.y) - { - Swap(ref vStart, ref vEnd); - flag = true; - } - Vector3 vector = vEnd - vStart; - float y = vector.y; - vector.y = 0f; - Vector3 vector2 = vector / (N - 1); - float magnitude = vector.magnitude; - vector.Normalize(); - float num7 = ((magnitude == 0f) ? 1f : (1f / magnitude)); - List list = new List(new Vector3[N]); - if (Math.Abs(magnitude) < num6) - { - Vector3 vector3 = new Vector3((vStart.x + vEnd.x) / 2f, 0f, (vStart.z + vEnd.z) / 2f); - if (r_length < Math.Abs(y)) - { - for (int i = 0; i < N; i++) - { - list[i] = vector3 + new Vector3(0f, vStart.y + y * ((float)i * 1f / (float)(N - 1)), 0f); - } - } - else - { - num7 = (r_length - Math.Abs(y)) / 2f; - int num8 = (int)Math.Ceiling((float)N * num7 / r_length); - float num9 = Math.Max(vStart.y, vEnd.y); - float num10 = Math.Min(vStart.y, vEnd.y); - for (int j = 0; j < N; j++) - { - if (j < N - num8) - { - float num11 = num10 - num7 - num9; - float num12 = num11 * ((float)j * 1f / ((float)(N - num8) - 1f)); - list[j] = vector3 + new Vector3(0f, num9 + num12, 0f); - } - else - { - float num13 = num7; - float num14 = num13 * ((float)j * 1f / ((float)num8 - 1f)); - vector3 = (list[j] = vector3 + new Vector3(0f, num10 - num7 + num14, 0f)); - } - } - } - } - else if ((double)r_length <= Math.Sqrt(magnitude * magnitude + y * y)) - { - for (int k = 0; k < N; k++) - { - Vector3 value = vStart + k * vector2; - float num15 = (float)k * (vEnd.y - vStart.y) / (float)(N - 1); - value.y = vStart.y + num15; - list[k] = value; - } - } - else - { - Calc calc = new Calc(r_length, y, magnitude); - for (int l = 0; l < num; l++) - { - float value2 = calc.g(num7); - float value3 = calc.dg(num7); - if (Math.Abs(value2) < num3 || Math.Abs(value3) < num2) - { - break; - } - float num16 = (0f - calc.g(num7)) / calc.dg(num7); - float num17 = 1f; - float num18 = num7 + num17 * num16; - while (num18 < 0f || Math.Abs(calc.g(num18)) > Math.Abs(value2)) - { - num17 = num4 * num17; - if (num17 < num5) - { - break; - } - num18 = num7 + num17 * num16; - } - num7 = num18; - } - float num19 = (float)(0.5 * (Math.Log((r_length + y) / (r_length - y)) / (double)num7 - (double)magnitude)); - vector.y = 0f; - vector.Normalize(); - Vector3 vector5 = vStart - num19 * vector; - vector5.y = 0f; - float num20 = (float)((double)vStart.y - Math.Cosh(num19 * num7) / (double)num7); - for (int m = 0; m < N; m++) - { - Vector3 vector6 = vStart + m * vector2; - Vector3 vector7 = vector6; - vector6.y = 0f; - vector6.y = (float)(Math.Cosh((vector6 - vector5).magnitude * num7) / (double)num7 + (double)num20); - list[m] = vector6; - } - } - if (flag) - { - list.Reverse(); - } - return list; - } - - public static Quaternion createOrientation(Vector3 v) - { - if (v.x == 0f && v.y == 0f && v.z == 0f) - { - return Quaternion.identity; - } - Vector3 vector = new Vector3(0f, 1f, 0f); - Vector3 vector2 = Vector3.Cross(v, vector); - vector2.Normalize(); - float num = Vector3.Dot(vector, v); - if (num > 1f) - { - num = 1f; - } - else if (num < -1f) - { - num = -1f; - } - float num2 = (float)Math.Acos(num); - return Quaternion.AngleAxis(num2 * 180f / 3.14159f, -vector2); - } - - public static T DeepClone(T a) - { - using (MemoryStream memoryStream = new MemoryStream()) - { - BinaryFormatter binaryFormatter = new BinaryFormatter(); - binaryFormatter.Serialize(memoryStream, a); - memoryStream.Position = 0L; - return (T)binaryFormatter.Deserialize(memoryStream); - } - } - - private static Dictionary> buildMapOfJoints() - { - Dictionary> dictionary = new Dictionary>(); - UnityEngine.Joint[] array = UnityEngine.Object.FindObjectsOfType(); - UnityEngine.Joint[] array2 = array; - foreach (UnityEngine.Joint joint in array2) - { - Rigidbody component = joint.gameObject.GetComponent(); - if (component != null) - { - if (!dictionary.ContainsKey(component)) - { - dictionary.Add(component, new List()); - } - dictionary[component].Add(joint); - } - Rigidbody connectedBody = joint.connectedBody; - if (connectedBody != null) - { - if (!dictionary.ContainsKey(connectedBody)) - { - dictionary.Add(connectedBody, new List()); - } - dictionary[connectedBody].Add(joint); - } - } - return dictionary; - } - - private static void getConnectedBodies(ref Dictionary> dic, Rigidbody body, ref HashSet bodies) - { - bodies.Add(body); - if (!dic.ContainsKey(body)) - { - return; - } - List list = dic[body]; - foreach (UnityEngine.Joint item in list) - { - if (item.connectedBody != null && !bodies.Contains(item.connectedBody)) - { - getConnectedBodies(ref dic, item.connectedBody, ref bodies); - } - Rigidbody component = item.gameObject.GetComponent(); - if (component != null && !bodies.Contains(component)) - { - getConnectedBodies(ref dic, component, ref bodies); - } - } - } - - public static void moveConnectedBodies(Rigidbody start, Matrix4x4 newPose) - { - Dictionary> dic = buildMapOfJoints(); - HashSet bodies = new HashSet(); - getConnectedBodies(ref dic, start, ref bodies); - Matrix4x4 matrix4x = Matrix4x4.TRS(start.transform.position, start.transform.rotation, new Vector3(1f, 1f, 1f)); - foreach (Rigidbody item in bodies) - { - Matrix4x4 matrix4x2 = Matrix4x4.TRS(item.transform.position, item.transform.rotation, new Vector3(1f, 1f, 1f)); - Matrix4x4 inverse = matrix4x.inverse; - matrix4x2 = inverse * matrix4x2; - matrix4x2 = newPose * matrix4x2; - Vector3 pos; - Quaternion rot; - Vector3 scale; - MatrixToTRS(matrix4x2, out pos, out rot, out scale); - item.transform.position = pos; - item.transform.rotation = rot; - } - } - } -} diff --git a/Assets/Scripts/PhysicsTools/Utility.cs.meta b/Assets/Scripts/PhysicsTools/Utility.cs.meta deleted file mode 100644 index 4ece68aa7..000000000 --- a/Assets/Scripts/PhysicsTools/Utility.cs.meta +++ /dev/null @@ -1,14 +0,0 @@ -fileFormatVersion: 2 -guid: 93c19397aa18981aebed2e7aba8ca270 -timeCreated: 1771646562 -licenseType: Free -MonoImporter: - serializedVersion: 2 - name: - externalObjects: {} - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/PhysicsTools/Winch.cs b/Assets/Scripts/PhysicsTools/Winch.cs deleted file mode 100644 index 52fb4201c..000000000 --- a/Assets/Scripts/PhysicsTools/Winch.cs +++ /dev/null @@ -1,103 +0,0 @@ -using System; -using UnityEngine; - -namespace PhysicsTools -{ - public class Winch : MonoBehaviour - { - public float brakeForce; - - public float heaveTorque; - - public float tensionTorque; - - public float radius; - - public float length; - - public float inertia; - - public float maxRopeLength; - - public float minRopeLength; - - public float rpm; - - public float maxRPM; - - private float omega; - - public Rope rope; - - public Winch() - { - radius = 1f; - length = 1f; - maxRPM = 1f; - omega = 0f; - } - - private void FixedUpdate() - { - float fixedDeltaTime = Time.fixedDeltaTime; - float num = tensionTorqueValue() - heaveTorque; - float num2 = num / inertia; - float num3 = brakeForce * radius / inertia; - float num4 = omega + num2 * fixedDeltaTime; - if ((num2 < 0f && rope.getLength() > minRopeLength) || (num2 > 0f && num2 > num3 && rope.getLength() < maxRopeLength)) - { - if (num4 > 0f && num4 - num3 * fixedDeltaTime < 0f) - { - num4 = 0f; - } - else if (num4 < 0f && num4 + num3 * fixedDeltaTime > 0f) - { - num4 = 0f; - } - else if (num4 > 0f) - { - num4 -= num3 * fixedDeltaTime; - } - else if (num4 < 0f) - { - num4 += num3 * fixedDeltaTime; - } - omega = num4; - rope.changeLength(getLinearSpeed() * fixedDeltaTime); - } - else - { - omega = 0f; - } - rpm = omega / 6.28318f * 60f; - if (Math.Abs(rpm) > maxRPM) - { - if (rpm < 0f) - { - rpm = 0f - maxRPM; - } - else - { - rpm = maxRPM; - } - } - omega = rpm / 60f * 6.28318f; - } - - private float tensionTorqueValue() - { - tensionTorque = radius * getTension(); - return tensionTorque; - } - - private float getLinearSpeed() - { - return omega * radius; - } - - private float getTension() - { - return rope.getTension(); - } - } -} diff --git a/Assets/Scripts/PhysicsTools/Winch.cs.meta b/Assets/Scripts/PhysicsTools/Winch.cs.meta deleted file mode 100644 index 5e0f1ae1b..000000000 --- a/Assets/Scripts/PhysicsTools/Winch.cs.meta +++ /dev/null @@ -1,14 +0,0 @@ -fileFormatVersion: 2 -guid: fac89f9401be21c56be128e602bbd1cd -timeCreated: 1771646562 -licenseType: Free -MonoImporter: - serializedVersion: 2 - name: - externalObjects: {} - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset index 49fa20ef4..9581ee736 100644 --- a/UserSettings/EditorUserSettings.asset +++ b/UserSettings/EditorUserSettings.asset @@ -9,28 +9,28 @@ EditorUserSettings: value: 18134705175a055722080a3115371d4a0d55006876786860616b0471b8b07a68ffab74f9ee2a3a30300cea1a11320d0beb1a0c25f7060f494b4cc80018eb09361fc211cb1f862d19c51d19dcc413d6ade0d8ddfcddf9f4d9d29195fcfde6ebeae6f0a9c9afa6f8c5b89ff7a1aacececac4eba4d7c9d28bda flags: 0 RecentlyUsedSceneGuid-0: - value: 0104025352005d0f0e0d0d2741775c12401519287c297167282a1935b1b13269 + value: 015557570603505d08580f2716775913454e4b7a7c7d7f687c2c4b37b1b6666b flags: 0 RecentlyUsedSceneGuid-1: - value: 535552075c510a595b5f557040770e484e164d792d7d75657d791e62b4e4366b + value: 5403560050570a5a08085523137709114e15492e7c7f74677e2f4c61b0b3633e flags: 0 RecentlyUsedSceneGuid-2: - value: 50030c075306580b5f5b5d2645775d49434e48797e717e682f7b1f65e3b46c68 + value: 0700575604020d0a5c0a0a2643770d45134f487e74782031287d1f65b7b4623b flags: 0 RecentlyUsedSceneGuid-3: - value: 0503575f5c57085954560d2447775e4513151e7c292c2035787f4b60b4e23760 + value: 535552075c510a595b5f557040770e484e164d792d7d75657d791e62b4e4366b flags: 0 RecentlyUsedSceneGuid-4: - value: 5702075052030b0e5458087142770745104f4a7d747d72667e2d4d36b2b8676f + value: 550350030051080c080c0d21437759124716197b792977697a2b4936e6e26c3d flags: 0 RecentlyUsedSceneGuid-5: - value: 525255535d0c500f5f0b587115775c1440161b732d7c2060747f1936e6b06639 + value: 0104025352005d0f0e0d0d2741775c12401519287c297167282a1935b1b13269 flags: 0 RecentlyUsedSceneGuid-6: - value: 5705040755540d0b5c5f547b417707134216487d7b707e6529714c6be6e33169 + value: 5409035450035e0e0c5d5a7a13770a40454e4f722f7f24347e2d1f30b0b76360 flags: 0 RecentlyUsedSceneGuid-7: - value: 5b575500010c51595a5b097b12770b15134f1a797b2d22367b2f4c32e6e3306d + value: 5309035757065a0a54575f7216265c4444151d28792e72627d2f1935bbb8673a flags: 0 RecentlyUsedSceneGuid-8: value: 07060c5454040c0a545b547240700a441216417e7f2e7268752c4966b4b0663d