v0.14.1
Library:
Changes:
-The library now adheres more closely to the .NET naming conventions.
-EntityEventManager now supports multiple visible events rather than a
dozen addEventHook overloads. Formerly immediate-suffixed events
are now present tense (ing) while deferred events are past tense (ed).
-Vehicle wheel shape UpdateWorldTransform now public.
-Improved Box raycast special case.
-ThreadManagers now use Action<object> over custom ThreadTask.
Bug Fixes:
-MPR-based methods should no longer ever enter an infinite loop due to
severe numerical instability.
-Fixed a thread safety problem with deferred events.
-Kinematic entities with angular velocity now work properly when RK4
integration is on.
-Fixed an issue in the CompoundBody ray test.
-Lowered memory overhead associated with TwistFriction.
-ParallelLoopWorkers will now properly use initialization data.
v0.14.1
Demos:
Changes:
-.NETized names.
v0.14.0
Library:
Additions:
-Rewritten ThreadManager system. New IThreadManager interface
implemented by multiple options. PC defaults to
SpecializedThreadManager and Xbox360 defaults to ThreadTaskManager.
XNA 4.0 version supports experimental TPL-based version on PC.
-Resource pool system rewritten for speedier access and more control
over resource allocation in individual object pools.
Changes:
-Changing a velocity motor's goal now wakes up the involved entities.
-Updateables' end of frame stages are now given the time since the
previous frame as opposed to the timestep duration.
Bug Fixes:
-The Box-box special case should no longer occasionally create floating
ghost contacts.
-PersistentUniformGrid.getEntities should now work properly with
BoundingSpheres.
v0.13.0
Library:
Additions:
-Paths and path following helper classes added (BEPUphysics.Paths and
BEPUphysics.Paths.PathFollowing namespaces).
-Exposed Constraint jacobians and mass matrices.
-Relative velocity property added to constraints.
-Added ForceField "shape" concept and cleaned up ForceField system.
-Exposed space write/read buffer management through
Space.forceWriteBufferFlush/forceBufferedStateUpdate.
-Joint limits now have a isLimitActive property which is true when the
constraint's configuration requires that the limit exert forces.
Changes:
-Removed ForceField child classes from the engine, cleaned them up, and
put them into the demos as open-source samples.
-Cleaned up the DetectorVolume.
-Entity.computeBoundingBox renamed to forceBoundingBoxRefit.
-Default entity angular damping increased.
-Removed Space.getContacts().
-Cleaned up and moved the Explosion class into the demos.
-SolverGroup child classes that combine multiple Constraints
(SwivelHingeJoint, RevoluteJoint, etc.) can now take null for a
connection parameter like Constraints.
-TriangleBoundingVolumeHierarchyNodes are no longer a nested type.
-Removed timeScale and timeSinceLastFrame parameters from Updateable
update methods.
-Setting Entity.isActive will now early-out, saving some time.
Bug Fixes:
-Vehicle drive force should now be aligned with the wheel forward
direction. WARNING: This will affect existing vehicles and require
retweaking.
-Fixed a problem where vehicle steering was affected by the support
slope.
-Removed references to an internal method from the Entity.isActive
documentation.
-SolverGroups now internally manage kinematic involved entities
correctly.
-Removing a SolverUpdateable when an involved entity does not belong to
a space should no cause an exception.
-Removing something from the space which is indirectly connected to
entities that aren't a part of the space should no longer cause an
exception.
-SingleEntityAngularMotor should now properly seek goal positions in
servo mode.
-AngularMotor should now properly seek goal positions in servo mode.
-Removed obsolete versions of the RevoluteLimit.
v0.13.0
Demos:
Additions:
-Added Path Following demo, replacing old Ball Pit demo.
-ForceField child classes added to sample code.
-Explosion class added to sample code.
Changes:
-Removed arbitrary jump delay on character controller
-Vehicle wheels now turn smoothly on Windows
Bug Fixes:
-Adjusted angular velocity clamping values on the Buoyancy demo to
prevent some odd behavior.
v0.12.1
Library:
Changes:
-The box-box special case collision detection system has been rewritten
from scratch for performance and stability.
-The RevoluteMotor's basisA property has been renamed to just 'basis'
due to it being the only basis used by the constraint.
-The RevoluteJoint and SwivelHingeJoint now set up the motor bases
consistently with the associated limit.
-RevoluteLimit's freeAxis parameter renamed to limitedAxis.
-Toolbox.getClosestPointsBetweenSegments no longer returns the squared
distance between the points.
Bug Fixes:
-Removing a StaticTriangleGroup from a space will no longer leave trash
triangles behind.
-Filled in some missing documentation comments in the EllipseSwingLimit.
v0.12.1
Demos:
Additions:
-BEPUphysicsDrawer project added, separating the rendering code from the
rest of the demos.
-Rearranged demo code so that each demo is in its own file, and allowing
for more per-demo interaction.
Changes:
-Robotic Arm Thingamajig demo is now controllable by user input.
-Cleaned up the code in various areas.
v0.12.0
Library:
Additions:
-Vehicle class rewritten for performance and cleanliness. See
revised VehicleInput class in BEPUphysicsDemos project for an example.
-EllipseSwingLimit added for shoulders and shoulder-like limits.
-RevoluteLimit rewritten for robustness. Can now act as a 1DOF
angular limit (complementing the 1DOF LinearAxisLimit).
-SingleEntityAngularMotor and SingleEntityLinearMotor now provide
velocity and servo-based motion using a interface similar to other
constraints.
Changes:
-AngleLimit renamed to SwingLimit.
-SingleBodyConstraint renamed SingleEntityConstraint.
-Removed some obsolete SingleEntityConstraints.
-MaximumSpeedConstraint split into MaximumAngularVelocityConstraint and
MaximumLinearVelocityConstraint and changed to more closely match other
constraint interfaces.
-Changing a SolverUpdateable's involved entities should now wake up the
involved islands.
-localSpaceInertiaTensor and localSpaceInertiaTensorInverse renamed to
localInertiaTensor and localInertiaTensorInverse.
-Adding constraints involving a dynamic entity to a space before the
entity is added should no longer crash at initialization. The
dynamic entity still needs to be added to the space before a space
update occurs.
-Entity.forceCollisionRuleRecalculation will now remove collision pairs
that turn out to have a CollisionRule of noPair. Additionally,
calling forceCollisionRuleCalculation on a CompoundBody will force a
recalculation on all child collision pairs.
-GrabSpring and UprightConstraint removed. Improved open-source
versions of both added to demos project.
-Default Constraint SpringSettings softened.
Bug Fixes:
-Active kinematic entities should now properly wake up interacting
dynamic entities.
-Compound bodies, simulation islands, and some solver updateables should
play better together now.
-Adding/removing entities from the DynamicBinaryHierarchy should now
properly refit involved bounding boxes.
-JointTransforms should now properly check for orthogonality when
initialized.
-TwistLimit should now properly apply bounciness.
v0.12.0
Demos:
Additions:
-Unfortunate One-Armed Guy simulation added, replacing demo #14.
-Robot Arm Thingamajig simulation added, replacing demo #15.
-GrabSpring added to sample code.
-UprightSpring added to sample code.
Changes:
-VehicleInput now uses the new Vehicle class.
v0.11.0
Library:
Additions:
-The constraint system has been completely overhauled!
* Two-body constraints that have been kept from v0.10.0 have been
significantly optimized.
* Four main classifications for new constraints: Joint, JointLimit,
Motor, and SolverGroup
* Joints are the base form of a constraint. These include:
BallSocketJoint, DistanceJoint, NoRotationJoint,
PointOnLineJoint, PointOnPlaneJoint, RevoluteAngularJoint,
SwivelHingeAngularJoint, TwistJoint
* JointLimits restrict degrees of freedom within given ranges. These
include:
AngleLimit, DistanceLimit, LinearAxisLimit, RevoluteLimit,
TwistLimit
* Motors allow constraints to work towards target velocities or positions.
These include:
AngularMotor, LinearAxisMotor, RevoluteMotor, TwistMotor
* SolverGroups provide an easy method of combining other kinds of joints
into "combo" constraints. These include:
CustomizableSolverGroup (handles an arbitrary set of
SolverUpdateables), LineSliderJoint, PlaneSliderJoint, RevoluteJoint,
SwivelHingeJoint, UniversalJoint, WeldJoint
-Collision response solving system rewritten and optimized.
Central friction is now supported and enabled by default by the
space.simulationSettings.collisionResponse.useCentralFriction field.
-All position-based constraints now support spring settings.
-Custom delegates can now be used to blend properties such as friction
and bounciness using the PropertyBlenders in the space's simulation
collision detection settings.
-Added Matrix2x2, Matrix2x3, Matrix3x2, and Matrix3x3 structs used
internally in the new constraint system.
Changes:
-Multiple fields in the Entity, Space, and CompoundBody have become
properties.
-Multiple lists in the Entity, Space, and CompoundBody are now read-only
collections.
-Removed the Force class and associated framework. A "Thruster"
class is available in the BEPUphysicsDemos source that emulates the
Force class's functionality.
-Removed constraint "breaking" as an explicitly supported feature in
favor of general purpose totalImpulse properties.
-Renamed entity move and moveTo to teleport and teleportTo to clarify
their function.
-Deleted the Entity.rotate method.
-Entity.activate and Entity.deactivate removed; redundant with
Entity.isActive property set.
-Removed dynamic iteration count system to reduce clutter.
-Constraints can now have their connected entities changed after
creation.
-Setting a connection to null connects a constraint to a "world" entity
(a single static entity that belongs to no space).
-discreteMPRGJK is now the default collision detection type
(space.simulationSettings.collisionDetection.collisionDetectionType)
instead of fullyContinuous.
-Default solver iteration count is now 10, down from 15 (space.simulationSettings.collisionResponse.iterations).
This improves performance for most simulations. If more solver
accuracy is needed, try increasing the value back to 15.
Bug Fixes:
-The ThreadManager should now properly dispose of unmanaged resources
when shut down.
-The ThreadManager should no longer be able to cause a deadlock when a
null task (a 'shut down' command) is enqueued alongside other tasks.
v0.11.0
Demos:
Additions:
-Saw Contraption simulation added, replacing demo #7.
-Dogbot simulation added, replacing demo #9.
-Action Figure simulation added, replacing demo #10.
-Cloth Lattice simulation added, replacing demo #22.
-LineDrawer added to efficiently render constraints.
v0.10.5
Library:
Bug Fixes:
-Single body constraints should now work properly when internal
multithreading is enabled.
v0.10.4
Library:
Bug Fixes:
-Various garbage sources plugged up in the DetectorVolume, TriangleMesh
raycast, StaticTriangleGroup raycast, and in entity removal with
entities that are in collision while using multithreading.
v0.10.3
Library:
Bug Fixes:
-TriangleMesh save/load should now work properly.
v0.10.2
Library:
Bug Fixes:
-Sphere-sphere collision detection special case should no longer produce
invalid results.
-An instance of possible write buffer corruption should now be fixed.
-Fixed a problem that could occur occasionally when internal threads
were being disposed of.
-Some initialization members for custom entity types made accessible.
v0.10.1
Library:
Additions:
-The function that calculates the CollisionRule between two entities can
now be changed by setting a BroadPhase's calculateCollisionRuleCallback.
-The CollisionRule that is used when no CollisionRule is specifically
defined between two entities is now configurable using the
Space.simulationSettings.collisionDetection.defaultCollisionRule field.
-A variety of static methods are now available in the CollisionGroup
object to help with defining CollisionRules between groups and sets of
groups.
Changes:
-Entity becomeDynamic and becomeKinematic now automatically switch the
CollisionGroup to the appropriate default CollisionGroup if the entity
was previously using a default CollisionGroup.
-The BroadPhase preUpdate stage is no longer available.
-Entity correctiveLinearVelocity and correctiveAngularVelocity fields
are no longer available.
Bug Fixes:
-Terrain should now properly remove triangles from the space when nearby
entities move too far above or below the surface of the terrain after a
collision.
-Terrain no longer has a collisionFilter field.
-Using certain functions with nested compound bodies should no longer
cause a stack overflow exception.
-Using applyAngularImpulse should no longer crash if the entity does not
belong to a space.
v0.10.0
Library:
Additions:
-Internal multithreading supporting an arbitrary number of threads is
now available.
-The concept of CollisionRules has been added. These determine how
entities interact with other entities using entity-entity specific
relationships, personal settings, and collision groups. Entities,
StaticTriangleGroups, StaticGroups, and Terrains all have collisionRules
which can be modified.
-CollisionPairs now have a collisionRule field and a
manifoldUpdateSetting field which can be changed in the middle of the
CollisionPair's duration that modify the way the collision pair manages
the collision.
-The concept of MotionStates has been added. These contain
information such as position and velocity and can be set and retrieved
using the Entity.motionState and Entity.internalMotionState.
-The Entity.worldTransform and Entity.internalWorldTransform matrix
properties are now available, providing a single matrix representing
position and orientation.
-ResourcePool redesigned into a series of generic subpools. The
static ResourcePool class contains some of the most commonly used types,
while more can be created with the generic ResourceSubPool. On the
PC, these provide automatic thread-specific pooling to avoid lock
contention (for threads which have been added to the pool).
-CompoundBodies now report their children's events.
-CompoundBody now has some new constructors and can be created initially
as kinematic or dynamic.
-Every event type now has an immediate version.
-Events for CollisionPairUpdated, CollisionPairColliding and their
immediate versions have been added.
-Multiple descriptive exceptions added to block invalid input and to
explain internally thrown exceptions.
Changes:
-All entity event information and methods moved into the
Entity.eventManager property.
-Collision events now all give the sender and the 'other' entity as
parameters to the event handler.
-Controller class renamed to CollisionPair.
-More Contact fields, such as normalImpulseTotal and
frictionImpulseTotal, exposed.
-The buffer swap for entity buffered properties is now extremely fast.
-Accessing buffered fields before an entity is a member of a space will
now directly access the internal variables.
-Space.add/remove methods now throw exceptions with invalid input
instead of returning a bool.
-Entity.getExtremePoint is no longer a virtual method.
-Entity.isPhysicallySimulated is now a property named isDynamic.
-TriangleMeshes are now a bit faster to access and refit.
-Changing the TriangleMesh.worldMatrix property now automatically
triggers a refit.
-Int3 is now a struct.
-Split impulse position correction removed.
-Terrain now only tries to rescue entities which it can collide with.
-Space.simulationSettings has been split into various categories.
-FluidVolume is now a bit faster.
-PersistentUniformGrid broadphase optimized.
-Removed UniformGrid broadphase.
-Entity.rotate, Entity.applyQuaternion, and Entity.moveTo now all
consistently offer the ability to optionally activate the modified
entity.
-On the PC, BroadPhases now use a ReaderWriterLockSlim to allow multiple
simultaneous queries. On the XBOX360, no locking takes place by
default in raycasts, though a lockerBroadPhaseUpdating object is
available and locked against during the broadphase update.
-Calling move on a CompoundBody's child will no longer move the
CompoundBody.
-The children of a CompoundBody should now have consistent isActive
states.
-Entity.isSubBodyOfCompound field changed to Entity.isCompoundBodyChild
read only property.
-Entity.compoundBody is now a read only property.
-Entity.makePhysical is now named Entity.becomeDynamic, and
Entity.makeNonDynamic is now named Entity.becomeKinematic.
-'Junk'/error floats are now -float.MaxValue instead of
float.NegativeInfinity.
Bug Fixes:
-DynamicBinaryHierarchy should no longer throw exceptions when no
entities are in the space.
-DynamicBinaryHierarchy memory leak plugged.
-Some redundant DynamicBinaryHierarchy logic fixed, leading to a
speedup.
-Allocations caused by StaticTriangleGroup, FluidVolume, StaticGroup,
and terrain have been reduced significantly.
-StaticGroup boundingBox should now be correct.
-The box-sphere, triangle-sphere, and sphere-sphere each had times when
a collision could have no contacts. These have been fixed.
-Terrain.tag and StaticGroup.tag now work like the
StaticTriangleGroup.tag.
-Terrain.rayCast should not longer fail when the ray's origin is outside
the horizontal area of the terrain.
-CompoundBody inertia tensor calculation should now be correct.
-ForceFields with CompoundBody fieldShapes should now work correctly.
-TriangleMesh rayCast should no longer allocate excessively.
-Adding events to CompoundBody children prior to the parent's addition
to the space should no longer cause a problem.
-Entity maximumRadius is now correctly based on the distance from the
center of mass to the furthest point. A new entity property,
maximumRadiusFromCenterPosition, is also available.
-When an Entity's centerOfMassOffset changes, its maximumRadius is now
properly recalculated.
-Terrain's bounding box now properly includes the rescue depth.
v0.10.0
Demos:
Additions:
-Now includes the new multithreading system.
-Two new character controller versions added, replacing the old
versions.
Changes:
-Event demo made a bit safer.
-Old code including Entity.isTangible/Entity.isDetector changed to the
new CollisionRule system.
-The playground demo (#28) has had its BEPUbox cubes changed to regular
cubes.
v0.9.0
Library
Additions:
-The
fancy and fast DynamicBinaryHierarchy collision BroadPhase has been
added.
-TriangleMesh now supports saving and loading operations (static
TriangleMesh.save and TriangleMesh.load).
-StaticTriangleGroup now has its own static
getVerticesAndIndicesFromModel.
-New organizational namespaces: BroadPhases, DataStructures,
Entities, ForceFields, Constraints, and Vehicle.
-Space.simulationSettings.contactInvalidationLengthSquared parameter
added, defining the maximum squared length that general convex-convex
contacts can diverge from their original offsets before being removed.
Changes:
-General convex-convex collision detection contact cache
refreshing significantly improved. Feels a lot better!
-Setting a CompoundBody's bounciness, dynamicFriction, staticFriction,
isTangible, and isDetector fields now set all childrens' values
accordingly.
-CompoundBody subbodies now consistently use their own properties (such
as their isIntangible flag) when colliding rather than their parents.
-TriangleMesh's static getVerticesAndIndicesFromModel should now be
significantly more robust.
-Improved thread safety of StaticTriangleGroup and TriangleMesh queries.
-SimulationIslands involving huge numbers of entities now significantly
faster.
-Bouncing objects are now a bit more stable.
-Linear continuous collision detection (space.simulationSettings.collisionDetectionType
= CollisionDetectionType.linearContinuous) now uses a faster
conservative advancement system.
-StaticTriangleGroups now use a TriangleMesh.
-Simplified the StaticTriangleGroup and Terrain constructors.
-Added tunable caps to the number of inactive triangles removed from the
space from Terrains and StaticTriangleGroups.
-ConvexHulls now create a copy of the points list given to them in the
constructor rather than gobbling the instance.
-Entity.isActive is now a property which calls Entity.activate/Entity.deactivate
appropriately when set.
-Inactive objects now use less CPU time.
-Space.simulationSettings.defaultAllowedPenetration is now .005f, down
from .025.
-Toolbox.getConvexHull now has a more reliable initialization procedure
and deals with near-degenerate geometry better.
-Renamed Toolbox.areObjectsCollidingCA methods to
Toolbox.areSweptObjectsCollidingCA.
-The default parameterless Space constructor now uses the
DynamicBinaryHierarchy broadphase.
Bug Fixes:
-ConvexHull.getExtremePoint will now properly take into account the
given position, fixing an issue with ConvexHulls and continuous
collision detection.
-Adding entities that already have constraints applied to them to a
space should now properly create simulation islands.
-Entity.makePhysical and Entity.makeNonDynamic should no longer throw an
exception when the entity does not belong to a space.
-The inertia tensor of convex hulls should now be correct.
-Kinematic objects with no velocity should now have their buffered
states updated appropriately.
-Fixed an issue where a detector volume would decide a point was outside
a volume due to a raycast hitting right between multiple triangles.
-When the box-box special case collision detection system is on, the
bounding box is expanded slightly to account for the larger margins,
preventing a problem where the bounding box could be smaller than the
box itself.
-Using Entity.activate and Entity.deactivate will
no longer throw an exception when the entity does not yet belong to a
space.
-Setting Entity.allowedPenetration or Entity.collisionMargin will no
longer throw an exception when the entity does not yet belong to a
space.
-An object going to sleep will still have its buffered states updated.
-CompoundBody subbodies now properly receive the default
allowedPenetration when their parent is added to the space if the parent
does not have an allowedPenetration that is defined above zero.
Demos
Additions:
-The time the engine update took in milliseconds is now displayed
below the FPS.
Changes:
-Updated the StaticTriangleGroup-involving demos to use the new
TriangleMesh based system.
-Changed up and boosted specularity.
_____
v0.8.0
Library
Additions:
-The new DetectorVolume allows for query and event-driven intersection
tests against arbitrary closed triangle meshes. See demo #32.
-New TriangleMesh and TriangleBoundingVolumeHierarchy provide a base for
components needing accelerated queries against arbitrary triangle
meshes.
-StaticTriangleGroup.move and StaticTriangleGroup.rotate have been
added.
-A new method, CompoundBody.rayTest, can be used to cast a ray against a
specific compound body and retrieve all hit subbodies.
-A new stage of updating, updateBeforeCollisionDetection, is available
for Updateables. This takes place after broad phase collision pair
detection, and before narrow phase collision detection.
-SimulationSettings.bouncinessVelocityThreshold can now be used to
adjust the minimum velocity required to trigger a bounce.
-Entity.removeAllEvents() can be used to clear out all events attached
to an entity.
-BroadPhase now includes a lockerBroadPhaseUpdating synchronization
object.
Changes:
-CompoundBodies can now be made kinematic using the
makeNonDynamic method.
-Entities with isDetector set to true no longer use a
velocity-based early out in collision detection.
-Box width/length/height/halfWidth/halfLength/halfHeight fields are now
all properties. Changing one changes its associated field
appropriately.
-Space.remove methods now return a bool representing whether or not the
object was present in the space.
-Space.add methods no longer allow an object belonging to a space to be
added.
-Events can be now added and removed from entities prior to the entity
belonging to a space.
-Triangles spawned by a StaticTriangleGroup will now have the
StaticTriangleGroup's tag.
-Space.getBroadPhase and Space.setBroadPhase replaced by
Space.broadPhase property.
-Changing StaticTriangleGroup.worldMatrix now updates the list of active
triangles.
-Adjusting the velocity or momentum of an entity using the
velocity/momentum properties now activates it.
-CompoundBody.subBodies, CompoundBody.subBodyLocalOffsets, and
CompoundBody.subBodyLocalRotations are now public fields.
-Parameterless Space constructor now uses a grid size 10
PersistentUniformGrid for a broad phase instead of brute force.
-Simulation islands undergoing externally triggered
activation/deactivation are now more thread-safe.
-PersistentUniformGrid now takes out a lock on the
lockerBroadPhaseUpdating object during operation, ensuring thread safety
for broadphase query based methods.
-Constraint connections, parents, and space fields made into read-only
properties.
-SingleBodyConstraint entity and space fields made into read-only
properties.
-CombinedUpdateable space field made into a read-only property.
-Updateable.space field made into a read-only property.
-SolverUpdateable.space field made into a read-only property.
-CompoundBody.addBody no longer allows entities already belonging to a
compound body to be added.
-CompoundBody.removeBody now returns a bool representing whether or not
the entity was present in the body.
Bug Fixes:
-StaticTriangleGroup.rayCast, Terrain.rayCast, and
StaticGroup.rayCast should now work properly.
-StaticTriangleGroups and Terrains with margins should properly detect
entities within their margins.
-StaticTriangleGroups and Terrains will no longer use the default margin
when a margin of 0 is specified.
-CompoundBody subbodies now have their buffered states updated.
-StaticTriangleGroups, Terrains, and StaticGroups moved to the new
updateBeforeCollisionDetection stage to work correctly with continuous
collision detection.
-Entity.makeNonDynamic/makePhysical will no longer crash for entities
which do not belong to a space.
-Space.remove(Entity) will no longer throw an exception if the entity
isn't a member of the space.
-The sphere-triangle special case now takes into account the triangle's
margin correctly.
-All class documentation should now properly appear in intellisense.
-makePhysical/makeNonDynamic should now work properly for ConvexHulls,
MinkowskiSums, and WrappedBodies.
-Removing entities from a CompoundBody no longer triggers an exception
if the CompoundBody does not belong to a space.
-Using Entity.activate or Entity.deactive no longer throws exceptions on
kinematic entities.
Demos
Additions:
-"Detector
Volume" demo added to showcase the... DetectorVolume.
Changes:
-EntityDrawer.addEntity and EntityDrawer.addDisplayObject
can now be given a texture index.
_____
v0.7.0
Library
Additions:
-Collision detection
special cases added for sphere-sphere, sphere-box, sphere-triangle, and
box-box.
-Buffered states for momentum and velocity, along with improvements to
the previously added buffered states, now provide thread safe entity
access.
-Common engine access points now thread safe.
-Synchronization objects are now available to keep code from interfering
with the engine's internal computations.
-Compound bodies now use an internal bounding volume hierarchy to
accelerate collision detection, allowing for much more complicated
concave bodies.
-Two different kinds of friction now available; dynamic and static.
-Event hooks for when entities are updated are now available.
-Slightly higher quality contact manifolds can once again be used (at a
cost) by setting Space.simulationSettings.useOneShotManifolds to true.
Changes:
-Extensive optimizations to all performance critical sections
of the engine have been made, boosting performance considerably.
-The inertia tensor fields of entities have been replaced with
properties Entity.localSpaceInertiaTensor and
Entity.localSpaceInertiaTensorInverse.
-Entities with isDetector enabled will now still create controllers and
contacts even if both entities in the collision are nondynamic.
-ConvexPolyhedron entity type and its associated helper types removed;
ConvexHull used as its replacement.
-Various methods in Toolbox removed, mostly involving
PolyhedronTriangles.
-PrimitiveToolbox removed.
Bug Fixes:
-Entity.makePhysical should no longer cause issues when the entity
is colliding with static geometry.
-Toolbox.getConvexHull should no longer occasionally miss hull points.
-Vehicle
wheels no longer attempt to use intangible or detector entities as
supports.
-Large compound bodies should no longer cause severe jerky performance.
-High angular velocities on irregular bodies should now work much better
in all cases.
-Dynamic triangles should no longer throw exceptions during construction
given odd dimensions.
Demos
Changes:
-"Lots o' Cubes" is now "Lots o' Spheres" and has many spheres in
lieu of many cubes.
-"Tetrahedra" is now "Colosseum," a circular tower simulation.
-DisplayConvexPolyhedron removed.
-DisplayModel now uses entity CenterPosition.
_____
v0.6.2
Library
Additions:
-Springs
can now be used in either the traditional force = constant * compression
mode or the velocity mode.
Changes:
-Toolbox.findPenetrationDepth is now more robust.
-Springs, vehicle suspension, and the grab constraint all now use frame
rate independent forces.
-Required forces for joint breakage should now be more consistent.
-A small arbitrary delay before sleeping has been removed, slightly
increasing the rest speed.
-UprightConstraint is now frame rate independent and works on angular
velocity instead of torque.
Bug Fixes:
-Raycasts against PersistentUniformGrid, UniformGrid, StaticGroup,
and Terrain should no longer cause occasional momentary hangs.
-Toolbox.getDistanceBetweenObjects should no longer cause occasional
freezes.
-CompoundBody subbodies now receive the default margin and allowed
penetration if they are added to the space with 0 margin/allowed
penetration.
-DistanceConstraint now properly breaks when force exceeds its limit in
either direction.
-When entities are removed or constraints are added or removed, the
associated simulation island is now activated, preventing floating
resting objects.
Demos
Additions:
-The
CharacterController is now included, offering more robust character
physics.
-Simulation #31, "Earthquake!" has been added.
v0.6.1
Library
Additions:
-A new entry in
Space.simulationSettings,
useInternalTimeStepping, now allows for smooth, consistent
simulation given variable framerate.
-The CombinedUpdateable type is now available,
providing the abilities of both the SolverUpdateable and Updateable.
Changes:
-Compound bodies now behave slightly better with continuous collision
detection.
-Velocity clamping is now based on a time below the threshold rather
than framecount, both of which can be changed in
Space.simulationSettings.
-Updateables now have three separate update methods; one runs during
force integration near the beginning of the frame (between broadphase
and collision detection), another at the end of each update, and one at
the very end of the frame as managed by the engine. Usually the
end-of-update and end-of-frame methods will run essentially side by
side, but if internal timestepping is used the end-of-frame update only
runs once per external Space.update call while the end-of-update method
will run as many times as the engine internally steps.
-Contact caching heuristic improved.
-A few more fields and properties have been exposed in the Wheel class.
-Entity.rotationMatrix changed to Entity.orientationMatrix.
-centerPosition, centerOfMass, orientationQuaternion, and
orientationMatrix are now all buffered states which are updated at the
end of the frame from the internal values. Additionally, these
states include an interpolation component when useInternalTimeStepping
is enabled. The raw states can be accessed through
internalCenterPosition, internalCenterOfMass,
internalOrientationQuaternion, and internalOrientationMatrix.
-orientationMatrix is now a get/set property instead of the previously
get-only rotationMatrix property.
Bug Fixes:
-PersistentUniformGrid.removeEntity will no longer occasionally
leave out of date entries in the grid.
-Nested compound bodies and removing entities from compound bodies now
works properly.
Demos
Bug Fixes:
-Wrapped bodies will no longer cause a crash in the display system
when using CPU instancing.
v0.6.0
Library
Additions:
-New collision detection
method, enabling faster and more robust detection and contact
generation, especially during deep interpenetration.
-Improved continuous collision detection and multiple collision
detection methods available in a space's SimulationSettings.
-Multiple collision events are now available in entities.
-New 'wrapped' body entity type available. Forms an implicit
convex hull around a set of entities.
-New DistanceConstraint, DistanceRangeConstraint, and Springs!
-StaticTriangleGroup now has additional raycasting methods that
identify the indices of vertices composing triangles hit by the ray.
-Position correction velocity can now be capped.
-Triangles can now use their own normals in lieu of proper contact
normals in a collision. This can be enabled for smoother sliding
on terrains and static triangle groups.
-Entities now have a new centerOfMass property that can be modified to
change the rotational behavior of objects.
-Different friction/bounciness combination methods are now available in
a space's SimulationSettings.
Changes:
-All simulation settings now reside in the SimulationSettings class.
-An entity's linearMomentum and angularMomentum are now properties and
update velocities when changed.
-Joints can now have null passed in their constructor as a connection
entity; the joint will connect to a special hidden entity at the anchor
point.
-Compound-prefixed methods have been removed for the most part from the
Entity class; getParent() replaces their functionality.
-Removed one-shot manifolds due to new detection methods; may return
later.
-Fluid volumes now produce more consistent floating behavior.
-Damping for entities and fluids now properly takes the specified
fraction of momentum away per second.
-Minkowski Sum and CompoundBody inertia tensor calculations sped up
significantly.
-Slight runtime memory allocation reduction related to
StaticTriangleGroups.
-Controller collision detection and solver methods are now public.
Bug Fixes:
-Joints now correctly break according to total impulse, not a
per-iteration corrective impulse.
-Entity's angularVelocity property now properly returns angular
velocity, not linear velocity.
-Terrain's single hit raycast method now works properly at the edge of
the terrain.
-CompoundBodies with differently oriented subbodies should now maintain
their correct orientations.
-Large bodies should no longer cause issues with terrain triangle
generation.
-Contacts no longer keep their former accumulated impulses when pulled
through the ResourcePool.
-MaximumSpeedConstraint should no longer cause periodic crashes.
-FluidVolume constructor now properly sets dimension sample count.
-Force.isActive now actually does something.
Demos
Additions:
-Added in a wrapped body
class to the renderer and plopped a few down in the "Fancy Shapes" demo.
-New "Fish in a Barrel" demo, showcasing a simple usage of the new event
system.
-Added
examples of the Spring, DistanceConstraint, and DistanceRangeConstraint
to the "More Constraints" demo.
Changes:
-Changed static-connected joints in "More Constraints" to connect to
null entities.
-Removed the double-dynamic point on line constraint in the "More
Constraints" demo.
Bug Fixes:
-CompoundBodies
should now be oriented correctly when subbodies are oriented differently
during initialization.
-Removed Jenga's DynamicIterationCount of 200-300 iterations, reducing
it to the default 15 and vastly improving performance.
-Specular highlights should no longer cause weird little ghost blobs.
_____
v0.5.2
Library
Additions:
-Added two new shape types, the ConvexHull
and MinkowskiSum.
-Vehicles can now use ConvexCastWheels
for smoother contact.
Changes:
-Entity tags are now just objects instead of Dictionaries.
Bug Fixes:
-Broadphase's isValidPair returned
to previous ordering, providing extra speed with static geometry.
-Hit locations
returned by the swept areObjectsColliding method are
now more accurate and no longer fails in certain situations.
Demos
Additions:
-New display objects for MinkowskiSums
and ConvexHulls.
-Extra comments now cover some details in the
simulation setups.
v0.5.1
Library
Additions:
-StaticTriangleGroups can now be
built based on a full model, or individual meshes (with or without
parent bone transforms).
-StaticTriangleGroups can now output a list of
worldspace vertex positions.
Bug Fixes:
-Moving
entities no longer have hash code issues.
-The constructor for compound bodies which takes a list of entities
should now function correctly.
Demos
Additions:
-Rendering in wireframe mode can now be toggled.
Changes:
-DisplayModel now correctly transforms individual
meshes by parent bones.
Bug Fixes:
-Highly
triangulated objects are now properly textured in CPU instancing mode.
v0.5.0
Library
Additions:
-Optimized StaticTriangleGroup added.
-Framework for space-updated types, solver-updated types, single
body constraints, and force fields added.
-PushField, Tornado, GravitationalField added.
-MaximumSpeedConstraint,
RotationalAxisConstraint, UprightConstraint,
and GrabConstraint added.
-Buoyancy support and associated entity data (density, volume)
added.
-New deactivation system based on simulation islands added.
-Efficient ray casts against the entire environment and parts now
available.
-Vehicles based on ray casts are now available.
-Collisions between entities can now be filtered using the Entity.collisionFilter bitmask and the
Entity.nonCollidableEntities list.
-RK4 angular integration is now available as an option (useRK4AngularIntegration
in Space).
-Entities can now have a set of associated tags for storing information
locally.
-New interfaces, RayCastableContainer and
RayCastableContainerWithoutMargins, denote classes containing
ray-intersectable contents which can be tested against.
-Preexisting quad formats for Terrain within the QuadFormats
class now available.
Changes:
-Massive reduction in runtime memory allocation.
-Numerous field, class, and function name changes:
PhysicallySimulated interface removed, entities
can switch between nondynamic and dynamic without being recreated
"Phys" and "Static" prefixes removed, entity types are simply
"Box," "Cylinder," etc.
Entity now contains all information necessary for
dynamic and nondynamic objects.
Revised access permission for and renamed rotationMatrix
and orientationQuaternion.
Exposed inertia tensor fields for modification.
Previously "ineffective" changes of derived fields now have the
expected effect (changing velocity of a dynamic object, setting the
orientation quaternion, etc.).
Toolbox.rayCast cleans up and replaces the old ray
casting methods.
Space.addEntity, Space.addConstraint
and other add___ methods are now simply Space.add(object
to add).
Cleaned up Entity.compound____ methods and
clarified their use in XML documentation.
-Cleaned up the PrimitiveToolbox, removing many
redundant construction methods in favor of always using their identical
constructor counterparts.
-Significant speedup in grid-based broadphases, UniformGrid
and PersistentUniformGrid.
-Entity.force and Entity.torque now
represent all changes of linear momentum and angular momentum during a
frame.
-Collision response position correction impulse 'overestimates' less
frequently.
-Adjusted swept collision detection (Toolbox.areObjectsColliding)
to be more intuitive and use forward swept motion instead of a backwards
velocity.
-XML documentation has been filled in for all public methods and fields.
Bug Fixes:
-GJK-based ray casts should no longer enter infinite loops.
-Split Impulse position correction method (useSplitImpulsePositionCorrection)
now appropriately uses angular correction.
-Compound bodies under split impulse position correction no longer cause
sporadic crashes.
-Certain edges of terrain no longer let objects fall through.
v0.5.0
Demos
Additions:
-Source for Xbox360 demos now available.
-Example vehicle input methods added. Press V to jump in!
-Character controller demo based on dynamic entity and associated
input methods added. Press C to walk around!
-"Grabber" added; right click to pull objects around.
-New display type, DisplayModel, for displaying loaded models.
-New "Buoyancy" demo.
-New "Gravitational Fields" demo.
-New "Static Triangle Group" demo.
-New demo showing off collision filtering, replacing the old "Double
Ramp Slam" demo.
Changes:
-Camera can now enter a "chase camera" mode which follows an entity,
used by default in vehicles.
-Screen text minimized, controls and information put into a temporary
menu overlay.
Bug Fixes:
-Fixed a crash that could occur when removing display objects
from the entity drawer.
-Fixed a problem which would cause mismatched graphics when removing
display objects from the entity drawer.
v0.4.1
Demos
Changes:
-Backface culling is now enabled.
-DisplayTriangles now use two triangles for representation.
-Display object normals are now consistent.
Bug Fixes:
-Vertex buffers are manually disposed of after starting a new
simulation, preventing frequent OutOfVideoMemoryExceptions on some
cards.
v0.4.0
Library
Additions:
-Continuous collision detection is now available.
-Spatial partitioning methods are now available; try out PersistentUniformGrid, its per-frame recalculated sibling
UniformGrid, and the old BruteForce
method.
Other custom broad phases can be derived from the BroadPhase
class.
-Terrain can now be created from heightmaps.
Supports runtime deformation.
-Large numbers of static objects can now be added to
StaticGroups which dynamically add and remove static entities
from the space as needed, increasing performance greatly.
-New Capsule and Box primitives.
-Explosions can now be created and detonated.
-One-shot manifolds are now available for objects, increasing stability.
-Added an early out mechanism for collision detection, drastically
increasing performance in stable simulations.
-Entities now can be rotated given a velocity by using the
rotate(Vector3 w) function.
-Entities may now have unique margins and allowed penetration depths.
The defaults are stored within (Space).defaultMargin
and (Space).defaultAllowedPenetration, which default to
.04f and .025f respectively.
Changes:
-Collision detection optimized and tuned.
-linearVelocityClamping and
angularVelocityClamping now both default to .01f.
-Center of masses for cones are now properly one fourth the way up from
the base, rather than halfway up.
-Entities are no longer activated by neighboring entities if they share
no controller.
-Coefficient of restitution within a collision is now calculated by
using the maximum bounciness of either involved body.
-Disabled the formerly added bisection deep contact resolution
method due to improvements in the related systems, marginally improving
performance.
Bug Fixes:
-An errant multiplier causing clamping to fail at high framerates has
been removed.
-A formerly required but now troublesome negation has been removed from
Toolbox.getSegmentPlaneIntersection().
v0.4.0
Demos
Additions:
-All display systems formerly contained in the BEPUphysics.dll are
now open source within the demos project.
-For SM3.0 enabled cards, shader instancing is now used for rendering.
For others, CPU instancing is used.
-"Broad Phase Stress Test" pushes the provided broad phase to its
limits with thousands of objects.
-"Ball Pit:" shove boxes into a sphere-filled pit, realistically
simulating the fate of many a child.
-"Terrain" showcases the new terrain system on a sine-based heightmap.
-"Bowl o' Cubes" showcases cubes, in a bowl.
-Rendering now supports textures, though default texture coordinates may
be suboptimal for any detailed texture.
Changes:
-Graphics for cones, spheres, cylinders, and capsules now use
a much greater level of tessellation. The number of faces per
object can be adjusted easily within the source.
-By default, demos now run with a non-fixed game timestep with a
60hz physics update rate.
-"Ramp Series" has been replaced.
-"Small Heightmap" has been replaced.
Bug Fixes:
-Resolved an occasional flickering due to UI drawing.
v0.3.0
Library
Additions:
-BallSocketJoint and PointOnLineJoint added, with
maximum force limits available.
-Performance increased substantially with impulse short circuiting
method.
-Dynamic iteration counts now allow for adaptive collision response
quality depending on the current performance of the game.
To use it, call activateDynamicIterationCount(float desiredFPS, int
minIterations, int maxIterations) or
deactivateDynamicIterationCount() to turn it off.
-Artifacts caused by deep contact resolution reduced with the
addition of a secondary bisection algorithm.
Changes:
-Default angular velocity clamping changed to .02.
-Clarified Toolbox.getSegmentPlaneIntersection parameters.
Bug Fixes:
-Entities are now forced awake when applyImpulse is
called.
-Deep contact now forces objects awake, preventing occasional
inappropriate freezing associated with objects being shoved deeply into
the ground.
-move(Vector3 v) and moveTo(Vector3 v) now wake up the
entity.
-Objects floating in space can now fall asleep appropriately.
v0.3.0
Demos
Additions:
-'Bridge' simulation added; 200 cubes in a chain form a long curve.
-'More Constraints' simulation added; shows breakable and non-breakable
point on line joints, ball and socket joints, emulated sliders/prismatic
joints, welds, and hinges.
Changes:
-Changed line rendering to use vertex coloring.
-'Simple Pendulum' is now 'Multipendulum.'
-Demo background color is now dark gray.
-Ground size changed on stacking, tetrahedra, and jenga demos.
-Masses changed on tetrahedra and lots o' cubes demos.
-Change made to simulation switching via keyboard input; now more easily
supports more without dozens of special cases.
v0.2.0
Library
Additions:
-Deactivation/activation for objects added; should improve
performance under normal circumstances considerably.
-New ray casting functions added; Toolbox.findRayEntityHit
and Toolbox.findFiniteRayEntityHit.
-Compound bodies can now be nested within other compound bodies.
-All physically simulated objects now have the applyImpulse
method.
-Space.update may now be provided either a float representing the
time between frames (regardless of performance) or the GameTime object.
-Forces may now be put on a timer for expiration.
Changes:
-Velocity clamping will no longer inappropriately freeze objects
with momentary low velocity. The default velocity clamping values
have been increased accordingly, allowing objects to discontinue motion
more robustly.
-Inconsistent parameter order for position in PrimitiveToolbox
revised. Position vector is now first parameter in all cases.
-Removed redundant PrimitiveToolbox functionality.
-The default value of angular damping on objects has been increased.
-Various low-level, externally unhelpful methods removed from public
visibility.
-DisplayObject changed into an abstract class from an interface.
-Everything has become a little more colorful.
Bug Fixes:
-An error which would cause compound bodies to sometimes teleport has
been resolved.
-Compound bodies will now function properly with joints.
-Graphics of Triangles and ConvexPolyhedrons should no
longer become desynchronized from their collision mesh when rotated with
the applyQuaternion method.
v0.2.0
Demos
Additions:
-New spaceship simulation, showcasing a practical object created
using compound bodies with a force applied.
-Obligatory Jenga simulation added; see how many you can knock out with
your sphere launcher before it falls!
-Deactivation stress test added; 420 objects fall in sequence and fall
asleep.
Changes:
-Premade bowling ball removed from bowling simulation.
-Camera controls for ascent and descent changed from W/X to A/Z.
v0.1.0
Library:
Additions:
-New CompoundBody type, composed of multiple PhysicallySimulated types.
* New properties compoundPosition, compoundLinearVelocity, and
compoundAngularVelocity for referencing an object's compound body's
properties if existent. If no compound body is available, the
current object's data is referenced.
Changes:
-velocityClamping split into linear and angular components with
default values .006f for linearVelocityClamping and .0001f for
angularVelocityClamping.
-Default Space.iteration count increased to 10.
Bug Fixes:
-An infinite loop when running without debugging with ConvexPolyhedrons
should no longer occur.
-Degenerate GJK simplices will no longer trigger NaN exceptions.
v0.1.0
Demos:
Additions:
-High-mass/velocity sphere launchable by clicking.
-New display options for bounding boxes of objects, contacts,
joints, and screen font.
-A camera class has been implemented for easier simulation
observation.
v0.0.1
Initial release.
|