RetroEngine Dev Log

Follow the ongoing development of RetroEngine, a physically accurate CRT renderer built in DirectX 12. Each log explores the journey from raw beam simulation to a living, analog-inspired rendering engine.

🌍 Dev Log 17 — On Rocky Ground

February 17, 2026

Terrain & Streaming

Indoor chunk tools exposed something I had been ignoring: everything outside still sat on an infinite flat plane. That was fine for debugging, but not for building real spaces. This week, the chunk system quietly evolved into something much larger: a procedural terrain system built on the same entity pipeline as everything else.

Terrain in RetroEngine does not get a special renderer or hidden pass. Each terrain chunk is just a normal SceneEntity with a generated mesh. That decision kept the renderer simple, but it forced discipline around ownership, lifetime, and serialization. Several subtle bugs surfaced along the way.

Terrain is serialized as parameters only: seed, frequency, amplitude, resolution, shading flags. No mesh blobs on disk. From that small block of data, an entire world can regenerate.

With deterministic generation in place, streaming naturally followed. The camera’s world position maps to chunk coordinates, and a square region of terrain updates around it. Fly forward and the world keeps building itself. Everything is derived from a handful of numbers saved in the scene file.

Procedural terrain controls inside the RetroEngine editor Read Full Log

This is just a short summary — click above to read the full log.

📐 Dev Log 16 — Building on a Plane

February 8, 2026

Editor & Placement

This dev log focuses on a deceptively simple goal: making placement inside RetroEngine feel physical instead of list-driven. What started as “just a construction grid” quickly turned into a stress test for the editor, the renderer, and some long-standing assumptions about how temporary data should interact with the GPU.

The construction grid itself is intentionally minimal. It is editor-only, owns no entities, and does not exist at runtime. Given a camera and a mouse ray, it answers one question: where would this land? That small shift unlocked a more tactile way to assemble spaces without introducing a second scene graph or heavy gizmo systems.

From there, chunk placement needed clearer rules. Explicit chunk anchors were introduced to define pivots without adding hierarchy or hidden ownership. Chunks remain plain data (reusable, instanced, and disposable), but now spawn deterministically and predictably on the grid.

The real challenge came with live previews. Rendering chunks before placement sounds trivial, but doing it safely in Direct3D 12 forced stricter boundaries between editor and runtime rendering. The end result is a preview system that uses the same mesh path as real entities, but with disciplined resource ownership and no mutation of scene state.

This log also marks roughly 100 days of work on RetroEngine! The features are getting quieter, but the engine itself is getting stronger. Fewer fragile edges. Clearer rules. Faster iteration.

Construction grid and chunk placement inside the RetroEngine editor Read Full Log

This is just a short summary — click above to read the full log.

🧩 Dev Log 15 — Scrolling Through Chunks

February 1, 2026

Editor & Materials

This dev log covers a week where the focus was on adding some fun features, and removing lots of friction. As I started building more real spaces inside RetroEngine, small limitations kept surfacing and slowing everything down.

The first set of changes grew out of material authoring. Animated UVs were unified across sprites and meshes, turning scrolling textures into a true material feature instead of a special case. At the same time, alpha cutout was added with deliberate constraints, favoring predictable, era-correct behavior that works with the CRT pipeline instead of fighting it.

From there, the work shifted into editor tooling. Smarter duplication exposed the need for real spatial understanding, which led to geometry-aware placement, reusable content chunks, and multi-entity editing without introducing heavy prefab systems or new runtime complexity.

Taken together, these changes are about scaling the engine responsibly. RetroEngine remains opinionated and constrained on purpose, but it is becoming faster and more comfortable to build with. The goal is still the same: let simple systems do real work without turning the editor into a second engine.

Reusable chunks and smart duplication inside the RetroEngine editor Read Full Log

This is just a short summary — click above to read the full log.

💡 Dev Log 14 — The Point of Lighting

January 27, 2026

Rendering

Up to this point, RetroEngine could render scenes correctly, but they felt flat. Objects felt "floaty". Everything was evenly lit. There was no sense of locality or presence tying things together.

This dev log is about fixing that without breaking the engine’s core goals. Lighting was added not as a realism upgrade, but as a way to bring the CRT pipeline to life and give scenes emotional weight. The focus stayed on simple, predictable techniques that fit a retro-inspired renderer.

Point lights were introduced as entity-driven components, allowing localized illumination without a deferred renderer, shadow maps, or heavy ray techniques. To ground objects visually, a cheap but deliberate blob shadow system was layered in: a classic solution that solves most of the problem while keeping performance and behavior easy to reason about.

