17.12.08

scimitar engine ++


Far Cry 2, Ubisoft Montreal (10/21/2008)

Using what I've learned from defensive driving in 'Grand Theft Auto: San Andreas,' I attempt to take out a target of opportunity. How does it end? Play the video to find out.
Engines have been used throughout the history of gaming. By definition, an engine is 'anything used to effect a purpose; any device or contrivance; an agent' (Shakespeare). That age old definition still applies to game development. In this entry, I will discuss a more specific engine, Scimitar, and how it was used in 'Assassin's Creed,' and more recently, 'Prince of Persia.' I'll attempt to be less technical than usual as to appeal to the general viewer and as not to impart too much information.

Game Specific Engine

Back then, in the earlier days of the gaming industry -- when most companies were independent, and a team consisted of only a handful -- engines were often developed for a new game and then modified or reused in the next incarnation. In the past few years, you will find some developers creating an engine specific to a game itself. This poses the problem that a game's development time is dependent on the progress of the engine itself. This is an inefficient way of spending resources and time that would otherwise go into game specific content, for example.

The best way of creating an engine is with flexibility in mind, to make it open-ended and have various venues for expansion. Scimitar closely matched the general idea of the project, 'Assassin's Creed,' that 'nothing is true; everything is permitted.' From a programmer's standpoint, truth is merely the two boolean values of 0 and 1. And if taken from a metaphysical view, the function of not having a true value meant that it was infinite or undefined.

Scimitar

Scimitar is an engine that incorporates various tools, both internal libraries and external middleware for a streamlined experience. The game, 'Assassin's Creed,' has a library of tens of thousands of animations, a similar amount of dialogue and sounds, various menu interfaces. AutoDesk Maya's Human Inverse Kinematics middleware was used for collision detection and character interaction with the environment, mapping Altair's hands and feet to the surfaces. Image Metrics was used to sync and map an actor's mannerisms and incorporate that into the sequences you see in the game. Havok was used to simulate physics, giving weight to the character's gaits, and controlled the direction of the collapsible objects and or people.

The engine itself had to be designed and optimized for multi-threading, which is a dominant feature in the next generation. The environment itself was created in 3dMax and the characters, with Pixologic's Z-Brush. The challenges that arise from creating an open ended game meant that you had to take in account that the player would be at any given moment at any time, interacting with the environment in various ways. This meant that rendering the environment and the non-playable characters had to be done dynamically based on the character's immediate area and general position.

AI

Artificial Intelligence has always been very important in the way players interact with the in-game environment. As much as 150 unique characters can be populated on screen. This is possible due to assigning random values to the character's body type, shape, gender, and apparel. No two characters should ever be exactly the same. Not only that, but they all seem to be doing their own thing. There were a combination of methods, such as path finding, animation, animation prediction, object detection, and inverse kinematics to make the N.P.C.'s come to life.

Challenges

With the horsepower that we have available for the next generation, it is very easy to come up with ideas that might be too taxing for the hardware. Sure, a game can look great and have extravagant effects, but will it look smooth? Will it play without a hitch? These are some of the things to think about when designing an engine. Memory is also a constraint, even though there is considerably more than we had 10 years ago, there will always be a way to fill that up to capacity. As we delve deeper into the next generation, worlds are slowly migrating away from linearity, meaning we have to think atleast 10 steps ahead and take into account the worse case scenarios -- that way the game is better equipped to handle these discrepancies.