Kapsul3D : A 20 years old pet project post mortem
Tags: Babylonjs, 3d, Modeling, Software Development

20 years ago, I was a junior programmer developing device drivers and I was enjoying Unreal Tournament with my fellow co workers.

This is a short post mortem on a very old personal project. What I learned and what I wish some mentor would tell me.

It’s always great to see such an old binary still running on Windows 10

I was a total noob in software development but I believed I could do anything with my poor knowledge. So, why not building a 3D modeler from scratch?

My math knowledge was also miserable. But I still think with just a couple of operations (say dot product, cross product and vector transformation) you can already achieve a lot.

I’ve spent countless hours doing, reworking, deleting portion of code. I didn’t know what I wanted. If I saw a feature from any authoring tool that looked cool, then I had to replicate it. Even if it’s bigger than something I could chew, no matter what, I had to try. I didn’t even think about how useful it should be or why I should make it in the first place.

This leads nowhere and is the first lesson: Do it small, make it tiny but make it useful.

Quake MD2 loader and UV editor.

Of course, with many half finished features. Mostly untested and just stable enough to make a screenshot, this ‘software’ was a collection of unfinished work with duct tape.

Lesson 2: one finished feature is often better 100 unfinished ones.

‘Often’ and not ‘always’ ? Well, it depends on the scope of your project. If your pet project is meant to learn/introduce yourself to a particular subject, you can stop when you understand it. No need to make it production proof.

I introduced myself to a lot of algorithms. Some that I still use today. It helped me choose more wisely between different tools and implementation later in my career.

Lesson 2B: 100 unfinished tests are sometimes better than 1 production proof features.

My dream was to do maps for a FPS, characters, animation, lighting, … everything.

The code is crap but the toolchain is maybe even worse. I still feel guilty because I didn’t spend time thinking how I should do things. I used VisualStudio 6 at the time and the concepts of dependency, build system, and auto-tests were totally unknown.

Path extraction with Delaunay triangulation. Still relevant algorithm today!

Ho! man! How tedious it was to build binaries. Right click on every project to build it. Any plugin that was not in sync with a change in a header and I would crash.

Lesson 3: If your project is more than 1 library/executable, find a way to automate build and tests.

Needless to say I didn’t know about test units. Broken things kept being broken for a very long time. No auto-tests either. This didn’t help me in keeping motivation. The more code I threw in, the more broken it was.

The buggy light baker in action.

I had mixed feelings about users and releases. I was split between doing what I want without caring about users and getting users to improve the software and keep motivation. As I didn’t choose, I got worst from both sides.

Lesson 4: Know when to stop your pet project or plan and support releases for your users.

A bunch of primitives with tesselation. Looks like I wasn’t aware of smoothing group concept.

From those times, I mostly missed one thing: I was reckless. I could start something from scratch believing it would end up being something amazing (and failing along the way). Now, I’m better at preparing, doing research and planning. I see the difficulties in a project much earlier now.

Moreover, there were fewer 3D enthusiasts and way less documentation. Nowadays, there is a good chance that someone already did something like your brand new shiny idea you had last night. Less discovery but more on the long run software development.

There was a terrain generator as well. I think it was one of the last thing I did.

Texture blending based on slop. Incredibly easy to code with stunning results.

I didn’t use any SCM software at the time and often lost code source but I’ve been lucky enough to keep a copy.

See the mess here : https://github.com/CedricGuillemet/Kapsul3D

At the time:

- ICQ was the IM you used to chat

- I did one version with C++ builder 1.0

- I was pretty experienced with MFC 4.0 after some months.

- Visual Studio 6 was my IDE of choice

- Only 30 hours a month with a 56Kbps modem for accessing Internet

- Winamp and 10Gb+ of MP3 was the best way to enjoy music while coding

- I miss flipcode.com

There is so much more to say about this project but I want to keep this post short. More next time!