Difference between revisions of "What's Changed With Havok4"

From Second Life Wiki
Jump to navigation Jump to search
 
(7 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{multi-lang}}
===Interpenetration Resolution===
===Interpenetration Resolution===
When objects collide, they can end up "interpenetrating", in a situation where the two objects are "attempting to occupy the same space". Havok4 resolves interpenetration scenarios in a different and generally better way than Havok1.  
When objects collide, they can end up "interpenetrating", in a situation where the two objects are "attempting to occupy the same space". Havok4 resolves interpenetration scenarios in a different and generally better way than Havok1.  
* Interpenetration resolution is enabled for all dynamic objects
* Interpenetration resolution is enabled for all dynamic objects
** In Havok 1 dynamic objects that started penetrating would stop colliding until they ceased to penetrate
** In Havok1 dynamic objects that started penetrating would stop colliding until they ceased to penetrate
** In Havok 4 dynamic objects will be pushed apart when penetrating
** In Havok4 dynamic objects will be pushed apart when penetrating


===Volume Detection===
===Volume Detection===
Line 9: Line 10:
* Uniformly scaled spheres are implicit (roll like spheres instead of faceted blocks)
* Uniformly scaled spheres are implicit (roll like spheres instead of faceted blocks)
* Shapes are quantized
* Shapes are quantized
** The colliding shape may differ slightly from the aparent shape
** The colliding shape may differ slightly from the apparent shape
** The errors should be smaller than the collision tolerance threshold, and thus not noticeable
** The errors should be smaller than the collision tolerance threshold, and thus not noticeable
** Shape errors would be most noticable for large objects if they are noticable at all
** Shape errors would be most noticeable for large objects if they are noticeable at all


===Object Mass===
===Object Mass===
* llGetMass() will tend to return a larger value when an object is attached  
* [[llGetMass]]() will tend to return a larger value when an object is attached  
** Attachment "mass" is estimated using a bounding box for each prim instead of the real shape
** Attachment "mass" is estimated using a bounding box for each prim instead of the real shape


Line 36: Line 37:
* Energy system thresholds may be different
* Energy system thresholds may be different
** Energy depends on mass of all prims in an object
** Energy depends on mass of all prims in an object
** Energy of attachments are always equal to or greater than when non-attached (because of llMass() issue mentioned above)
** Energy of attachments are always equal to or greater than when non-attached (because of [[llGetMass|llMass]]() issue mentioned above)
* llPushObject() can no longer push arbitrarily hard at long distances
* [[llPushObject]]() can no longer push arbitrarily hard at long distances
** The absolute largest push an object can attempt to make is determined by the size of its Energy tank (which is then attenuated based on its current Energy budget and distance^3 as per Havok1 implementation)
** The absolute largest push an object can attempt to make is determined by the size of its Energy tank (which is then attenuated based on its current Energy budget and distance^3 as per Havok1 implementation)


Line 44: Line 45:
** At the moment there is only one LOD below the highest level: primitives collide like boxes
** At the moment there is only one LOD below the highest level: primitives collide like boxes
** Correct collision shapes will gradually return to normal when the physics engine recovers (at a rate of one prim per physics engine timestep)
** Correct collision shapes will gradually return to normal when the physics engine recovers (at a rate of one prim per physics engine timestep)
** When objects transition from static to dynamic their LOD will be pre-emptively dropped and they will collide at the lower LOD until the RCCS automagically raises it
** When objects transition from static to dynamic their LOD will be preemptively dropped and they will collide at the lower LOD until the RCCS automagically raises it
* Duplicate scripted Actions are collapsed on multi-prim objects.
* Duplicate scripted Actions are collapsed on multi-prim objects.
** An Action is a behavior that pushes the object around, such as a Vehicle, Buoyancy, or Hover behavior.
** An Action is a behavior that pushes the object around, such as a Vehicle, Buoyancy, or Hover behavior.
** Making two scripts on one object each producing the same Action (such as llSetBuoyancy()) will result in a single instance of the Action instead of two
** Making two scripts on one object each producing the same Action (such as [[llSetBuoyancy]]()) will result in a single instance of the Action instead of two
** When two scripts on distinct prims of a multi-prim object try to produce duplicate Actions from two distinct primitives and the prims are then separated in a delink operation then the single Action instance will migrate with the script that first created it; the other piece of the object will have no Action.
** When two scripts on distinct prims of a multi-prim object try to produce duplicate Actions from two distinct primitives and the prims are then separated in a delink operation then the single Action instance will migrate with the script that first created it; the other piece of the object will have no Action.


===Other Misc Changes===
===Other Misc Changes===
* Vertical simulation extent has been increased from 768m to 1024m, however script and UI limitations have not yet been changed accordingly yet.
* Vertical simulation extent has been increased from 768m to 4096m (a change that will become visible once an updated viewer version is released, following the Havok4 deploy), however script and UI limitations have not yet been changed accordingly yet.


