As we enter February, it’s time to really get going with Tanden. While we’ve been working away for the past 3 week, we’ve also laid out a more detailed plan. It became clear very fast that everyone working on their own, on whatever they wanted, would lead to a slew of issues. Instead, we put together a somewhat in-depth feature list and schedule for what we’ll be doing over the next few months. In addition, there’s more concrete goals, milestone and stretch-goals, depending on how much we can do in our limited time.
My focus is on the physics system and math library we will be using throughout the engine. Here’s the more exact list of planned features:
Vector and Matrix Math: classes for the two common types of mathematical structures, allowing for normal operations and operations specific to those structures (e.g. Matrix multiplication, Dot products, etc.)
Primitives: Basic shapes used in both the physics and rendering systems
Basic Collision Detection: Detecting collisions in space between our objects
Mesh Collision: Creation and use of complex meshes, based on the vertices of models loaded into the engine
Rigid Bodies: “Physical Objects” that form the base-level of the world
Forces and Laws of Motion: Objects moving based on real world physics and properties, both natural and applied forces
Angular Motion: Like the above, but the rotation rather than position of objects being affected
Collision Response: Objects reacting appropriately, based on their collisions with each other, based on all their properties
Friction: Objects being able to move along others, and having that movement affected based on the friction between them
Going into the semester I had basic collision detection and vector math mostly in place. Everything else is on a timeline for the next few weeks, with hopes of having the core of our goals completed at the beginning of March, heading into Spring Break. Here’s the milestone dates:
01/28: Addition of more advanced vector operations, and baseline setup of Rigid bodies
02/04: More complex Rigidbodies, including the gravity and the likes. Implementation of essentially everything you can do with matrices.
02/11: Manually adding forces to objects, and having them moved based on those inputs. Some small updates to basic collisions, based on known problems and things I’ve read on improving their efficiency.
02/25: Complex mesh collisions, based on the meshes imported into the Engine
03/04: Collision responses for all our collisions objects. Before this point, they’ll just be make it known their colliding, without actually doing anything about it. Also, friction.
My hope is that these goals can be accomplished in a timely manner, based on a 5-10 hour work week, depending on the complexity of that week’s topic. Of course, there are a few unknowns, and according contingency plans. First, is the obvious question of working on a larger scale project with multiple people. Fortunately, the core systems to link everything together are already in place. My systems work independently, even though they might not be visualized. In the event that I’m left on my own, I could bring my systems into an existing engine, with rendering capabilities.
A smaller thing that I foresee is the discovery of things that I’ve forgotten in m,y plan. I’m certain there’ll be one or two things we need in the math library that I overlooked, so I’ll need to take a short while out of my time to add it. Anything larger coming up should be covered by the extra time we’ve left open at the end, though not ideal.
Of the current plan, the big question mark to me is mesh collision, from the ground up. I’ve got some basic ideas of how I imagine it to work, but I’m sure they’re not effective. There is, luckily, a fair amount of research and papers out there about the topic, so I should be starting to read and decipher a few PhD papers. If the conclusion turns out to be: there’s no way I can do this in a few weeks, there’s a variety of other physics topics worth tackling. Things like spring, breaking and soft bodies are ripe for the taking on the project.