Crytek's Licensing Team technical designer Ade Esan looks at how a real time development engine can improve the quality of a project
As the popular statement says, ‘ideas are cheap’. And why shouldn’t they be? When you are given the tools and time to experiment with lots of different ideas, to find the one that really works, discarding earlier and lesser concepts is easy. In such an environment ideas really are cheap and the most suitable ideas can be chosen and developed. But let’s think about when an idea becomes expensive.
Ideas become expensive when it takes a long time to implement them, a long time to test them and a long time to change them.
A real time development engine keeps ideas cheap by reducing their time cost in all these areas. Without having to recruit the services of a programmer it’s possible, for example, with CryEngine 3 to create new Gameplay entities; from items the player can interact with to simple AI characters, using simple LUA files, as such, the implementation cost is greatly reduced.
Furthermore, it’s possible to edit the LUA scripts and have the sandbox editor running at the same time.
This is extremely useful as changes to the LUA scripts will be updated in the editor and thus are ready for testing immediately. There’s no need to close and reopen the editor, and the changes are propagated to other parts of the editor that interact with the entity such as FlowGraph, our visual scripting system. The instant update and real time feedback really does encourage tweaking and experimenting in those early stages of development.
The inherently iterative process of game development tends to demand a certain order be given to tasks based on their perceived production cost. Tasks that are seen as costly are pushed towards the later stages, when there can be more certainty about their implementation, as changing them could be costly. This is of course fine if there are valid dependencies but not when the decision is due to the costly process of implementing the task. This just means a valid task gets less time than might be required spent on it.
A good example of such a process is lighting. Lighting methods that rely on pre-baked solutions or manually created shadow maps are time consuming and deliver a disjointed workflow. Real time lighting; calculating diffuse/indirect lighting in the form of global illumination and direct lighting from light sources using deferred rendering, drastically changes the way artists work. This improved workflow of having the ability to place a light source in the world and instantly see the final result on objects, other lights and shadows is clearly evident, but by also reducing the time cost of the task it means that the task can begin earlier in the development stage as changes that need to be made are cheaper. This gives artists more time to perfect the lighting in the world.
When developing across multiple platforms, ‘test it on consoles’ becomes more than just a mantra. As anyone that has worked on a console product knows this is not always such an elegant task, it typically involves lots of back and forth between the pc and consoles.
With Live Create, a real time development tool in CryEngine3, this process has been brought inline with the real time philosophy of the engine. Running the game on all three platforms simultaneously with edits made on the pc being propagated in real-time onto the consoles, comes into its own when optimising in the last stages of a project.
When running a project on consoles and the developer notices performance drops, it’s possible to use built in debugging tools to locate the problem; a rogue PFX or poor culling, and see in real time if deleting, moving or otherwise replacing an entity in the editor improves the performance on the consoles. This significantly lowers the cost of testing on consoles and displaying real-time results allows for more effective optimisation across multiple platforms.
For me real time development is about more than amazing technical solutions to challenging problems, it’s about removing the downtime in my day where I’m waiting for something to rebuild, or opening and closing programs to see changes. It’s about keeping all the systems I use in sync and making my working day a smooth ride and not a start and stop operation.
In conclusion, whether you’re using middleware or internal engines, any opportunity that arises where you can implement some real-time features into your engine will pay dividends throughout the whole development process by reducing the time cost of a task. You should always make time to implement time saving features; the quality of your project depends on it.