Together, these changes make scenes feel less synthetic and more alive, while staying true to the engine’s constraints: no baked lighting, no overengineering, and no effects that fight the retro aesthetic RetroEngine is built around.

Point lights and blob shadows grounding objects in a scene Read Full Log

This is just a short summary — click above to read the full log.

🛠️ Dev Log 13 — Building Scenes Faster With Reuse Tools

January 19, 2026

Tools

With the CRT pipeline stabilized, the bottleneck shifted away from rendering and toward scene authoring. Too much time was being spent duplicating work, redoing small variations, and manually keeping entities in sync.

This dev log focuses on removing that friction. Grayscale material paths were added with tint, gamma, bias, gain, and color ramp controls, allowing a single texture to produce multiple visual outcomes without reauthoring assets.

The editor was also extended with copy and paste for individual entity attributes and multi-select editing in the scene outliner, making it possible to apply changes across groups of objects at once.

Together, these tools shift RetroEngine toward faster iteration, intentional reuse, and scene composition that scales beyond one-entity-at-a-time editing.

Grayscale material controls Read Full Log

This is just a short summary — click above to read the full log.

📺 Dev Log 11 — CRT Persistence Is Harder Than It Looks

January 14, 2026

Preview

After stabilizing the CRT render pipeline in the last dev log, I wanted to tackle one last missing detail before moving forward: phosphor persistence.

The goal sounded simple: subtle ghosting, faint trails, that unmistakable analog “memory” during motion. Instead, it opened a can of worms.

What followed was a cascade of failures: broken masks, impossible depth behavior, infinite trails, collapsing brightness, and a mysterious green tint that slowly overtook the entire image.

This dev log documents that failure in detail: why Rec.709 luma weighting made sense at first, why it completely fell apart inside a feedback loop, and how persistence turned out to be a temporal system rather than a blending problem.

The breakthrough came from a single conceptual shift: persistence should never add energy. It should only preserve what is already fading.

By reframing the problem and designing a more physically grounded model, the CRT finally behaved the way it should: stable, predictable, and visually convincing.

Early CRT persistence experiment Read Full Log

This is just a short summary — click above to read the full log.

🖥️ Dev Log 10 — Making the CRT Render Pipeline Observable

January 12, 2026

Preview

After unifying the render pipeline in the last dev log, it was time to stop adding features and start asking harder questions.

The CRT output looked good, but parts of the system were opaque. Some parameters felt fragile. Others were hard to reason about. Resolution changes could subtly break things.

Most importantly, I felt like I was often guessing when debugging the render pipeline.

This dev log is about turning the CRT from a black box into an inspectable system. Debug views were added, energy flow was visualized, and a core masking bug was fixed by treating phosphors as a physical gate instead of a cosmetic effect.

Along the way, instrumentation caught a serious startup performance regression before it snowballed, reinforcing why observability matters just as much as visuals.

RetroEngine CRT debug views Read Full Log

This is just a short summary — click above to read the full log.

🧱 Dev Log 9 — One Pipeline, Real Scenes

January 4, 2026

Preview

After cameras became real scene entities, another problem became impossible to ignore.

Lighting was still global.

It worked, but it wasn’t authored. Lighting changes leaked between scenes, couldn’t be reasoned about in isolation, and didn’t actually belong to the data model yet.

Fixing that led to a larger shift.

Sprites, meshes, cameras, and lighting now all flow through a single unified rendering pipeline. The old 2D test renderer is gone, and scenes are finally self-contained and trustworthy.

Along the way, some hard problems surfaced: entity duplication, deletion safety, and GPU ownership and those were fixed at the root instead of patched over.

RetroEngine lighting and sprite scene Read Full Log

This is just a short summary — click above to read the full log.

🎥 Dev Log 8 — Cameras Come to Life

December 18, 2025

Preview

The last dev log was about scenes. Saving them, loading them, and fixing the subtle ownership bug that made everything fragile.

That work mattered. Retro Game Engine finally had memory.

But once the dust settled, something was still missing.

I could author scenes. I could place entities. I could tweak transforms. But interacting with the world still felt indirect.

Every scene used the same fixed camera.

It worked, but it was frustrating to work with. I needed the ability to set different cameras per scene, and on top of that, a way to utilize an "editor" camera with input controls to move around and examine things better.

RetroEngine camera screenshot Read Full Log

This is just a short summary — click above to read the full log.

📦 Dev Log 7 — Scenes, State, and the Cost of Ownership

