Monday, August 31, 2009

Advanced 3D Technologies in Puzzlings

The App Store is loaded with hundreds games from all corners of the globe. In this environment it's imperative that innovation and polish be at the forefront of every development project. Here at Bight Games we use this mandate for every game we create. Technically we always try to push the limits of the hardware that we're working with and constantly challenge our developers. When we started Puzzlings for the iPhone, there was a lot of work to be done. The art team had come up with an ambitious character that needed to be incredibly detailed and be able to look like almost anything.

The Puzzling texture design called for millions and millions of possible combinations between all the items and palettes that can be chosen. Underneath this immense scope is a rather simple tech that powers most of our games graphics and animation: BightSprite. This technology allows for graphics, textures and animations to be dynamically generated on the fly from a database of heavily compressed and optimized base image sets. Using a pre-defined layout these images are layered, coloured, and organized into their desired form. Since it is also a lossless format, the quality level remains incredibly high, while the file size remains low. Despite this apparent contradiction, the millions of possible textures for Puzzlings lives in one single BightSprite file only 572 kilobytes compressed. To put this in perspective, if saved individually as pngs, those textures would take up over a gigabyte!




The remaining challenge was in the actual character model. The art team wanted a very high level of articulation and fluidity with a very high polygon count, something we had never tried before. The designers presented us with a design for a 4000 polygon smooth skinned character with 27 bones with 4 weights per vertex. The first thing that we tried was using the built-in OpenGL ES extension for matrix palette skinning. This seemed like the best solution as all the calculations could be done as part of the standard rendering calls, and it should be done in GPU hardware. However, this extension only supports 9 bones at a time, and the calculations are done in the CPU, creating a potential stall situation in the driver. Instead, we created a custom skinning solution optimized with some ASM. This allowed us to meet the high weighting requirements of the system, and implement a system with enough performance to be able to handle the number of bones and transformations required.





The final product speaks for itself. The character movement and flexibility is unchallenged anywhere in the App Store, setting a high bench mark for future titles. By challenging our current limits and leveraging existing experience and technologies, we will continue this trend for all our titles.




Sean Wylie-Toal
CTO, Bight Games
sean.wylie-toal@bightgames.com


No comments:

Post a Comment