We have just released Farseer Physics Engine 2.1 and we are now focusing on 3.0. We took the chance and started over - we now build our foundation on Box2DX witch is a C# port of the wide known Box2D physics engine. Box2DX is very different from Farseer
Physics Engine, even though we use many of the same algorithms and have a similar design, it has a lot of new features.
We found ourselves implementing more and more code from the Box2DX project over to Farseer Physics Engine, so we simply switched roles and now start implementing Farseer Physics features into Box2DX instead. Hopefully we will get a good hybrid that takes
the best of both engines.
Here is a list of features that we will gain from going in this direction:
1. Optimized SAT and SAP
Box2D has an optimized SAT algorithm that for example can check multiple axes at once. Not only is the narrow phase very fast, it also has an optimized Sweep And Prune (SAP) broad phase collider that supports queries. Querying is used by the ray casting mechanism,
but can also be used to make a quick proximity check of all geometries in the world.
2. Real circles and specialized geometry shapes
You will have the possibility of creating real circles; this enabled realistic behavior of collisions between circles and polygons. They split geometry shape structure also gives better performance. Utilizing specially crafted algorithms for collisions
between circle shapes and polygon shapes improves performance.
3. World AABB
Box2D uses a world axis aligned bounding (AABB) box to check whether a geometry is inside the world or not. Whenever a geometry in the world exits the world axis aligned bounding box it gets disabled. This improves performance because it does not
have to update the geometries that are no longer inside the world.
4. Continuous collision detection
Using the conservative advancement algorithm and we can have continuous collision detection in Farseer Physics Engine 3.0. This means that objects no longer inter-penetrate each other and the problem known as tunneling can be resolved simply by turning
this feature on. The algorithm is quite expensive and should only be enabled for geometries than need it (fast moving geometries).
5. Fast ray casting
Ray casting is implemented directly into the broad phase collision detector, this means that you can ray cast into the world and get the first possible hit very quickly.
6. Joint motors
Instead of applying force to the bodies attached by joints, you now have the possibility of applying force to the joint itself. Take revolute joint as an example: You tell the joint how much torque you would like to apply to the body attached by the revolute
joint. It takes offset and other stuff into account automatically.
7. Extensive sleeping bodies
Box2D has a great implementation of sleeping bodies. This improves performance a lot and you can have several 1000 geometries in your world and one time, as long as they are sleeping, they will not affect performance.
8. Rich documentation and standard
Box2D is used by a lot of users (Farseer Physics Engine is based on Box2D Lite) and there is a lot of documentation; both in the form of manuals, wikis and forums. Most physics engines have some kind of component from Box2D, this provides us with the possibility
of easily integrate features from other engines.
So what is the difference?
You might ask yourself: Why not use Box2D then? Is it just a rebranded version of Box2D?
Well, while the internal components are based on Box2D, all our tools and API is completely rewritten to be as easy to use as possible. Many new users find it hard to utilize physics engines, but with the clean and flexible API, it’s a lot easier to learn
and use. Our huge collection of tools for manipulating polygons is also one of the main reasons to choose FPE over vanilla Box2D. You can convert texture data to polygons, union and subtract polygons collections and vary the details of the polygon form, by
simplifying or adding points to the polygon.
Another key point is the targeted platform. We target the .NET 3.5 framework with focus on Silverlight, XNA and Xbox360. We will still provide a dependency-free class library version that can be used with Winforms, WPF, OpenGL, MDX and the like.
I've made quick list of features that we will implement in Farseer Physics Engine 3.0 from FPE 2.1:
The easy to use factories is a consistent way of instantiating geometries, bodies and physic logic. It makes the engine more flexible and appealing to new users.
2. Buoyancy controller and wave generator
We have extended our buoyancy controller to be of high quality. We also have a very flexible wave generator that we would like to keep. Both will be improved to be easier to use.
3. Decoupled broad phase design
If Farseer Physis Engine you can easily create your own broad phase collider. In Box2D you are restricted to use the Sweep And Prune collider. Creating your own customized collider can greatly improve performance, so we decided to implement that in FPE 3.0.
4. Path generator
The path generator makes it possible to make chains, rope and tracks. It is a great tool and something we want to keep in 3.0 and improve on.
5. Vertices polygon manipulation tools
We have some great tools to manipulate polygons. Everything from calculating the area, centroid, moment of inertia to union and subtracting polygons. They will be optimized and implemented into the foundation of FPE 3.0.
6. Application Programming Interface (API)
We think that Farseer Physics Engine has a nice, clean and intuitive API. We want our users to focus on getting things done instead of tweaking internal parameters. The engine should take care of itself and automatically adjust to different scenarios - while
getting its directions from the user.
EDIT: Biggest post award...