project-image

Coding History: 3D from Mode7 to DOOM

Created by Eniko

A video series teaching the code behind the early evolution of 3D.

Latest Updates from Our Project:

Retro 3D Engine details/plan
about 3 years ago – Tue, Aug 31, 2021 at 08:32:37 AM

While I've been quiet for a few days while meeting a professional deadline the Kickstarter has continued ticking up at a steady pace and now we're less than $4,000 away from hitting the stretch goal for the free and open source, MIT-licensed, retro software 3D engine for the modern era. For this update I'd like to talk about the plan for that in more detail. Please keep in mind everything I say here may be subject to change! In fact if you have ideas and/or suggestions, please leave comments about them.

First off, it won't simply be a software polygonal 3D rasterizer. Making "OpenGL but not as good" isn't really the intent here, even if that would be a pretty interesting exercise. Maybe it'll support some sort of polygonal 3D, maybe not, but it definitely won't be the focus.

It's also probably not going to be an engine that offers all styles of 3D covered in the first seven episodes. Making a software 3D engine that could actually be viable for a game release is tricky enough without trying to make it do literally everything. That's a way to get an engine that does everything poorly.

So what will it be? I'm thinking a portal-based engine, kinda like Duke3D, but with its own style of doing things. I'd like to try to make it not restricted to only indoor scenes, maybe through integrating voxel based heightmapped terrain. I think that could be a really interesting evolution.

As for the technical details, the project will be split in two parts. The first part will be the "core" of the engine, which deals with all the actual rendering. This part will be written in C for maximum performance and portability. It won't concern itself with things like windowing, audio, input, etc. That means that any language that can provide those things and can interface with a DLL written in C will be able to use the core engine. You could potentially use this from things like Unity or Unreal, but also from projects using SDL2, FNA, MonoGame, OpenTK, raylib, etc*.

* These are not promises, they're examples of game engines/frameworks that could potentially interface with the engine core because they can, in theory, interface with C code in some way.

The second part will be the "usable out of the box" portion of the engine. This will probably be in C# for similar reasons to why the code for the videos will be in C#: ease of use, accessibility, and popularity in game development. I haven't decided what this will sit on top of but it's probably SDL2 in some way, whether that's through FNA or SDL2-CS. This part of the engine will provide windowing, audio, input, etc.

This is probably how most people would use the engine, but I wanted the core to be transferable between different back-ends since that's kind of the strength of a software renderer; it doesn't really rely on much of anything to work. You feed it some data and it gives you a big mess of bytes that represent the screen, and you can do whatever you like with it from there.

As for the name, I've gotten a few suggestions to call this the "Enigine" or something to that effect but I think naming the entire engine after me might be a little much. >_> Personally, I was thinking of calling it the Throwback Engine. What do you folks think?

Although... Eniko's Throwback Engine does have a nice ring to it. 🤔

Recommended Kickstarter:

Finally I'm going to continue the Kickstarter tradition of highlighting promising and interesting looking Kickstarters at the end of these updates.

This time I'd like to point out Noguchi's Bell, a Kickstarter for an animated series about a young samurai in a cyberpunk dystopia. It has a really striking visual style, but even more interesting is that it's entirely made in Dreams, a game creation kit available on the PS4 and PS5. It's really cool to see how far people can take tools like this. Creativity thrives under limitations, which is something that as retro 3D enthusiasts we can all probably relate to.

OpenGL-lite episodes goal met, next stretch goal revealed!
about 3 years ago – Tue, Aug 31, 2021 at 05:42:11 AM

Less than an hour after I posted the previous first 24 hour update the Kickstarter hit $21,000 USD, which means you've made it possible for me to create another 5 episodes covering how to create a polygonal software rendering engine including wireframe rendering, how to create perspective, flat polygon shading, textured polygon shading, and a basic implementation of a programmable pipeline (better known as shaders)!

This is something I've wanted to do for a long time, and got partway through an article series in the past, so I'm really excited about sharing this and hopefully helping people deepen their understanding of how 3D APIs like OpenGL and DirectX function under the hood.

This also reveals the next stretch goal; at $32,000 USD I will create a fully open-source, MIT-licensed, software 3D rendering engine for the modern age, available to everyone to use in making your own retro flavored games, completely free of charge! And, to make this a little more fun, you can leave your suggestion for what you think that engine should be named in the comments.

First 24 hours completed, and an interview on YT
about 3 years ago – Tue, Aug 31, 2021 at 05:41:59 AM

So the first 24 hours are over and we managed to raise $20,612, just shy of the $21,000 stretch goal that unlocks another five episodes about creating your own polygonal software 3D renderer from scratch. Never fear though, because we've got lots and lots of time to hit that and hopefully more!

In other news, retro gaming YouTuber St1ka did an interview with me about Coding History 3D which he just posted over on his YouTube channel. Give it a watch if you'd like some extra, behind the scenes information.

Fully funded in five hours, apparently??
about 3 years ago – Tue, Aug 31, 2021 at 05:41:48 AM

Honestly I don't really know what to say. I had no idea what to expect when I launched this Kickstarter but I certainly didn't expect it to be 100% funded in less than a quarter day, I couldn't have imagined that in my wildest dreams! Thank you all so much for believing in me and in this project. I won't let you down!

Having said that, since it funded so quickly, I guess we're moving on to stretch goals? I don't even have a cool graphic prepared or anything because I figured I'd have way more time to prepare one!

The first stretch goal will be at $21,000 USD which would be enough money to help me create another five episodes covering how to create a  polygonal software rendering engine including wireframe rendering, how  to create perspective, flat polygon shading, textured polygon shading,  and a basic implementation of a programmable pipeline (better known as  shaders). Basically, think a software version of OpenGL-lite.

There is one more stretch goal planned for after that but we'll have to hit the next one to find out what it is. Anyhow I better go make a snazzy stretch goal graphic, thank you all so much!!

50% funded in under an hour!
about 3 years ago – Tue, Aug 31, 2021 at 05:41:41 AM

I'm blown away by the response to this Kickstarter, thank you all so much for putting your confidence in me!

I said on Twitter I would give my cat a treat if it happened so if you want video evidence you can find it in this tweet. :D