PhysicsEngines
From OpenSimulator
m (Removed 'Template:' prefix from template includings and/or changed external-link into internal-link) |
m (Add introduction header) |
||
Line 1: | Line 1: | ||
{{Quicklinks}} | {{Quicklinks}} | ||
− | + | ==Introduction== | |
− | + | ||
There are several physics engines available for use in OpenSim. Currently, they are "basicphysics", "OpenDynamicsEngine" & "BulletX" (modified version). As of OpenSim 0.6.9, the plugin "OpenDynamicsEngine" is the default and can be seen in the <tt>OpenSim.ini</tt> file. [In Linux you must run the included shell script, <tt>opensim-ode.sh</tt> or type <tt>ulimit -s 262144</tt> before running mono OpenSim.exe. '''The ulimit -s 262144 in Linux protects you against stack collisions and corrupted memory when there are a large amount of physical objects roaming around your Simulator.'''] | There are several physics engines available for use in OpenSim. Currently, they are "basicphysics", "OpenDynamicsEngine" & "BulletX" (modified version). As of OpenSim 0.6.9, the plugin "OpenDynamicsEngine" is the default and can be seen in the <tt>OpenSim.ini</tt> file. [In Linux you must run the included shell script, <tt>opensim-ode.sh</tt> or type <tt>ulimit -s 262144</tt> before running mono OpenSim.exe. '''The ulimit -s 262144 in Linux protects you against stack collisions and corrupted memory when there are a large amount of physical objects roaming around your Simulator.'''] | ||
Line 12: | Line 11: | ||
ODE has received the bulk of testing. As of 2010 it supports collisions with all prims (cubes, spheres, cylinders etc) with any combination of distortions including hollow, taper, twist, path cut etc. In combination with Meshmerizer it also supports correctly colliding with sculpted prims. As of 2007 Bullet supported box-shaped prims and appears stable; there had been little testing, and it is known to have issues with friction (you skate around on non-level surfaces). | ODE has received the bulk of testing. As of 2010 it supports collisions with all prims (cubes, spheres, cylinders etc) with any combination of distortions including hollow, taper, twist, path cut etc. In combination with Meshmerizer it also supports correctly colliding with sculpted prims. As of 2007 Bullet supported box-shaped prims and appears stable; there had been little testing, and it is known to have issues with friction (you skate around on non-level surfaces). | ||
− | == Compiling ODE from source (Linux) == | + | ==Compiling ODE from source (Linux)== |
===Building ODE 11.1 for OpenSim=== | ===Building ODE 11.1 for OpenSim=== |
Revision as of 10:28, 1 December 2011
Languages: |
English Deutsch |
Contents |
Introduction
There are several physics engines available for use in OpenSim. Currently, they are "basicphysics", "OpenDynamicsEngine" & "BulletX" (modified version). As of OpenSim 0.6.9, the plugin "OpenDynamicsEngine" is the default and can be seen in the OpenSim.ini file. [In Linux you must run the included shell script, opensim-ode.sh or type ulimit -s 262144 before running mono OpenSim.exe. The ulimit -s 262144 in Linux protects you against stack collisions and corrupted memory when there are a large amount of physical objects roaming around your Simulator.]
- When starting OpenSim in Windows, one can add -physics=basicphysics to run the (very!) basic physics engine instead of OpenDynamicsEngine (ODE), or change the corresponding parameter in OpenSim.ini..
- When starting OpenSim in either Windows or Linux, one can add -physics=modified_BulletX to run a modified version of the BulletX Physics Engine aka Modified BulletX. See the next information about details and progress.
To conclude, basicphysics & OpenDynamicsEngine both are appropriate for Linux and in addition. Modified BulletX should be fine for Windows and Linux (not the original BulletX).
ODE has received the bulk of testing. As of 2010 it supports collisions with all prims (cubes, spheres, cylinders etc) with any combination of distortions including hollow, taper, twist, path cut etc. In combination with Meshmerizer it also supports correctly colliding with sculpted prims. As of 2007 Bullet supported box-shaped prims and appears stable; there had been little testing, and it is known to have issues with friction (you skate around on non-level surfaces).
Compiling ODE from source (Linux)
Building ODE 11.1 for OpenSim
OpenSim currently bundles ODE 10.1. However, ODE 11.1 is now out and people have reported good results when using it with OpenSim.
Here are the instructions for building ODE 11.1 for OpenSim. Unfortunately, it's not quite as straightforward as just ./configure and make :)
util.cpp (fixes highlighting prims crash) comment out lines 486-510
mass.cpp (fixes volume issue) comment out line 49
Could you please give some more context for identifying these lines? In the source code for ODE 0.11.1 [1], file util.cpp has 416 lines only and line 49 in mass.cpp is a debugging output line. --Marck 15:00, 15 August 2010 (UTC)
cd ODESVN cd trunk chmod a+x ou/bootstrap sh autogen.sh CFLAGS="-m64" ./configure --enable-old-trimesh --disable-asserts --enable-shared make cp ./ode/src/.libs/libode.so ~/ODESVN cd ~/ODESVN mv libode.so libode-x86_64.so cp ~/ODESVN/libode-x86_64.so ~/opensim/bin
Instructions
Note: This may now be outdated information If you want to compile the OpenDynamicsEngine (ODE) by yourself, get the latest OpenSim libraries source code (Ver. 0.9 as of Oct '07) from the SVN: http://opensimulator.org/svn/opensim-lib & switch to the ode(trunk\unmanaged\OpenDynamicsEngine2) directory (Q: Is this also available through git?)
svn co http://opensimulator.org/svn/opensim-libs/trunk opensim-libs cd opensim-libs/unmanaged/OpenDynamicsEngine/
Ensure that the file ../ou/bootstrap is executable and then bootstrap the build process as follows:
It might be necessary to make the bootstrap file executable(if it is not) with this optional next step:
$ cd ou $ chmod +x bootstrap
Now get ready and run autogen
$ sh autogen.sh
and compile it as shown below. Depending on how permissions are setup, you may need to sudo for the make install step:
./configure --enable-shared --disable-demos --disable-asserts make make install cp /usr/local/lib/libode.so /my/opensim/production/dir
If you run into issues after doing this try the debug library by using the following line;
./configure --enable-shared --disable-demos
(I used to suggest --with-trimesh=gimpact, but no longer. As of ODE 0.9, Opcode is the preferred and best-supported collision library)
This should create a libode.a and lidode.so file in the src/ode subdirectory. Copy these two files to the opensim bin directory (after having backed up the original files there). [er, I don't think the .a file is necessary to put in bin!]
Try to play a bit with the avatar-settings in OpenSim.ini, if the avatar has it's feet stick in the terrain or if the basic-position is crouching. These settings seem to work on Linux64: (Note that these are old settings and may not work with the latest OpenSim versions)
av_capsule_radius = 0.68 av_capsule_standup_tensor_linux = 1900000 av_density = 90
Compiling ODE from source (Mac OS X)
You can use essentially the same build process on OS X as on Linux, but there are a couple of minor differences.
First, the autogen.sh script tries to automatically determine the name of the libtoolize binary (which is named glibtoolize on OS X). To do this, it uses the which command under bash, but the error code returned by which is always 0 in bash. If you see an error message like this:
autogen.sh: line 44: no: command not found
then open autogen.sh in a text editor and change the first
LIBTOOLIZE=`which libtoolize`to
LIBTOOLIZE=`which glibtoolize`
and re-run it.
Also, you must have automake 1.10 or later. You can check your current version with:
automake --version
You can get version 1.10 from MacPorts or fink if yours is older. Be sure to place the new binary directories ahead of your system binary directories in your PATH. You may have to open a new shell for your changes to take effect.
Then you can follow the Linux instructions to build the library. When it has built, copy the ode/src/.libs/libode.dylib file to the OpenSim bin directory.
Compiling ODE from source (Windows)
The standard distribution has a build directory, in which you will find subdirs for several Microsoft compilers.
The standard .sln files (at least for VS2005) compile ode.dll such that it depends on at least two Microsoft runtime dll's. This can cause failure and confusion, so do the following: Right-click on ode in Solution Explorer, and select properties. under Configuration Properties/General, change "Use of MFC" to read "Use MFC in a Static Library"
Under Configuration Properties/Linker/System. Change Stack Reserve Size to 262144000. Click the OK button then compile as usual.
ODE Plugin in OpenSim
Currently, the ODE Plugin suports collisions Av2Av, Av2Prim and Prim2Prim. Avies and (active)physical prim movement supported.
The currently collision behavior is:
- For avies, a capsule of .2m of radius and a length based on the avatar height and 80Kg of mass
- For prims, like a Box or Sphere with a mass of a Box of = 0.5Kg/l = 0.5Kg/dm3 = 500Kg/m3.
- Prim are separated into ~30m space islands with their own bounding box to speed 'near' calculation.
- friction is reduced on avatar to object/ground collisions when the avatar is moving
To-do list (next changes)
- Tune all collisions
- DONE: Introduce Prim Shape Type to have more than the box shape using the Meshmerizer tri-mesh generator
- Fix bugs
- Physical(active) Linksets
- Vehicles (almost done, waiting on implementation of LSL functions)
Known bugs
- Linkset + Physical/Active are not working: Making a linkset physical, leaves the geometries of it's child prim where they are.. even if the root prim moves. Probably fixed by now.
- Certain distributions of Debian utilize 100% of the CPU while running the ODEPlugin.
- ODE Asserts
Recent changes
- Implemented Grab and Throw
- Implemented llApplyImpulse in the global frame
- Replaced the 'Avatar Wobble' with an 'Angular Motor' to keep the avatar capsule from toppling. Results in less bouncing and improved stability.
- Linksets are now collidable as long as they are not set Physical(active)
BulletX Plugin in OpenSim: Modified BulletX
BulletX Plugin in OpenSim runs the modified version of BulletX. The original version of BulletX runs under and has code-dependencies with MS.XNA. The orginal BulletX can be found at XNADev.ru. The modified version removes all code dependencies with MS.XNA. On the other hand, it needs another library to work. This library is based on Mono.Xna and it's called MonoCompactMaths. The modified BulletX and the MonoXnaCompactMaths can be found on the svn of OpenSim. Because its code independency of MS.XNA, the modified BulletX should can be run under either MS.Net or Mono and, therefore, either Windows or Linux (obviously you can combine Windows + Mono)
Currently, BulletX Plugin suports collisions Av2Av, Av2Prim and Prim2Prim. Prims and avies movement supported. By the way, collisions needs tunning. The currently collision's behavoir are:
- For avies, like and sphere of 1m of radious and 50Kg of mass
- For prims, like a Box of the prim-size and a mass that it depends of its sizes. The mass it's the mass of Box of water with density = 1Kg/l = 1Kg/dm3 = 1000Kg/m3 (Be water my friend! :D).
To-do list (next changes)
- Tune collision
- Introduce Prim Shape Type to have more than the box shape.
- More than 1 region in a Sim and then more than 1 sim (grid)
- Fix bugs
Known bugs
- Icy bug: an avatar acts like it is on ice and tends to drift off the edge of the sim after a while
- Crash on BulletX. You will find the next message in console sometimes: Overflow in AABB, object removed from simulation If you can reproduce this, please email bugs@continuousphysics.com Please include above information, your Platform, version of OS. Thanks.
-
Rotation doesn't seem to work
POS Plugin in OpenSim
POS is Physics Of Simplicity. It is BasicPhysics with collisions.
I took out my old wiki stuff because it was just plain wrong. The algorithm which is implemented in POS does not model the avatar as a sphere; rather, it models it as a rectilinear solid, same as the prims. However, collision detection is always done in the rotational frame of the prim, so depending on which prim you check against, the avatar is actually oriented differently.
To-do list (next changes)
- TODO
Known bugs
- TODO
Physics Testing Videos
ODE
- ODE 25 Physical Spheres on Windows Server 2008 Dual Pentium 3 1000mhz with 1 gb of ram. [01/24/2008 rev.3170]
QuickTime > http://www.nebadonizumi.com/vid/opensim/windows2008_ODE_2.mov YouTube > http://www.youtube.com/watch?v=DGyhne2llRI
- 360 Physical Prims (Sim Crashes) [11/08/2007 rev.2308]
QuickTime > http://www.nebadonizumi.com/vid/opensim/opensim_ODE_physics_test_01.mov Stage6 > http://stage6.divx.com/user/3dlibre/video/1847652/ YouTube > http://www.youtube.com/watch?v=Y0olsWlTc0A
- 180 Physical Prims (Sim Does Not Crash) [11/08/2007 rev.2308]
QuickTime > http://www.nebadonizumi.com/vid/opensim/opensim_ODE_physics_test_02.mov Stage6 > http://stage6.divx.com/user/3dlibre/video/1847715/ YouTube > http://www.youtube.com/watch?v=9lR_2H7VODU
- 90 Physical Prims (Sim Does Not Crash) [11/08/2007 rev.2308]
Quicktime > http://www.nebadonizumi.com/vid/opensim/opensim_ODE_physics_test_03.mov Stage6 > http://stage6.divx.com/user/3dlibre/video/1847731/ YouTube > http://www.youtube.com/watch?v=t9ulYO8I26Q
BulletX
- 360 Physical Prims (Sim Crashes) [11/08/2007 rev.2308]
QuickTime > http://www.nebadonizumi.com/vid/opensim/opensim_BulletX_physics_test_01.mov Stage6 > http://stage6.divx.com/user/3dlibre/video/1847745/
- 180 Physical Prims (Sim Crashes) [11/08/2007 rev.2308]
QuickTime > http://www.nebadonizumi.com/vid/opensim/opensim_BulletX_physics_test_02.mov
- 90 Physical Prims (Sim Crashes) [11/08/2007 rev.2308]
QuickTime > http://www.nebadonizumi.com/vid/opensim/opensim_BulletX_physics_test_03.mov
Second Life Havok 1
- 360 Physical Prims [11/08/2007]
http://www.nebadonizumi.com/vid/opensim/SecondLife_physics_test_01.mov
Second Life Havok 4
- 360 Physical Prims [11/08/2007]
http://www.nebadonizumi.com/vid/opensim/SecondLifeBetaHavok_physics_test_01.mov
- 1000 Physical Prims [11/09/2007]
http://www.nebadonizumi.com/vid/opensim/SecondLifeBetaHavok_physics_test_02.mov
- 1000 Physical Prims [11/09/2007]
http://www.nebadonizumi.com/vid/opensim/SecondLifeBetaHavok_physics_test_03.mov