Making of Heroki - Engine Design

Today, we'd like to talk about the proprietary Picon Engine which has been built from the ground up for almost 5 years. We're going to talk about its features and why we've chosen to build a game engine ourselves. 


In this day and age, it’s kind of a logical choice for most indies to go for an 'out-of-the-box' engine solution such as Unity or Unreal due to lack of time, money and resources. All pretty valid reasons we might add. But back in the day when we started the development of Heroki (2010), Unity was still catching up in popularity and Unreal was still very much unaffordable for indies (which they later changed into a monthly subscription).  

So why did we build our own engine and would we do it again? 

The short answer is yes. And here’s the why:

Being the control freaks we are, we like to have full control over what’s going on in our games and under the hood. Because we've built every inch ourselves, we can customize pretty much everything the way we want. That means we can achieve the best possible performance - solid 60FPS, with the best possible graphics. 

Building an engine from scratch had - of course, also its cons for us: For instance, we had to work with serious limitations due to limited workflows (workflows which we'll greatly improve for future projects), but in the end - we found out that those limitations were exactly what made us more creative. We often had to think outside the box to get to a certain solution and the road to get there provided us with tons of experience. 

Another reason is because we can. Heroki has proven to be a one of a kind project for us, because we never had any real ' pressure'  or deadlines since the game has been a spare time project from the beginning. It basically means that we had all the time to perfect the Engine for Heroki and making it best the possible.

We can also say that we're truly independent without paying any licenses to third parties whatsoever - which is obviously a nice plus. Another thing we do not find totally unimportant is that most of the major studios we respect make games with their own tech, with good reasons. Our goal is to keep investing in our own tech, so that we can keep making awesome games and hopefully one day, we’ll be listed as one of them as well.

So what can it do?
The Picon engine is designed to work on multiple platforms, but for now, we only focused on the iOS implementation. It is written in C++ and uses OpenGL for rendering (which will probably be replaced by Vulkan in the near future). We knew from the beginning that performance was key, as we wanted to target 60FPS for Heroki. Lots of features were added over the years so it was quite a puzzle to fit them all in-game, while maintaining the target frames per second.



The Picon Engine is also designed to be separated from the game code, so that it can be reused for future projects. Over the years, the Picon Engine has been fleshed out to be a fully featured engine - with lots of the features you see in other engines this day and age. 

Here is a brief overview of some of the modules we have:

Animation
This module takes care of all the smooth animations you see in Heroki. It has skeletal animation support and it uses custom kinematic techniques, which blends seamlessly between physics and animation. 
GameObject
This is where most of the magic happens as this is the main heartbeat of the game. It is responsible for managing all game objects in a level. Each game object has a set of features to define it's behavior. There are hundreds of game objects in Heroki, so it was not an easy task to keep them all under control.
Physics
This module uses a custom version of Box2D for most of our in-game object behaviour. We customized some of Box2D's features to give us more freedom such as time scaling. This feature lets us slowdown and speedup individual physics objects, which opened up a lot of doors for gameplay.
Renderer
This module is responsible for showing  those colorful pixels on the big screen :) In Heroki, we use several render passes, blending types, vertex / fragment / geometry shaders and special post effects to achieve those vibrant scenes you see in-game. To name a few: real-time shadows, rim-shader, bloom, ambient occlusion, refraction / distortion shader, dissolve shader, lens flares and lots more. 
Particle System
We have our custom 3D particle engine which renders rich multi layered particle effects on-screen. Different kinds of emitters, facings and affectors are supported such as scaling, rotators, color interpolators and much more. 
Audio
We have a positional audio system in place that we use to render audio in a 3D world. That means all the audio matches up with the in-game visuals. We've built custom audio features as well such as true audio sync. In Heroki, we heavily rely on audio tracks being in sync with each other like we do in Heroki's village. All the positional audio for the individual islands are in sync with the main tune. Other times we wanted to sync the audio to play right after each other (cutscenes). You would be surprised how much work was involved in these features :)
Scripting
Most of our game logic is written in C++, as we wanted to be sure that all our game logic would perform top notch. We do use our scripting library (which uses LUA) for our cutscenes and NPC dialogs. This proved to be a great success, as the iteration times are way smaller than when we had to code this all in C++.
User Interface
Our UI system combines the power of several of our modules together (physics, animation, particles, etc...) which provided endless creativity for us to create dynamic, fluent and highly polished menus for Heroki and future games. :)

We're hoping to announce the actual release date for Heroki real soon on our blog. Meantime, we'll continue the making-of series in the upcoming weeks! :)


0 reacties:

Een reactie posten