December 12, 2025

Preview

RetroEngine now supports full 3D scene saving and loading. Entities, meshes, materials, textures, and transforms serialize cleanly to disk and can be reloaded through the editor. This marks the transition from a live rendering sandbox to a real world-authoring tool.

Getting there exposed a subtle but critical engine bug. Loading a second scene reliably crashed the engine, not due to leaks, but due to incorrect ownership boundaries between the editor and renderer. Fixing that architectural flaw stabilized multi-scene loading and laid the groundwork for future features like cameras and per-scene lighting.

RetroEngine editor scene overview Read Full Log

This is just a short summary — click above to read the full log.

🚀 Dev Log 6 — Lighting, Materials, Mesh Importing & The CRT Reality Check

December 06, 2025

Preview

This update pulled RetroEngine out of the prototype phase and into real rendering territory. Albedo textures now work across the entire engine, a proper lighting system is in place (directional + ambient), emissive behaves like the hardware that inspired the project, and the editor can import real OBJ models end-to-end.

The CRT pass exposed tiny shading issues that the raw framebuffer completely hid, and fixing them led to one of the most satisfying wins so far: importing a full spaceship model and having it light correctly on the first good compile. A three-line bug in the OBJ importer was the final boss, and once it fell, everything clicked into place.

First successfully imported ship in RetroEngine with lighting and CRT Read Full Log

This is just a short summary — click above to read the full log.

🧩 Dev Log 5 — Sprites, Materials, and The Great Sorting Adventure

December 03, 2025

Preview

This update was all about taking the 2D and 3D pipelines and combining them to behave like a real engine. Depth sorting finally works, sprites get their own textures, and materials no longer bleed between entities. It wasn’t easy, a lot of this felt like stumbling in the dark until things clicked, but the engine is much stronger for it.

Two videos in this log show the new per-entity material editor and proper depth-sorted transforms in action.

Preview for Dev Log 5 Read Full Log

This is just a short summary — click above to read the full log.

🛠️ Dev Log 4 — The Editor Takes Shape

November 18, 2025

Preview

This update marks a major turning point for RetroEngine. What began as simple debug panels has grown into the first real editor: a fully dockable interface powered by ImGui’s docking branch, tied directly into the engine’s live rendering pipeline.

Scenes can now be edited in real time; adding and removing layers, adjusting parallax, importing textures, updating names, and instantly seeing the results through the CRT simulation. A new import pipeline ensures every PNG is safely brought into the project structure, and JSON scene files now save and load reliably.

RetroEngine editor overview Read Full Log

This is just a short summary — click above to read the full log.

⚙️ Dev Log 3 — Parallax in Motion

November 09, 2025

Preview

In just a few days, RetroEngine took a major step forward. The engine can now render true 2D parallax scenes, built entirely on its custom DirectX 12 renderer and running through the same HDR signal path as the 3D stage.

This isn’t just a visual feature. It’s the first proof that RetroEngine’s rendering core can support a full 2D pipeline — modular, efficient, and deeply tied into the CRT simulation. Every pixel is treated as light, not color data, which means the behavior of the image is physically modeled from input to glass.

First 2D test in RetroEngine Read Full Log

This is just a short summary — click above to read the full log.

⚙️ Dev Log 2 — Building the Foundation

November 07, 2025

Preview

With the CRT renderer stable, this phase focused on structure and scalability; defining how RetroEngine organizes and renders its world. The new ECS-style architecture introduces clean separation between data and behavior, with components for scenes, materials, and gpu meshes, driving a modular pipeline.

The first 3D scene renderer now runs with verified Blinn–Phong lighting, world-space normals, and HDR output feeding directly into the CRT simulation stage. This milestone proves the engine’s rendering core is stable enough to support both 2D and 3D pipelines under a single system.

First 3D test cube rendered in RetroEngine Read Full Log

This is just a short summary — click above to read the full log.

🧠 Dev Log 1 — From First Light to First Frame

November 05, 2025

Preview

RetroEngine began as a blank D3D12 window, a personal experiment to see if a CRT could be simulated not as a filter, but as a physical system. Within the first week, that idea evolved into a functioning real-time display model, complete with beam scanning, phosphor decay, and color-accurate light response.

The renderer now reproduces real phosphor layouts, beam afterglow, and even a simple 3D scene, all rendered through a fully simulated CRT pipeline. This marks the foundation of RetroEngine’s goal: not imitation, but reconstruction of analog light.

Preview of the first RetroEngine CRT render Read Full Log

This is just a short summary — click above to read the full log.