* Fixes the 10x10x10 hard physics limitation. (wierdly, you have to set this for each region in your Regions.ini[PhysicalPrimMax = 10(default)])

* Adds a configurable maximum object mass before the mass is clamped.  Default is 10000.01.  Configurable by changing maximum_mass_object in the [ODEPhysicsSettings] section.
* Clamping the mass is important for limiting the amount of CPU an object can consume in physics calculations.  Too high, and the object overcomes restitution forces by gravity alone. This generates more collisions potentially leading to 'deep think'.
mysql-performance
Teravus Ovares (Dan Olivares) 2009-12-03 20:21:10 -05:00
parent d9a20edfb0
commit 781db43a76
4 changed files with 11 additions and 1 deletions

View File

@ -2589,7 +2589,9 @@ namespace OpenSim.Region.Framework.Scenes
{ {
foreach (SceneObjectPart part in m_parts.Values) foreach (SceneObjectPart part in m_parts.Values)
{ {
if (part.Scale.X > 10.0 || part.Scale.Y > 10.0 || part.Scale.Z > 10.0) if (part.Scale.X > m_scene.RegionInfo.PhysPrimMax ||
part.Scale.Y > m_scene.RegionInfo.PhysPrimMax ||
part.Scale.Z > m_scene.RegionInfo.PhysPrimMax)
{ {
UsePhysics = false; // Reset physics UsePhysics = false; // Reset physics
break; break;

View File

@ -723,6 +723,8 @@ namespace OpenSim.Region.Physics.OdePlugin
break; break;
} }
} }
if (returnMass > _parent_scene.maximumMassObject)
returnMass = _parent_scene.maximumMassObject;
return returnMass; return returnMass;
}// end CalculateMass }// end CalculateMass
@ -733,6 +735,7 @@ namespace OpenSim.Region.Physics.OdePlugin
if (Body != (IntPtr) 0) if (Body != (IntPtr) 0)
{ {
float newmass = CalculateMass(); float newmass = CalculateMass();
//m_log.Info("[PHYSICS]: New Mass: " + newmass.ToString()); //m_log.Info("[PHYSICS]: New Mass: " + newmass.ToString());
d.MassSetBoxTotal(out pMass, newmass, _size.X, _size.Y, _size.Z); d.MassSetBoxTotal(out pMass, newmass, _size.X, _size.Y, _size.Z);

View File

@ -207,6 +207,7 @@ namespace OpenSim.Region.Physics.OdePlugin
private float avMovementDivisorWalk = 1.3f; private float avMovementDivisorWalk = 1.3f;
private float avMovementDivisorRun = 0.8f; private float avMovementDivisorRun = 0.8f;
private float minimumGroundFlightOffset = 3f; private float minimumGroundFlightOffset = 3f;
public float maximumMassObject = 10000.01f;
public bool meshSculptedPrim = true; public bool meshSculptedPrim = true;
public bool forceSimplePrimMeshing = false; public bool forceSimplePrimMeshing = false;
@ -480,6 +481,7 @@ namespace OpenSim.Region.Physics.OdePlugin
m_NINJA_physics_joints_enabled = physicsconfig.GetBoolean("use_NINJA_physics_joints", false); m_NINJA_physics_joints_enabled = physicsconfig.GetBoolean("use_NINJA_physics_joints", false);
minimumGroundFlightOffset = physicsconfig.GetFloat("minimum_ground_flight_offset", 3f); minimumGroundFlightOffset = physicsconfig.GetFloat("minimum_ground_flight_offset", 3f);
maximumMassObject = physicsconfig.GetFloat("maximum_mass_object", 10000.01f);
} }
} }

View File

@ -594,6 +594,9 @@
body_motor_joint_maxforce_tensor_linux = 5 body_motor_joint_maxforce_tensor_linux = 5
body_motor_joint_maxforce_tensor_win = 5 body_motor_joint_maxforce_tensor_win = 5
; Maximum mass an object can be before it is clamped
maximum_mass_object = 10000.01
; ## ; ##
; ## Sculpted Prim settings ; ## Sculpted Prim settings
; ## ; ##