Hyperion

Hyperion is a custom built 3D render engine. It was born out of the need to render images for another piece of software I'm writing, called the Dark Room. If you've read up on the Dark Room project, you may be a little familiar with what's coming here.

It turns out, an annoying limitation in the software I use for animation meant I had to jump through hoops to get the Dark Room working the way I wanted. However, an alternate way was to write my own render engine. Kind of silly really - is that really necessary? Nope. But, I like a challenge, so I began writing my own render engine.

I chose to make my engine work a bit like how the real world does. I wanted to work with with photons and light waves, and camera sensors and lenses. For someone like myself, with no formal programming skills, it was a bit of a hill to climb. So, it needed a name to suit. And I found one in the Greek Titan of Light. His name is Hyperion, and so the engine took his name.

I didn't just design Hyperion to work around the physical world of light. I'm also including attributes that make it work like real world cameras and lenses. This includes thinking about the physical sensor size, the Bayer pattern of the sensor, the lens and field of view, the aperture and focus distance. Distortion. There's a few other things tucked in their as well, but you get the gist of it.

There are down sides to building something like this. An engine like this tends to be slower. This is because they need a lot of photon casts to get a clean image. So they're not good for real-time applications. But, they do have up sides. It renders some things naturally - like noise and depth of field. These do depend on your camera settings of course, assuming your engine can work with this kind of thing, but there's no 'fakery' going on in that respect. There's no "Gaussian blur" to cheat depth of field. Just plain physics.

The engine is designed to run on the CPU. Though CPU rendering is considered slower than GPU rendering (in some circles it's even labelled a dying art), it is much more universal to get to work on other operating systems. There's also another, more compelling reason I have, but I can't divulge that here. At least, not yet.

Hyperion is not made to be a final renderer, more a preview engine. Below is an early render where you can see the natural noise. It's a bit like film. There's no depth of field in this image, it hadn't been turned on at this point, but I like the soft white feel of it. It's not quite as 'precise' or 'harsh' like computer generated stuff usually is.

Example render from the Hyperion engine. Note the natural 'film' noise.

Hyperion is only designed to work under the hood for the Dark Room and isn't meant to be a final renderer. That said, it could evolve into one in the future. After all, it is sitting there in the render settings as an option!

A history of posts on this project can be found below. For more information on the Dark Room, please visit the project page here.

Project post history:

Specular highlights added (latest)
Surface refractions added
Rusty dragon render
Metallic reflections added
Making a new render interface
Fixing object normals
Textures added to renderer
First physically based rendered images
Rendering benchmarks
Fixing circle of confusion
Squeezing out more performance
Building better colour rendition
Further speed improvements
Rendering acceleration structures
Building a render cache system
Denoiser success
Starting on a denoiser algorithm
Clean depth of field render
Dead pixels issue resolved
Rendering true depth of field
I cracked normal maps
Early camera lens attributes
More efficient refraction
First IBL lighting
ACEScg colour space
First surface colours
Huge speed-up
Missing model parts fixed
Sitting in the wings