WickedP text logo

Hyperion

History: view complete post history here.

Hyperion is a 3D render engine for Cinema4D. 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 Cinema4D’s SDK meant that I had to jump through some tedious hoops to get what I wanted in order for the Dark Room to work. However, an alternate way around this was to write my own render engine. I decided to take on this challenge, which was a big call – I’m not a seasoned programmer, and writing a render engine is no small task.

Now, there’s a few ways you can write a render engine. I chose to use real world physics as opposed to something that might cut corners. I wanted to work with with photons and light waves, and not your typical RGB colour values.

This is quite of a hill to climb, so it needed a name to suit. I went looking for one I could borrow (eh, use!), and I found one in the Greek Titan of Light. His name was 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 a camera and lens. 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, and even the size of light waves themselves. 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. But, it does have some 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 information, but there’s no ‘fakery’ going on in that respect. There’s no “Gaussian blur” to cheat depth of field. Just plain physics.

I’ve tried to build Hyperion using everything I can from the real world around us. In doing so, I’ve developed my own custom rendering attributes. For instance, you can choose between how the engine renders, like scanline or bucket rendering. While these aren’t new to render engines, one render type I made probably is. You see, I use to develop my own film with chemicals (yes, real film and real film development!). So, I made a render type that does just this. I call it the ‘Dark Room Developer’. This method of rendering develops your image like a real film chemical developer – you can see the image appearing as time goes on. It might sound like a cheap trick, but it’s not. It genuinely renders like this. I consider the ‘Dark Room Developer’ to be Hyperion’s premium render type.

The engine is being built 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 yet. You’ll need to keep your eye on the projects section in future for this one!

Hyperion is not made to be a final renderer, more a preview engine. But, there’s probably no reason why it couldn’t head that way in the future if time permits. Below is an example 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 ‘precise’ or ‘harsh’ like computer generated stuff usually is.

Example render from the Hyperion engine. Note the ‘film’ noise.

Before this engine existed, I was thinking of developing another program (and still ‘sorta’ am), which was going to use white marble as the default colour. This was in acknowledgement to the days of artists like Michelangelo who spent so long chipping away at statues like David. These statues were often made of white marble, so I thought it would be a nice touch to use this somewhere, and decided to use it as Hyperion’s default rendering texture colour. This might be where the engine get’s it’s slightly softer whites from.

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 to be a normal Cinema4D render engine in the future. After all, it is sitting there in the settings as an option! But for now, I need to add in some of the missing physical aspects, and more importantly get it back into the Dark Room to bring that project back to life.