Over the summer, we employed some of our undergraduate engineering students to help out with research projects as summer interns. They explored a range of opportunities and a bunch of cutting edge tech and ideas, such as Brain Controlled Interfaces for Design; Gesture-driven CAD and Immersive Prototyping.
To enrich their time with the lab, many of our lab members gave a talk on a specialist topic. These topics were chosen as the students will most likely not have come across then as part of their studies, but have proven invaluable to us in our research. Other topics were setting up python IDEs, the use of source control for collaborative programming, and using network graphs to store and explore data.
My specialist topic was on game engines, with a focus on how the toolset has outgrown its initial purpose of creating games, and now facilitates a whole host of capabilities and industries beyond gaming – including research! This post will walk through the presentation contents, what game engines are good at, where they are being used, and why you might find them useful as a researcher.
Game engines are complex pieces of software, and consist of huge numbers of flexible and interfacing systems, in which many parts are opt-in depending on your creative requirements. The engine must be flexible enough to ensure you can create what you want to create, even if what you want to create is further functionality of the engine through creating a plugin. At the time of writing, Unreal Engine 4.27 comes packaged with 184 togglable plugins e.g. VR support, audio capability.
In addition to any embedded or external plugins, the core functionalities of a game engine are to enable:
- Rendering of 2D/3D objects (show your cool assets)
- Interaction with 2D/3D objects (move your cool assets)
- 2D/3D objects to interact with each other (physics engine/AI)
- Integrated memory management (garbage collection)
- Integrate external libraries (sound/hardware/networking)
- Platform agnostic development (packaging)
Traditionally, you would use a game engine to quickly get to the good stuff. The good stuff usually being, interaction with your assets without needing to first write interaction engines (such as keyboard drivers) and being able to work collaboratively (artists, programmers etc all working in/towards a single program).
An emerging trend is that industries are seeing the value of game engines when used in non-game industries. This is being acknowledged and led by industry and engine developers. Some examples of these can be seen in the image below.
Top-left: building machine learning algorithms through auto-labelling of virtual items in a high fidelity scene. This potentially removes the requirement for manually generating and labelling huge datasets.
Top-right: a parametric building façade generator, used to support an architectural design course and provide a quick way to iterate and explore a design.
Bottom-left: using real-time rendering for high-end automotive configuration tools. This can act as a sales tool, to show potential customers concepts, and allow them to configure predetermined aspects of the car.
Bottom-right: BBC Match of the day broadcast live using a completely virtual set, with only the presenters, the table and their chairs being physical. Instead of using a green screen to put a scene behind the subject, the subjects can be placed in a 3D and interactive environment.
There are the tools and potential for game engines to be utilised to support:
- Film & television
- Broadcast & live events
- Automotive & transportation
- Virtual production
- Human-machine interface
- Parametric / procedural design
The advantage of game engine is the ability to act as an end point or intermediary between many different pieces of software and data types. Using software such as Datasmith or pixyz, most CAD models can be bought into the engine. External plugins and their functionality can also be bought in, such as Matlab, OpenCV, and ArcGIS.
A common question is how to pick the right game engine for you and your project? They have similar fundamentals, but their capability and internal structure can be vastly different. Assuming some prior programming knowledge, I recommend learning game engines in the following three stages.
Unreal Blueprints are perfect for getting up to speed with game engines. Being able to be guided by node-based programming means more time can be spent on learning how the game engine components interact, rather than the syntax or programming paradigms.
Unity then offers great scripting capability all the way up to complex AAA game potential. If you are more comfortable with programming and want more control from the start, then this is a great starting point.
Finally, Unreal C++ is incredibly powerful, but starting here is extremely difficult. The documentation isn’t great, and learning the syntax in tandem with the fundamentals of programming and game engines means the learning curve is steep.
Returning to the key point, the utility of game engines by industry is growing. They are powerful and capable pieces of software, enabling means to visualise, capture, explore and analyse data and assets. Paired with the ability to integrate a range of plugins and external software means it can be an excellent tool to measure users or systems and explore and analyse the generated datasets.
If you are keen for a demo or want to see how we are using game engines to enhance our research, let me know!