Skip to content
Vilanel
In development · v0.1.0C++ · Vulkan · Windows

A 3D game engine, built from scratch.

A Vulkan renderer, a dockable editor, a visual designer for in-game interfaces, a node graph that drives both logic and animation, physics, audio and an asset pipeline. Gameplay is C++, and it reloads while the editor keeps running.

The Vilanel editor: scene tree on the left, 3D viewport in the middle, properties panel on the right, and a log along the bottom.
Decisions

Three choices the rest of the engine follows from

I build Vilanel on my own, for the games I want to make, and that shapes everything in it. These are the three choices the rest of the engine was built around.

Gameplay is C++, and it reloads

Game code is the same language as the engine, so there is one debugger and nothing in between the two to keep in sync. Rebuilding swaps it in with the editor still running. The cost is real: a crash in gameplay takes the editor down with it.

The interface system is built here

Menus, HUDs and inventory screens are laid out in a visual designer inside the editor and saved as files. Owning the widget model and the file format is what lets the designer keep pace with the engine instead of lagging a release behind it.

Depth over breadth

One model format, designed around rather than adapted to. Proven language features rather than experimental ones. Each choice is narrower than it could have been, so that the parts which exist are finished rather than eighty percent done.

What is built

Twenty-three milestones, all of them done

The plan was written before the first line of code and ran from a blank window to a working editor. All of it is in the repository. This is what it adds up to.

Renderer

Materials that respond to light the way real surfaces do, lighting picked up from the surroundings rather than from individual lamps, shadows, hundreds of lights at once, and film-style colour handling. Deciding what is visible, how detailed a version to draw and what pose each character is in all happens on the graphics card.

Reloadable gameplay

Rebuild your game code and the editor swaps it in with the level still open and your objects still holding their state. It was the third thing built, because reloading code while it runs constrains how everything after it is written.

Animation

Skeletal animation, characters that blend smoothly between states, movement carried from the animation into the world, and several clips mixed together based on how fast a character is going.

Assets

Source files are converted into a form the engine loads quickly, with textures compressed for the graphics card and models simplified for distance. Edit a texture and everything that used it rebuilds by itself.

Simulation

Objects that fall and collide, a character that walks around them properly, pathfinding worked out from the ground rather than from everything solid, and sound that gets quieter and moves across the speakers as you turn.

Editor and Hub

A window the editor draws itself, play mode with pause and single-step, undo across the whole level, an asset browser, a command search, and a Hub that manages projects and engine versions.

The full breakdown
Node graph

One editor for scripting and animation

Wiring up game logic and building an animation blend tree use the same canvas, the same file format and the same runtime. Only the available nodes differ.

Panning, zooming, the grid, box selection and dragging several nodes at once are the same job in both. Written twice they drift apart, and you end up with two editors that behave differently for no reason anyone chose. Undo, saving and the properties panel came free the same way.

How the graph works
The Vilanel node graph, showing nodes wired together with colour-coded connections.

Twelve connection types

ExecBoolIntFloatStringVectorColorObjectStructTextureEventWildcard
Stack

Where the work went

Turning characters into shapes on screen, and working out how they sit next to each other in any given language, is decades of specialist work and the existing libraries are excellent. Layout, styling, input handling and file formats are the parts that have to fit the engine, so those are written here.

C++
For the engine, the editor and your gameplay code alike
Vulkan
Modern graphics only, with no older path to keep working
0
Scripting languages, by decision rather than omission
23
Milestones complete, from a blank window to today

Measured from the start

Performance measurement was the third piece of work in the project, before there was much to measure. A profiler added later is one nobody has earlier numbers to compare against, so the first slowdown becomes an argument instead of a measurement.

Built to be replaced in two places

Two things the engine does by hand today will become part of the C++ language itself in a few years: working out what fields a type has, and splitting work across processor cores. Both are written behind a boundary now, so switching later is a small change rather than a rewrite.

Vilanel is a personal project.

It is my engine, built for the games I want to make. There is nothing to download and no plan to distribute it, which is also what lets it stay this opinionated. This site is the record: what got built, and why it was built that way.