Article Why we chose Unreal Engine
At first, without and engine
Back in the days of VirtualSociety Online, we made the choice not to use a game engine. VirtualSociety online being a web game, we had a few possible choices of engines, like Babylon.js1 or PlayCanvas2, but we made the choice to use only a rendering engine, ThreeJS3.
What is a game engine?
Unlike a rendering engine (like ThreeJS3), a game engine takes care of the different components of a video game, such as physics, sound mixing, inputs and outputs (keyboard, mouse, controller), etc.
Not using an engine had several advantages. First of all, it gave us the opportunity to build our own engine, perfectly adapted to our needs. At the time when VirtualSociety online was in 2D, the engine was made in a way that allowed players to create their objects directly inside the game. When we made the transition from 2D to 3D, some of the code could be kept, by integrating ThreeJS for rendering, which would not have been possible if we had used a 2D game engine.
Creating our own engine was also a very rewarding experience, as we were confronted with a lot of different aspects of video games, handling actions, animations, cameras, non-player characters, and sound.
When we decided to develop a game full time, and start all over again, we asked ourselves if it was better to create our own engine or use an existing one. While creating your own engine has some advantages, as we saw above, using an existing engine is often the best solution, especially for a small studio.
Why use a game engine?
There are plenty of benefits that come with using an existing, well-known game engine, including:
- Hiring is much easier! Indeed, hiring a developer or an artist familiar with Unreal Engine or Unity for example, is easy, because many schools teach how to use these engines. Learning how to use a well-known and widely used engine makes it easy to integrate into many projects. On the other hand, when using an engine created internally, new team members must first become familiar with the studio's way of doing things, which requires a lot of time and investment. Also, when a studio is looking to raise money to make a game, using a well-known engine increases investor confidence, in part because recruiting will be easier.
- Most major game engines are cross-platform. Porting a game to different platforms is time-consuming and challenging, so engines that natively support multiple platforms make this work much easier.
- Using an existing engine greatly speeds up the development of a game for many reasons. First, a lot of the complex calculations are already built into the engine, so you don't have to redo everything from scratch. Additionally, the engines are made by developers who have a lot of experience and knowledge of game development, so they usually set up a structure that will make development easier, and will push developers to adopt best practices in building their game. This can prevent many mistakes and wasted time.
For all these reasons, we chose to use an existing engine, rather than recreate one ourselves as we had done previously. One question remained: which one to choose?
Cross-platform game engines
Many game engines that meet our needs exist. We can for example mention Unity4, Godot Engine6 and Unreal Engine 5
We are not going to compare them here to find out which one is better than the others. All of them have their advantages and drawbacks, and it is wiser to compare their philosophies, their strong points or simply the choices they have made, and which will make them more or less attractive depending on the tastes and objectives of the developers. Instead, we'll explain the different reasons that made us choose Unreal Engine for VirtualSociety (and we're not saying that it would be better than another one, or that it's the choice we would have necessarily made for another game).
Our choice : Unreal Engine
First of all, let's be clear: choosing an engine is never a strictly technical choice. Each engine has its own philosophy, and will suit some developers better than others. Of course, some choices would be foolish, Fortnite could not have been developed with GameMaker, but the final choice of a game engine is always partly based on personal preferences. Here we will detail some of the criteria that made us choose Unreal Engine in our situation.
The strengths of Unreal Engine
- The Unreal Engine7 rendering pipeline is undoubtedly one of the best of the current game engines. It allows 3D designers to have very precise renderings and offers powerful and easy to use tools.
- Unreal Engine allows game development in C++, and lets developers access the engine's source code. This brings many advantages. Unlike other engines that use a separate scripting language, the code of a game made with Unreal Engine uses the same language as the engine, which allows it to better interface with it. This also allows for a better understanding of the engine's workings, as well as the ability to easily fix any engine bugs if needed.
- Lumen is the new global illumination system in Unreal Engine 5. This technology provides dynamic global lighting, without baked lightning. In our case, where the game is completely customizable by the players, we can't rely on pre-calculation of lights and shadows. Lumen is the ideal technology, allowing us to have sublime renderings in game, while maintaining a flexible world, editable by the players.
- The use of the Unreal Engine and access to the source code are completely free. Epic Game takes 5% of a game's profits when its revenues exceed $1 million.
- Unreal Engine is a trusted engine, used by many AAA games.
Like any engine, there are obviously good and bad sides, so far, we note for example:
- documentation is quite limited, especially in C++. Very often, beyond the simplest use cases, the best way to know how to do it is to read directly the engine source code to find similar use cases.
- 2D game support is very limited (or even absent without a plugin), Unreal is really focused on 3D.
- games developed with Unreal Engine are quickly heavy (both in terms of executable weight and resources required), which is particularly restrictive on mobile platforms.
There were a few other factors that helped us make our choice, although they are not technical or engine features. Among them we can mention:
- Epic Games supports independent creators, whether they use Unreal Engine or another engine if they share knowledge or resources to the community. They offer the Epic MegaGrant, a grant for 3D projects.
- Epic Games, like other companies, is fighting to reduce game royalties to distribution platforms (often very high, in the range of 30%), and to allow developers to distribute their software and games on free and open platforms.
- We have a certain admiration for the creator of the Unreal Engine, Tim Sweeney9, who continues to program despite the gigantic company he created, and who uses his fortune to preserve rare and endangered forests and animal and plant species.
5 Unreal Engine
6 Godot Engine
7 Wikipedia page about graphics pipeline
8 Godot Engine devblog article
Whats missing in godot for AAA
9 Wikipedia page about Tim Sweeney
Weekly review Weekly review #8
Hi folks! This week we have been working mainly on our world editor, and adding new props. As we announced last week, we will post a sneak peek every Saturday.
We continued to model items for bedrooms, including a lot of toys, plushes and decorations for children's rooms on different themes. Our editor is now advanced enough that each object has indications of the different predefined styles, editable settings, how it can be magnetized to other objects, etc. We also take a lot of time to define many styles for different objects, to give them multiple appearances and allow maximum customization!
We have also dealt with various specific situations, such as ticking clocks (for the alarm clock for example), or lava lamps.
Registration for the Game Developers Conference 2023 (GDC)
Next week, the GDC 2023 will take place in San Francisco. It's kind of the "event of the year" in the game development world. At this point, we don't have the budget to attend (tickets are expensive for a small studio, and just the trip to San Francisco for a week would drain our travel budget), but we were able to purchase tickets to attend online, so we'll be able to attend the conference next week!
We are also continuing the trainings and exchanges with the Incubateur Lorrain, which, in addition to giving us a great welcome every time (besides being nice, they always have great tea and cakes!), gives us really useful trainings!
Finally, we continued our progress on the world editor. This week we've been working on snapping objects, especially in specific cases of objects that need to fit together in a particular way, but we won't tell you more about that right now, you'll find out over the weeks in our videos!
Thanks for your support and see you next week!
Weekly review Weekly review #7
Hi folks! This week, Clélie tells you about our progression in the design of the main world, we joined the Incubateur Lorrain and the Peel, and we are working on the editor!
Design of the main world
This week we had a meeting to discuss the general layout of the adventure mode map. During this meeting, we sketched out the city by dividing up the major points of interest and defining its major areas and their architectural identity. Clelie considered several key criteria in designing the map, including the city's traffic patterns for different types of locomotion that will allow players to easily access the major game areas, but also leave room for smaller, off-the-beaten-path areas to reward explorers. She also drew inspiration from the local towns in the area, as well as from Prague and Luxembourg City, to incorporate verticality into the city, creating some lovely vistas and plenty of opportunities for exploration.
We join the Incubateur Lorrain and the Peel
Last week, we made an appointment with the Incubateur Lorrain to introduce ourselves and learn a little more about what they can provide in terms of guidance and support. After a very nice meeting, they advised us to go to the selection committee the following week (this Tuesday), which meant that we had to do the application in a very short time, and have less than a week to prepare our 20 minutes pitch in front of the 30 (or so) Incubator judges.
Shortly after our presentation to the selection committee, we got a positive answer, and we are now mentored by the Incubateur Lorrain, in addition to Peel and the Inria Startup Studio. These three mentorships are complementary and allow us to have access to different formations and networks of contacts. In fact, we had our first course from the Incubateur Lorrain this Thursday, on business models.
We are very happy to benefit from these two additional accompaniments which will help us, we hope, to make a wonderful game studio!
Progress of the world editor
Beyond the many meetings, committees and brief preparation, we were still able to make some progress on the VirtualSociety location editor. Over the next few weeks, we will show you a particular feature each week with a short video, we can't wait to show you all that!
Thanks for your support, and see you next week!
Weekly review Weekly review #6
Hi folks! This week we spent some time doing paperwork and attending different meetings, but we also got to work on the building editor and its objects and textures. We'll tell you all about it!
Files and applications
As we had already mentioned, if we know well the creation of video games, the creation of a company is less part of our skills. Since we want to create our own video game studio (which involves creating a company, as well as producing and distributing our games on different platforms), we need help and advice on these areas. In November 2022, we joined the Inria Startup Studio, which is a first significant help for all these elements.
However, we are still looking for other complementary help (incubators, grants), which can help us on other aspects of business creation, help with the hosting of the future company (once we leave Inria), as well as allow us to get the necessary funds to continue the development of the game (in addition to the crowd-funding you can join on Patreon).
So we spent a lot of time this week on these points, we won't tell you more for the moment (until we have answers), but having access to different incubators and programs could be an inestimable help for the future!
Modeling and editor
We've resumed work on the building editor (which is one of the most complex parts of the game), and we've added several useful features, such as filtering objects by tags, a better placement system, as well as new objects for rooms, and children's toys. Nous avons également continué l'intégration des objets sur les murs courbes.
We'll show you a first sneak peek of all these new features very soon!
Textures and materials
At the time of VirtualSociety Online, we used very few textures because of the constraints of a browser-based game (in order to limit the weight of the game to the slowest internet connections). Now we can afford to use many textures to define the way materials react to light (details, reflections, etc.). We will probably do a more in-depth article on this subject.
We've been designing and preparing a lot of materials this week, which you'll be able to see very soon in the upcoming previews of new features in our building editor. Our goal is to have a consistent and complete collection of materials and patterns that can be reused in the object predefined styles.
We can't wait to show you more! Thanks for your support, and see you next week.
Weekly review Weekly review #5
Hi folks! This week, we worked mainly on interaction animations, especially to place the player's hands correctly during certain interactions, such as opening a blind, picking up an object, etc.
Animations and inverse kinematics
After a busy week with the 'Féru des sciences', we worked on procedural animations, used for example to make our characters grab objects correctly, turn handles, or align itself correctly on the ground. In general, the player plays different animations mixed together depending on the context: when he walks for example, several animations are mixed together depending on the direction he is going, other animations are played simultaneously for other details (such as breathing, or to change his gait depending on his mood, level of fatigue, etc.). Finally, the player's bones are moved in code to respect certain constraints, for example to adjust the height and angle of his feet according to the ground.
In the example above, the player's left foot is moved up to match the height of the ground. This type of adjustment is not so simple, because you have to transfer the movement of the foot to the rest of the leg to get a natural and consistent pose, and that's where the inverse kinematics come in. Without going into details, it is a matter of allowing a part of the skeleton (here the foot) to move "freely", and to propagate this movement to the other parts while respecting different constraints (which correspond globally to the possible movements of the human body).
Luckily, Unreal provides very good and numerous tools to manage complex animations, and the animation of the character thus involves many systems that coexist and provide the final animation of the character. Briefly, the following steps are performed:
- State machines determine the current state of the character (falling, walking, running, stooping, standing, sitting, or carrying something with one hand, two hands, etc.).
- Depending on its state, different animations are played (blend space), depending on different parameters (e.g. walking speed, direction).
- In some cases, no animation is played and the physics determines the state of the skeleton (with a simplified physical model of the character). This is the case for example when the character falls, or for hairstyles with long hair, where the hair has a skeleton (yes, we do that in games :D), and the physics allows to move the bones according to the movements, as if it was a ragdoll.
- Additional animations are then mixed to modify the pose of the character (breathing, fatigue, etc)
- We then adapt the size and position of certain bones to adapt the character's morphology (certain parameters of size and build directly affect the bones)
- Finally, we apply the inverse kinematics to adjust the player's feet and hands (depending on the state of the ground, if he has to hold an object or grip somewhere, etc).
This week we adapted our interaction system, so that actions on objects can easily set constraints on the player's hands, for example to make the character grab a handle at a specific point. Our system isn't finished yet (this kind of thing needs a lot of tweaking), but it's a good basis for future interactions!
Skeletons are not only used in characters and hair, we also use them to constrain many physical systems, like cars. We didn't show it publicly at the time, so I'm going to take this opportunity to show you a playpen horse that Jimmy modeled a year ago, which we put a skeleton and physics constraints on to make it react properly (this was early on in our Unreal Engine experience, so we were trying to get a handle on different aspects that we were going to need for VirtualSociety).
Small fall and night in emergency services
On Monday night, while leaving work and going to the choir, Jimmy fell on his scooter, and we had to spend the night in the emergency room to make sure nothing was broken. Fortunately everything is fine, and Jimmy was able to return to work on Wednesday (with a splint).
Above is an illustration of Jimmy's condition after his fall ;) (by the way, the picture is a good illustration of what the "ragdoll" mode looks like.
Take care, thanks for your support and see you next week!