RSSAmplifier

Blog

Blog - Harold Serrano | Game Engine Developer

I'm developing a 3D Game Engine using Metal and C++, and I share all my knowledge of these topics on this blog.

haroldserrano.comRSS feed ↗20 posts

Latest posts

The Performance Fix That Accidentally Solved Anti-Aliasing

A few weeks ago I ran into a frustrating problem in the Untold Engine. Thin geometry would shimmer noticeably on Apple Vision Pro, and no matter what I tried, I couldn't get the results I wanted. I experimented with SMAA, explored a few other options, and eventually reached a point where I wasn't sure what to do next. So I stopped working on the problem. Instead, I focused on performance. What…

I Wish I Added This to My Game Engine Sooner

When I first started building the Untold Engine, I was obsessed with adding new features. Rendering systems, lighting, post-processing, you name it. What I wasn't doing was measuring. Looking back, one of the biggest mistakes I made was waiting too long to build instrumentation and profiling tools into the engine. As the project grew, performance slowly regressed, and I had very little visibility…

I Promised Myself I'd Never Build Another Asset Format

A few years ago, while working on the C++ version of the Untold Engine, I made a decision that came back to haunt me: I built my own asset format. When I rewrote the engine in Swift, I promised myself I wouldn't make the same mistake again. Instead, I adopted industry-standard formats like USD and built the asset pipeline around them. For a while, that worked great. But once I started implementing…

AI Is Making Engineers Obsolete - It’s Not What You Think

AI is getting very good at writing code. So what does that mean for software engineers? After months of building the Untold Engine using Claude and ChatGPT, I realized AI isn't just a faster way to code — it's changing what engineering actually means. The developers who ignore this are going to fall behind. Fast. In this video I break down why the value of writing code is collapsing, what AI still…

I Had To Stop Thinking Like A Graphics Engineer

I spent years thinking that if the rendering was good enough, the engine would speak for itself. Better visuals. Better performance. More advanced rendering features. But eventually I realized something uncomfortable: great rendering alone doesn’t make a great engine. In this video, I talk about the mindset shift that changed how I approach the Untold Engine — from thinking purely like a graphics…

The Debugging Systems I Built for My Game Engine

Building a game engine has completely changed the way I think about debugging software. For a long time, my workflow was simple: Open the code editor, add breakpoints everywhere, inspect variables, and hope I could eventually find the root cause of the problem. That worked when the engine was smaller. But as the Untold Engine grew more complex — with rendering systems, tile streaming, texture mip…

The Hidden Cost of Building a Game Engine Editor (Why I Scaled Mine Back)

Building a game engine taught me something unexpected: The hardest part isn’t always writing the renderer, implementing XR support, or optimizing performance. Sometimes, the hardest part is deciding what NOT to build. In this video, I talk about why I decided to dramatically scope down the Untold Engine Editor, the mistakes I made, and the engineering tradeoffs that come with maintaining complex…

I Thought Unit Tests Would Slow Me Down… I Was Wrong

When I started building the original C++ version of the Untold Engine back in 2013, I focused on building systems from scratch: Rendering Physics Collision Math libraries But there was one engineering practice I completely ignored: Unit Testing. At the time, I thought tests would slow development down. Instead, the opposite happened. As the engine grew, regressions became part of the workflow.…

I Thought SMAA Would Fix XR Shimmering

I implemented SMAA in the Untold Engine hoping it would solve the shimmering and aliasing artifacts I was seeing in large XR scenes on the Apple Vision Pro. At first, things looked promising. SMAA uses multiple rendering passes, edge detection, blend weight calculations, and precomputed lookup textures to produce sharper anti-aliasing than FXAA. But once I started testing massive stadium scenes…

I Tried Rendering This Archviz Scene in Vision Pro… Then This Happened

I tried rendering a full archviz bedroom scene on the Apple Vision Pro using the Untold Engine… and while the results looked immersive at first, I started noticing some strange XR rendering artifacts. In this video, I test the scene live inside Vision Pro, explore issues like shimmering walls and unstable surfaces, and talk about some of the rendering challenges that start appearing when pushing…

