Early last semester I wrote a post talking about what we were planning for the engine. I saved it as a draft and never posted it, so instead I'll mention what we did. I'll keep this somewhat brief, as we are planning a demo for some of the school soon and we will have a more impressive demo level.
So what did we do? Well for starters, we finally got UI in. It's a pretty awesome UI if I may say so myself, although it still needs a lot of tweaking. However, we have a property grid to edit all of our objects and we just got in tools for object spawning, parenting, joint connecting, etc...We also have transform widgets that work with groups.
This leads me to another feature which I personally worked on, Composite bodies. This is the concept of "parenting" one object to another with a relative transformation to the parent. This means we can create complex shapes, such as tables and chairs, and have accurate collision with them. In fact, we even calculate what the correct center of mass and inertia tensor for the object is so that the movement is correct. And due to a recent re-architecting, we can support (although not supper efficiently yet) non-flat hierarchies. By this I mean A is parented to B who is parented to C who is parented to D...Overall, it's a very cool feature that allows us to create cool shapes that I will show off soon, such as a jeep, seesaw, box, table, chair, etc...
We also got in collision with static meshes, so we have a big ground map to play around on. Along with this, one of my fellow devs has been working on a player controller. This is progressing quite well as the player can run on the terrain, jump, push objects, slide up inclines that aren't too steep and even auto climb small staircases. We still have to make the player walk down inclines instead of falling, and make the player use a volume cast instead of a ray cast to determine if anything is in front of him.
And as for constraints, I have been spending a great deal of time cleaning up and polishing them. I even threw in an "alternate" solving method. By this I mean instead of having a constraint solve itself in a standard C++ style, the constraints can offload all the data needed to solve itself generically into a constraint row. This row basically contains the jacobian, bias, accumulated impulse and what objects are associated with it. From this I create a large, packed array of constraints to loop through. This ends up yielding a rather large speed boost, at least 30%, to the constraint solver. I still plan to SSE this at some point to gain an even larger performance boost.
On top of this, contacts are overall improved, although much improvement will always be needed. Stacks are much better due to friction tweaks, although I still need to align each point of contact's primary friction direction with the direction of movement. I also added in a persistent manifold based heavily on Bullet's. This allows much better interaction between MPR objects so we can even stack Cylinders.
There's more we have done, but in the interest of not rambling I will stop here. Although just for the fun of it, here's a small video of something I felt like making...
Tuesday, January 25, 2011
Subscribe to:
Posts (Atom)