# Change Log
All notable changes to “Obi - Advanced ropes for Unity” will be documented in this file.

## [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.