Can the Untold Engine Stream a Virtual City on Vision Pro?

This 3D cartoon city contains a large amount of geometry and assets — and today, I wanted to see if the Untold Engine could actually stream it into the Apple Vision Pro in real time. The challenge is that XR devices like the Vision Pro are very memory constrained when rendering large-scale scenes. Loading everything at once can easily overwhelm the renderer or crash the application entirely. So…

I Rendered an F1 Car in Real Life (Vision Pro) | Untold Engine

I rendered an F1 car in real time inside Apple Vision Pro — powered by my custom Swift + Metal renderer, the Untold Engine. In this video, I walk through how to load and render complex 3D models directly in your environment using the Untold Engine. If you're building XR / spatial computing apps (Vision Pro) or want to learn real-time rendering with Swift + Metal, this is for you. 🔗 Try the Untold…

What It Took to Finally Stream Assets Remotely in the Untold Engine

One of the features I wanted to add to the Untold Engine for a long time was remote asset streaming. Streaming an F1 Car using the Untold Engine + Vision Pro The challenge wasn’t the networking part. The issue was that the engine assumed everything was loaded, available, and resident in memory at all times. That model doesn’t work once you introduce streaming. So instead of jumping straight into…

Lessons Learned: When the Drawable Leaks Into Your Render Pipeline

This week, while rendering scenes in Vision Pro using the Untold Engine, I realized that scenes were being rendered with the incorrect color space. Well, initially, I thought it was a color space issue — but something was telling me that this was more than just a color space problem. After analyzing my render graph and verifying the color targets I was using in the lighting pass and tone mapping…

Lessons Learned: Vision Pro, Large Scenes, and Threading

This week I came across an unexpected issue. Loading a large scene on the Vision Pro would result in a run-time error. But loading the same scene on macOS did not. Both macOS and visionOS use essentially the same loading and rendering path. So what could be causing the issue? To make things worse, the run-time errors were cryptic and pointed to different functions each time the application…

Lessons Learned While Adding Geometry Streaming

This week I worked on adding Geometry Streaming to the engine and fixed a flickering issue that had been quietly annoying me for a while. Both tasks ended up being more related than I initially expected. BTW, here is version 0.10.0 of the engine with the Geometry Streaming Support . Geometry Streaming Wasn’t the Hard Part — Integration Was Getting Geometry Streaming working on its own wasn’t too…

Untold Engine Updates: LOD, Static Batching and More !!!

Hey guys, It’s me again with a new update on the Untold Engine — this time focused on user experience and performance . You might find this a bit odd coming from an engineer, but user experience matters a lot to me. Sometimes, I even see it as more important than performance itself. I know, that sounds backwards. But honestly, I don’t care how fast a tool is if the user experience is bad. If it’s…

Untold Engine Updates: Multi-Platform support and Camera Behaviors

Hi guys, Me again with some updates on the status of the Untold Engine. As always, I’ve been working diligently on the engine. Over the past two weeks, I focused on implementing multi-platform support, fixing several async issues with scene loading, and starting work on a couple of camera behaviors that I needed for benchmarking and game testing. So let me walk you through what’s new Untold Engine…

Untold Engine Updates: Faster Scene Loading, SSAO improvements, CLI

Hey guys, I’ve been working hard on improving the engine lately—both performance-wise and editor (user-experience) wise. Faster Scene Loading with Async Asset Loading One of the main issues I fixed in v0.7.0 was the long wait times when loading heavy scenes. I don’t have hard numbers, but it was definitely taking longer than what’s acceptable for a game engine. The main issue was that we didn’t…

Untold Engine is Growing Up

I’ve been working on the Untold Engine for nearly 12 years. I started in 2013, back when I didn’t even know what version control was. The early versions of the engine were crude, fragile, and limited—but seeing it improve, fix by fix, was deeply motivating. There were many points along the way where I wanted to quit. Days where I was tired of touching the engine at all. At one point, I stopped…