2026-09-03 00:45:09
Suwako
gamedev
c++
vulkan
switch 2

【Volt Engine】Development Log — No. 001

I named this "No. 001", but I make no guarantees that I'll post 100 or more development logs.
In fact, I don't even know whether I'll be able to keep writing these regularly from here on out.
The reason is that it has already been two years since I showed everyone a video of Volt Engine.
After that, real life got in the way, I lost my job, spent three months going to Hello Work, and eventually found a new job.
Then, because I kept branching off into one project after another, I somehow ended up forgetting how the engine's code worked.
On top of that, Volt Engine was written in an OOP style, which was the biggest mistake I made at the time.

However, my PeerTube instance disappeared, my Fediverse instance was blown away by PostgreSQL, and on X I've adopted a new policy of making posts accessible for only one week.
In other words, Volt Engine has effectively faded into the distant past of my memory.
But don't worry.
Here are the videos:




This is what Volt Engine looked like sometime between October 2024 and the summer of 2025.
I migrated from SVN to Git eight months ago, so I no longer have an accurate history.

At 076 Studio, I've worked on game development across multiple projects, as well as concept art, 3D models, story documents, and so on.
At my new full-time job, I'm making a 3D renderer and 3D simulator used for tunnel construction, so I also do quite a lot of LiDAR-related work.
I also have to create practical libraries for coworkers who only know web-development tools, have just started learning C#, and rely heavily on AI for programming (which is why I'm cautious about providing the complete source code).
These circumstances, combined with the timing of starting my new full-time job, created a perfect opportunity to rebuild Volt Engine from scratch.
This time, I'm writing it in a functional style, with OOP limited to scene management.

As a result, the code has become lightweight, highly flexible, and extremely portable.
It can take advantage of the latest features available in Vulkan, and on Nintendo Switch and Switch 2, it can also use NVN.
If necessary, it can also be expanded to support many more graphics APIs and platforms with ease.
Furthermore, because two companies need to use the same engine for completely different purposes, it is designed to accommodate both game developers and construction workers.

It also helps that I'm no longer working in web development.
I no longer have to waste time learning whatever new popular framework everyone will have forgotten about by next week anyway.
Quitting open source has also been a positive in that I can focus more on my actual work.
I have less time to spend trying to impress LLMs and communists who steal my work without paying me a single cent.

Introduction

I started this work two months ago, just before joining my new company.
Since then, what started as three colored triangles has grown into a fully playable 3D demo.
However, this demo isn't the only thing I'm working on.
Over the next few weeks, I plan to create a large number of 2D and 3D demos.
This will allow me to evaluate how well the engine can handle a production environment before migrating actual games from the old Volt Engine to the new Volt Engine.
Although I said I had abandoned the old engine, I was actually continuing to make games with it until it became unusable.
However, because the new Volt Engine is much simpler, it has become much easier to achieve some rather impressive results.

Yesterday, I posted this video on X:

Even this video is already outdated.
Development is progressing at an incredible pace!

Since I didn't explain the other test scenes I've prepared in the previous video, let's take a look at them this time.
First, let's start with the most boring ones:

Prim2D
Layout

These two scenes exist solely to test 2D graphics rendering.
The first simply displays basic 2D shapes, while the second is a GUI layout engine built using those 2D shapes.
That's all there is to them.
The layout scene is the only scene that does not use a skybox.
This is to make sure the engine doesn't crash when no skybox has been configured.

Simple

From here, things start getting a little more interesting.
The scene is called "Simple", but it is actually a test scene for loading various 3D models from files.
On screen, there is one OBJ file, two GLB files, and two FBX files.
There is also another animated GLB file off-screen, but since it also appears in the island scene, there's no need to show it here.

Prim3D

Next is the 3D primitives scene.
Here, I'm testing the loading of predefined 3D shapes such as cubes, spheres, cylinders, capsules, and planes.
It is also used for testing shaders, lighting, and transparency.
The capsule is transparent, although it doesn't look that way.
That's because the toon shader also renders an outline, and it doesn't play particularly well with transparency.
The cylinder uses an emissive shader for its glow.
However, since I haven't implemented a bloom effect yet, it currently just looks like a solid color.
You can also see that shadows are being cast.

Island

And finally, the island scene I showed yesterday.
It looks like a real game, but it isn't actually a game.
This scene is designed to test the engine's ability to run an entire game, so I made it look game-like.
The debug menu is also visible.
It can be toggled on and off at any time, but I've left it on for now because it's useful.

You might think, "Isn't it a waste of time to spend so much time making 3D models only to throw them away later"?
In reality, none of these models were made by me.
The island model was simply stolen from here, then edited to make it easier to modify and improve its performance.
The original model dropped the frame rate all the way down to 12 FPS, which was pretty terrible.
The fox model is one of the sample models by the Khronos Group.
I only modified that one to add normals.
Without them, the toon shader looked far too out of place.

The old Volt Engine used ImGui for its debug menu, but this time I made it 100% from scratch.
It's not because I dislike ImGui.
Quite the opposite—I think it's the best GUI library out there.
I simply took inspiration from old Nintendo 64, GameCube, and Game Boy games.
They had debug menus like this.
I just think they look cool.

Collider

Today, I worked on collision detection.
As you can see in the screenshot above, collisions can also be visualized.
Normally, implementing collision detection in a game is pretty tedious, especially in 3D.
However, I was inspired by Super Mario 64 ROM hackers who manage their collision using Blender, so I created my own system based on that approach.
At the moment, collision has only been set up for the island, the pier, one rock, and one tree.
That's because the collision system isn't finished yet.
It's quite basic right now, but I plan to make it much more advanced over the next few days.

By the way, since this engine is also intended to be used by construction workers, it runs on Windows as well.

Windows

As you can see, the main difference is that no Device ID is assigned.
That's because this is a feature exclusive to the Nintendo SDK.
Also, since a PC doesn't need an on-screen keyboard, the area labeled "Software Keyboard" on Switch and Switch 2 instead displays "Fullscreen", which lets you switch between windowed and fullscreen modes.
Another difference is that on Switch and Switch 2, the FPS is limited to the maximum that each system can render.
Therefore, the Switch cannot exceed 60 FPS, while the Switch 2 cannot exceed 120 FPS in handheld mode or 60 FPS in TV mode.
On PC, meanwhile, the FPS can go as high as the CPU and GPU allow.
However, to show the demo under as similar conditions as possible, I'm artificially limiting all three platforms to 60 FPS.

If you're thinking, "There's no way this testbed could run this smoothly on Switch or Switch 2", then I'll show you photos of it actually running on both devices.

It&

And the blue kitty proves that it really is running.

♡

The engine isn't finished yet, but I'm getting pretty close to completing the first milestone.
For the second milestone, I plan to implement several sample games and distribute their PC versions on Itch.io so that everyone can enjoy them.

What awaits us from here on out?

That's all