===What Is NOT Changed?===
===What Is NOT Changed?===
Line 58: Line 59:
* Spheres with non-uniform scale will collide with faceted geometry
* Spheres with non-uniform scale will collide with faceted geometry
* Region crossing lag will not be significantly relieved by Havok4 changes
* Region crossing lag will not be significantly relieved by Havok4 changes
* llGetCenterOfMass() on attachments fails
* [[llGetCenterOfMass]]() on attachments fails


===Known Bugs===
===Known Bugs===
* There is a resource leak in the simulator that may cause it to crash after an extended uptime
* There is a resource leak in the simulator that may cause it to crash after an extended uptime
* Avatars don't always sit in the "right spot"
* Avatars don't always sit in the "right spot"
* LSL collision() events are broken
* LSL [[collision]]() events are broken
* LSL VolumeDetect feature is broken
* LSL [[llVolumeDetect|VolumeDetect]] feature is broken
 
[[Category:Havok4|Changed]]

Latest revision as of 22:47, 14 August 2012

Interpenetration Resolution

When objects collide, they can end up "interpenetrating", in a situation where the two objects are "attempting to occupy the same space". Havok4 resolves interpenetration scenarios in a different and generally better way than Havok1.

  • Interpenetration resolution is enabled for all dynamic objects
    • In Havok1 dynamic objects that started penetrating would stop colliding until they ceased to penetrate
    • In Havok4 dynamic objects will be pushed apart when penetrating

Volume Detection

  • Volume detection is now the exact shape of the object instead of the bounding box
  • Uniformly scaled spheres are implicit (roll like spheres instead of faceted blocks)
  • Shapes are quantized
    • The colliding shape may differ slightly from the apparent shape
    • The errors should be smaller than the collision tolerance threshold, and thus not noticeable
    • Shape errors would be most noticeable for large objects if they are noticeable at all

Object Mass

  • llGetMass() will tend to return a larger value when an object is attached
    • Attachment "mass" is estimated using a bounding box for each prim instead of the real shape

Linkability Rules

  • Link rules are different
    • More robust: depend only on primitive position and scale (NOT rotation, cut, shear, twist, taper, or hollow)
    • Larger linkability distances (proportional to sum of scales, rather than the root mean square of the sum)

Avatar Motion

  • Avatar motion will be subtly different
    • Flying/walking diagonal will not result in a speed boost
    • Speed of walking up hills and ramps may be different
    • Steepest hill or ramp that can be navigated may be different
    • Largest step obstacle that can be climbed may be different
    • Speed of walking up stairs may be different
    • Run speed may be different
    • Jump height and horizontal response may be different
    • Acceleration/deceleration is higher when walking and stopping

Energy

  • Energy system thresholds may be different
    • Energy depends on mass of all prims in an object
    • Energy of attachments are always equal to or greater than when non-attached (because of llMass() issue mentioned above)
  • llPushObject() can no longer push arbitrarily hard at long distances
    • The absolute largest push an object can attempt to make is determined by the size of its Energy tank (which is then attenuated based on its current Energy budget and distance^3 as per Havok1 implementation)

Physics Engine Overload And Level Of Detail (LOD)

  • The collision level of detail (LOD) of objects may change when the physics engine lags (this is controlled by the Runtime Collision Control System (RCCS))
    • At the moment there is only one LOD below the highest level: primitives collide like boxes
    • Correct collision shapes will gradually return to normal when the physics engine recovers (at a rate of one prim per physics engine timestep)
    • When objects transition from static to dynamic their LOD will be preemptively dropped and they will collide at the lower LOD until the RCCS automagically raises it
  • Duplicate scripted Actions are collapsed on multi-prim objects.
    • An Action is a behavior that pushes the object around, such as a Vehicle, Buoyancy, or Hover behavior.
    • Making two scripts on one object each producing the same Action (such as llSetBuoyancy()) will result in a single instance of the Action instead of two
    • When two scripts on distinct prims of a multi-prim object try to produce duplicate Actions from two distinct primitives and the prims are then separated in a delink operation then the single Action instance will migrate with the script that first created it; the other piece of the object will have no Action.

Other Misc Changes

  • Vertical simulation extent has been increased from 768m to 4096m (a change that will become visible once an updated viewer version is released, following the Havok4 deploy), however script and UI limitations have not yet been changed accordingly yet.

What Is NOT Changed?

  • Dynamic objects are still limited to 31 primitives
  • Most primitives still have a "collision tolerance" of 0.1 meters (everything except implicit spheres)
  • Spheres with non-uniform scale will collide with faceted geometry
  • Region crossing lag will not be significantly relieved by Havok4 changes
  • llGetCenterOfMass() on attachments fails

Known Bugs

  • There is a resource leak in the simulator that may cause it to crash after an extended uptime
  • Avatars don't always sit in the "right spot"
  • LSL collision() events are broken
  • LSL VolumeDetect feature is broken