Tanden Engine Part 2 - Laying Out a Plan

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.

Tanden Engine Part 1 - Go Hard or Go Home

For my Console Programming class, aka “make something of value” class, I’m engaging in a sizeable project with 2 friends of mine. While everyone else is making innovate games, or exploring new tools/systems, we’re teaming up to contribute to something far bigger. After getting a head start at the end of last semester, we’ll be spending this semester working on Tanden Engine, a basic rendering/physics engine. It’s a huge undertaking for 3 students, working only part-time on it, but when we succeed, we’ll have done something truly impressive.

We’re splitting our work apart into distinct sections, with some cross-over. My main focus will be on the physics system, while contributing a bit to the rendering and editor components. I’ve spent far too long being unsure in what direction I want to go as a game programmer, but hopefully this will help me decide. I know I want to be working further on the back-end, so hopefully I enjoy this experience as much as I hope I will. I’m both worried and excited about doing high level work, as well as the challenge of tackling a huge code base with a team, where I don’t know what exactly every line is.

We’ve got a ton of resources to aid us, and have already been getting our research in. We’ll be using Vulkan as the core of our rendering, some libraries to assist with model loading, and imgui to form the basis of our editor.

There are a lot of risks going into this project. The biggest thing is simply the scope of what we’re tackling. In addition, there’s the various things that come from working with a team. Besides needing everyone’s success for the project to come together, much of the work we’re doing relies on what others are doing. We’ve put together a tentative schedule of what we plan to do on a weekly basis over the semester, and hopefully we can closely stick to it.

The reality is, that this is our first time working on a project of this size, and none of us really know how much time we’ll have, with everything else going on at this juncture in our lives. We’re shooting for the stars, but we’ve got various levels of complete that we can use as a fallback. The base goals for my physics system is to simply have a few spheres bouncing around in our scene. The intermediate goal, and a large jump, is to have basic destruction of rigidbodies/meshes. Have a cube fall and shatter, or something of the like. Lastly, is the possibility of basic softbody physics, to add life to objects. For another class, I’ll also be tackling particle physics.

All in all, I’m nervous but cautiously excited for what will hopefully be a huge project and personal success!

My Teammates’ insights: Thomas McGillicuddy