34 1. Introduction
duced a product that att empts to redefi ne how character motion is handled in
games and other forms of digital media.
Its fi rst product, Endorphin , is a Maya plug-in that permits animators
to run full biomechanical simulations on characters and export the resulting
animations as if they had been hand-animated. The biomechanical model ac-
counts for center of gravity, the character’s weight distribution, and detailed
knowledge of how a real human balances and moves under the infl uence of
gravity and other forces.
Its second product, Euphoria , is a real-time version of Endorphin intend-
ed to produce physically and biomechanically accurate character motion at
runtime under the infl uence of unpredictable forces.
1.6.5. Platform Independence Layer
Most game engines are required to be capable of running on more than one
hardware platform. Companies like Electronic Arts and Activision/Blizzard,
for example, always target their games at a wide variety of platforms, because
it exposes their games to the largest possible market. Typically, the only game
studios that do not target at least two diff erent platforms per game are fi rst-
party studios, like Sony’s Naughty Dog and Insomniac studios. Therefore,
most game engines are architected with a platform independence layer, like
the one shown in Figure 1.16. This layer sits atop the hardware, drivers, oper-
ating system, and other third-party soft ware and shields the rest of the engine
from the majority of knowledge of the underlying platform.
By wrapping or replacing the most commonly used standard C library
functions, operating system calls, and other foundational application pro-
gramming interfaces (APIs), the platform independence layer ensures consis-
tent behavior across all hardware platforms. This is necessary because there is
a good deal of variation across platforms, even among “standardized” librar-
ies like the standard C library.
Platform Independence Layer
Platform Detection Atomic Data Types Collections and Iterators File System Network Transport Layer (UDP/TCP) Hi-Res Timer Threading Library WrappersGraphics Physics /Coll. Wrapper
Figure 1.16. Platform independence layer.
1.6.6. Core Systems
Every game engine, and really every large, complex C++ soft ware application,
requires a grab bag of useful soft ware utilities. We’ll categorize these under
the label “core systems.” A typical core systems layer is shown in Figure 1.17.
Here are a few examples of the facilities the core layer usually provides.