4. Hardware Prototyping
Because we were a launch title for new hardware, early support from the SCEI technology groups was going to be critical, and we got all the support we asked for. Chris Reese had this to say about our successes in developing for the new hardware:
Chris Reese: In the early days the challenge was prototyping proof of concept for gameplay ideas without the use of a game engine. Hardware prototypes for the PS Vita were changing frequently, and many of those prototype boards we had access to typically didn't have the full capabilities that the final hardware was spec'd to have.
This required us to work on very discrete elements of the engine that focused purely on a given aspect of hardware / gameplay that we wanted to test out and vet with the rest of the development team. Especially important was the inclusion of external groups within WWS / Sony / Sony Japan (SCEI) if hardware refinement was needed to make the gameplay feature work as designed.
We didn't have an engine, so we didn't have any pre-made assumptions as to what the hardware was capable of. Ultimately this led to the discovery of new ways to extend the Uncharted game experience and to the realization that by combining elements of motion, touch and traditional controls, we could create a unique integrated experience on the PS Vita that couldn't be achieved on the PS3 console. This was a key factor in confirming the direction of our technology and development for Uncharted on PS Vita.
Revisions of development hardware were always in short supply and had to be shared across multiple teams within Sony. Realistically, this meant our entire studio would often have one or two of the latest development kits -- which didn't stretch too well across a team of 50-plus people. To ensure we could move forward with production, the game and rendering engines were developed on the PS3, and in fact all production continued on our PS3 engine up until the final year, prior to launch of the PS Vita in Japan.
The PS Vita game and rendering engines were developed in tandem with the PS3. As we learned more about the performance of the hardware we could make better-educated assumptions on how the final target hardware would ultimately perform and consequently we would make changes to the PS3 engine to ensure that the production team was building for PS Vita and not the PS3. The engineering team had a mandate to never allow the production team to come to a halt, even in the event of catastrophic hardware failures -- which, thankfully, were a rare occurrence. Keeping development parity between PS Vita and PS3 did reduce our engineering bandwidth overall, but was also one of the single biggest successes for the team to remain productive during a period of time when PS Vita specs and available working hardware were in flux.
While we had a significant amount of experience and code written for the PSP by the time we finished Resistance: Retribution. The decision from day one was to build a new game engine that was developed to take advantage of the unique hardware that the PS Vita offered.
Naughty Dog also provided access to Uncharted: Drake's Fortune and Uncharted 2: Among Thieves source code, and this was invaluable. We did not port the Uncharted code from Naughty Dog, but instead used it more as a blueprint on how to approach the development for a PS Vita version of Uncharted. This proved to be especially useful for core systems, such as animation, to ensure we could replicate the look and feel from the PS3.
John Garvin: As Chris points out, we completed our first year of development without having anything remotely like final hardware. But this didn't stop us from getting a lot of development done. While the story department (i.e. me) was busy floundering away an entire year, design and engineering were making great progress. Partly this was because we had identified several features that we knew we wanted, regardless of what the story might be.
Since Uncharted is all about exploring historical mysteries, we spent some time brainstorming ways players could interact with artifacts using the PS Vita controls. We decided early on that we wanted to develop a PS Vita game, not just a stripped down version of a PS3 game. In other words, if you could play our game just as well on the PS3, we felt that we would have failed. We had a whole toy box full of new ways to interact with the game and we wanted to use them.
One example was the SLR camera. While we never thought we could work this directly into the story (would Nathan Drake really keep a camera in his pocket and whip it out like a tourist every time he saw something interesting?), we felt we could work a camera mode in as an unlock for collectables, regardless of story.
An early version of the game (June, 2010) took place between Uncharted 1 and 2 and had Drake helping Elena by taking photographs for her.
Drake would be asked to photograph statues, temple facades, ruins etc. and after equipping his trusty camera, as the player moved and rotated the PS Vita in real space, we updated the in-game camera to match. It made for a convincing and effective illusion. The PS Vita's gyro was so accurate, in fact, that we used this feature for our sniper rifle's scope mode as well as our Intu-Aim -- which allowed the player to adjust all reticle movement using the PS Vita's motion controls.
As various hardware features came online in the ever-evolving dev kits, we would brainstorm ways to use them. The touch screen could be used to clean artifacts, piece together torn documents or rotate stone puzzles; the rear touch could be used to rotate skulls and amulets; the camera could be used to detect light so ancient parchments could be held up to a light sources.
None of these were groundbreaking or original, but later on, when we were trying to break up core action or slow the pace of the game a bit, it was nice to have an entire library of mini-games ready to go. Developing them not only helped us learn more about the hardware (allowing us to give valuable feedback on things like usability and sensitivity), but it also helped the design team think in terms of developing a PS Vita Uncharted. The mini-game prototypes also provided us with demo material that felt like Uncharted, months before we ever got Drake running around in an environment.
Speaking of environments, we feel that the process we used to create our next-gen environments was one of the big success stories for Uncharted: Golden Abyss. Francois Gilbert, our Principal Artist who led up the environment effort, discusses this in some detail.
Francois Gilbert: Just as we entered preproduction, Uncharted 2: Among Thieves hit beta, and we got an early build in the Bend Studio office. We all gathered around the PS3 as the Warzone level booted up. It was the first scene we saw from Among Thieves and it blew us away. We knew once this scene was released to the press, Uncharted 2: Among Thieves would become the new visual benchmark on what was possible on the PS3. And PS3 visuals are what were expected from us and the PS Vita.
The warzone streets from Uncharted 2: Among Thieves.
We were really excited to work on the Uncharted franchise, but this was going to be quite the challenge. Not only did we have the pressure of translating a Naughty Dog franchise to the handheld, but the PS Vita does not have the processing power of the PS3. In order to come anywhere close to these kinds of visuals on the PS Vita, we would need to focus our energies and use as many visual cheats and tricks as we could. Luckily we had been working on the PSP for years, and this experience had given us the correct mindset: every cycle counts, cut the right corners, and focus on the final frame more than on individual details.
To start things off, we analyzed the Warzone scene and came up with the key notes to hit:
- The amount of stuff in the frame! The geometry and population density was like nothing we'd seen before. We knew we'd need to create this sense and illusion of this visual overload in our levels as well.
- Silhouette, negative space, and composition. We would need to pay special attention to these elements when assembling our scenes, and make sure to add detail and definition on silhouette edges.
- The backgrounds and vistas. We'd need to have lots of breathtaking vista views in our game as well. We knew the PS3 allowed Naughty Dog to add lots of geometry detail to their backgrounds. With a more limited poly budget, we'd have to use a careful mix of paintings and geometry to pull these off.
- The lighting. Uncharted 2 has some beautiful ambient light detail and a rich and dynamic direct light system. We would have to use a similar approach if we wanted to come close to their final frame. We'd want to also use similar techniques and post FX to match their look and render quality.
The Warzone scene also showcased tons of texture variance and hit the right balance with materials and specular highlights. We'd also want crisp texture definition and variation, while our memory limitation would require us to choose wisely what textures we'd load into our levels. We also wanted to have materials and lighting that would push the crunch on our normal maps.
We needed a good plan to pull this off. We quickly realized we couldn't be a globetrotting Uncharted. Each new local would require new texture sets and models/assets and we didn't have the time or resources... too risky. Instead, we decided to focus our production energies on just a few locations, so we used Uncharted 2: Among Thieves as our quality and visual bar and Uncharted: Drake's Fortune as our location reference. Naughty Dog also likes to introduce new technology in every game they bring out, so we decided for environment graphics, we would try to achieve PS3-like water.
We identified the realistic rendering of water as an early graphical goal.
Next, it was important to lay out a solid tools plan. Bend Studio hadn't done a PS3 title yet (going directly from PS2 to PSP), so all of our tools and technology needed to be overhauled for PS Vita development. Being late to the party is sometimes a good thing, as we were able to learn from everyone else's experience on PS3. We spent quite a bit of energy diving into papers and presentations that provided solid advice on what to do and to avoid. We found lots of best practices established by Naughty Dog, Guerilla, and Crytek that would hopefully translate to the PS Vita hardware architecture.
An additional transition we had to make during this period was switching from a Max-centric studio to Maya. We were the last North American Sony studio on Max. For us to tap into SCE tools from our internal technology groups we had to make the switch... and it was definitely a switch worth making.
In planning out our tools and process, we also took into consideration our lessons and experience making games on the PSP. One key tool mantra we had from the start was: since the final screen is a known factor, use real-time updating. So we planned from the get-go to have a robust live-update pipeline from our tools to the PS Vita: making sure we were able to tune lighting and post on the final dev kit screen (especially important on PS Vita, because OLED and LCD color and contrast is so different).
A shot from our trailer showing off our goal of achieving a richly detailed frame.
Here's a quick glance at how we planned out our Environment Graphics. First off, No LODs = happy artists! We decided to fade out objects at a distance (a technique also used by Naughty Dog on Uncharted). We figured, on a smaller screen, we could fade things out even sooner.
PS Vita has an advanced GPU chipset, so we got to do what all the cool kids were doing on PS3: deferred rendering, cascaded shadow maps, SSAO, and a fully real-time lighting solution (no bake!) On the materials/shaders, we'd sacrifice flexibility for performance. It was important for us to load the frame with detail and "visual noise", so if a material reflection was a bit chunky but a few cycles cheaper and allowed us to add 15 instances instead of 12, then it was a sacrifice worth making. We also used Naughty Dog shader and render techniques such as their vertex-colored moving foliage shader and tonemapping post effect.
A final frame from one of the Shanty Town levels.
Level Building Process
For geometry and level building, we created our base mesh very low resolution (about 1.5 times PSP res), but layered it thick in population. So the base level skin (terrain ground plane and cliff sides) was very low resolution, but the trick was to hide that base level skin. So in rainforest levels we'd layer on ruins mesh, add plant layers (layers of cards with 1bit alpha), vines, rocks, flowers... and after a few passes, the scene was transformed into a really rich frame. After this layering pass, you could barely see the base skin. We'd keep adding more layers until the frame felt like it had PS3 density. So even if the base geometry parts were at 1.5 PSP res, once layered, we were pushing scenes over 200,000 polys.
Building low resolution parts combined with this layering approach was also a safe bet: being a launch title, the final PS Vita hardware specs were a moving target and in the worst case (where the hardware wasn't performing as expected) we could strip out a few geometry detail layers and still get the base frame looking good with minimal production impact. But as it turns out, polys weren't our rendering bottleneck, and we added geometry polish layers right up until we shipped.
An example of a progression from the course base mesh, layers of detail, and the final lighting and atmosphere.
Geometry was one thing, but textures are also very important to the look of an Uncharted game. Luckily, Naughty Dog let us use their entire Uncharted texture library. This was a huge win for us. There's no way had the time and resources to deliver the texture quality that Naughty Dog could produce: their textures are some of the best in the industry. So we always looked at their textures before producing any asset. We understood that anything mapped with these already had an advanced level of polish.
For populating the world, we relied heavily on instancing and a Lego building block approach. Our typical levels had an 80 percent building block 20 percent one-off ratio. This gave us tremendous reuse and huge memory savings (both when streaming in levels and on the final memory for the Vita game card). Using this approach worked well with our small team: we just had to polish the master instances, and each building block was its own data packet (with associated info like collision, shadow proxy, fade distances...)
Maya screen showing the modular parts used to build our Quiviran ruins.
Another key element to our building process was the use of maquettes. Before layout and design was done with a space we produced environment maquettes to prepare and plan level art aesthetics and communicate visual direction. We also used these to test lighting, ambience and mood, render technology and shaders, and stress test the building blocks (see if there's enough variation or rarely used parts we can ditch). These were also used for vista and lighting scheme and color values that were then referenced in the final game levels. So even if a maquette wasn't used in the final game, many nuts 'n' bolts decisions were made using this set.
The final frame of one of our Quiviran underground levels.
As we neared the end of our pre-production phase, we were told we'd have a few weeks to produce a demo level for the PS Vita hardware reveal in Tokyo. We had a simple space in block form laid out by design, and the timing was right: we had our plans and base systems/technology close to presentable form. The environment team dog-piled on the level, and in two days we had a very solid first draft... and two weeks later we were done with final polish. Our process works!
We used this production approach for the rest of the game, dog-piling and specializing. One of our artists had the bad luck of revealing he was really good at placing flowers and ended up placing most of these throughout the game. In the end, we produced 35 levels in less than a year.
Examples of the rich diversity we were able to achieve in Uncharted: Golden Abyss.
We would have liked to have more time and resources and a larger scope and more environment settings, better anti-aliasing and shadow resolution, more 3D geometry in our backgrounds and more shadow-casting lights and material variation. A more robust and dynamic object system would have been great, more "switches" for adding movement to our real-time lighting and a better streaming system would have given us more flexibility... but we did what we could in the time we had... and it gives us things to work on for our next game.