Update News
Indoor Sports World for PlayStation Vita Post Mortem
January 15, in the year of
our Lord 2014 -- Our first Vita development experience
has been an interesting one. Personally it has financially
ruined me; so many months of development all funded by not
taking any wages. Developing a Vita engine, along with a fairly
large game (it may seem simple but there is a lot of stuff in
Sports World).
During the course of development my relationship with SCEE has
been badly damaged, the stress and worry off the scale.
It has also been a really good learning experience, and it has
forever changed my approach to development. No more developing
and maintaining our own engine, trying to support new platforms
and features. From now on it is third party all the way, using
development systems such as Unity.
What Went Right
Focusing on solid graphics performance in our engine
We spent a lot of development time working on our game engine;
adding effects and graphical touches and making sure they ran at
a decent framerate. We looked very closely at the graphics
effects in the Vita game ‘Hustle Kings’, as this seemed to be
the game we would most likely be compared to. We wanted our game
to look as nice if at all possible, and I think we managed to
get close.
We added real-time reflections for the balls, so you can see the
scene properly reflected on each ball. We also added a normal
map to the ball surface to show slight damage/chips to the
enamel of the balls. It is a slightly different approach to how
the balls were rendered in Hustle Kings, but I was pleased as I
didn’t want to directly copy their approach, and I feel this
gave Sports its own identity.
Next up were the other environment touches, such as nice
reflective floors, water reflections, decent specular mapping
and real-time shadows. I was the sole artist on the project, and
as such I wanted to make each and every environment look as
realistic as possible. My other aim was to have lots of variety
within the environments, so they all looked very different to
each other while still maintaining a level of believability – so
you could expect to find such places in the real world.
I used normal mapping combined with real-time reflections to try
and make the various surfaces look realistic and interesting.
One incredibly useful tool I used for the job was ShaderMap,
initially version 1, and later version 2. I tried Crazy Bump
too, but preferred the extra control and lower price of
ShaderMap. I used quite a few textures from CGTextures, and as
none of them come with normal maps I had to create a lot of
these from the textures, which is where ShaderMap came in. The
key was to increase the detail on the generated normal maps;
smoothed normal maps look horrible – like plastic wrap on
everything. I also made sure the maps weren’t too intense,
otherwise you get some nasty sharp edges in there where the
light changes are too extreme.
The other real-time effects we experimented with were real-time
SSAO (Screen Space Ambient Occlusion) – which is a rendering
technique for adding subtle shadowing to all the nooks and
crannies in the meshes, and Bloom. Bloom is the effect of light
bleeding out from very bright areas, giving a subtle glow to the
scene if used right, or a sticky coating of grease if overdone.
Unfortunately we couldn’t get these two effects running fast
enough, and decided that as they were only minor details, to
drop both in favour of a solid framerate.
The final element for each environment was light baking; to
render each environment with realistic lighting and shadows with
minimal performance overhead. Our implementation works by a sort
of reverse ray trace. It takes each pixel, works out what lights
are visible from it; taking into account type of light, distance
and light colour etc. and works out a lighting value for the
pixel. Many of the scenes included dozens of lights added to
provide a nice range of lighting and shadow variation.
So all in all a lot of time and effort went into making the
graphics look as good as possible, to make each environment as
immersive and believable as possible.
Adding plenty of detail in the 3d artwork
There’s not much point spending time developing graphics effects
if you don’t have plenty of scene detail to utilize those
effects. As such I really tried to add as many details and
touches to each environment as possible. I used quite a few
pre-built assets from sites such as Turbosquid and Dexsoft, for
elements like furniture and fixtures and fittings. I found some
amazingly good stuff on there – I think my favourite assets were
the leather sofas from the Brewery Pub venue. I love those
sofas!
The base scenes are about 20 – 30,000 polys (a mixture of quads
and tris), the balls are several hundred each, the tables and
dart boards another few thousand. Texture resolution was mostly
512×512, with the odd 1024×1024 texture in there on larger
areas. Smaller detail bits were OK with 256×256 or even lower
res textures.
I was surprised how much geometry detail and how many textures
the Vita could handle. To be honest I expected to have to cut
detail down a fair bit, but in the end I didn’t really have to
compromise at all.
Plenty of Game Modes and Rule Sets
We tried to add a nice variety of different game modes, and rule
sets for each of the games. While you always want more, I think
we got a decent level of variety in there. I’d have liked online
multiplayer, but it was just impossible given the resources we
had (we are a two-man team; Steve on code and myself on art,
design and audio). The offline multiplayer works well, and
seemed a nice compromise.
We also tried to include plenty of unlocks and rewards, for
customising the various game equipment such as play tables,
cues, darts, boards, etc.
While we only included one Air Hockey mode, Steve spent a lot of
time optimising to ensure that Hockey ran at 60FPS, which is
essential to the smooth flow of the game.
What Went Wrong
Developing Our Own Tech
Historically, we have always developed our own tech; supporting
several console platforms such as PS2, PSP and Wii. It seemed a
natural progression to continue this and expand to Vita; can’t
be that difficult eh! Well it was tough, coked-up Chuck Norris
tough. The Vita is great and the development environment is
first rate, but poor Steve just had too much on his plate. The
task was huge, particularly as we had never added shaders into
our engine before. All the new graphics effects were added from
scratch. We ditched the old routines for things like specular
and environment mapping, and rewrote them all to take advantage
of what the Vita offered.
It all just took so long, Steve working silly hours adding to
and adapting the engine. Even features like video playback and
audio took a lot of time to get right and smoothly integrated
into the engine. It was a killer – during this time we were not
earning any money, it was all just one huge ever-increasing
expense. Our release windows kept sailing by – we had originally
planned to launch Sports (or Pub Games as it was originally
named) shortly after the Vita launched, LOL!
Looking back I think we needed two or three engine coders to
handle a task like this, but then without income, that is just
not possible. Also the Vita just isn’t as powerful as say a PS3
or Xbox, so it required a fair few months of code optimisations
to get decent performance out of the various shaders and
effects. When we first added the various new effects the game
ran at about 5 frames per second!
The Game was Too Big
It seems silly to say it, given the impression most people have
is that the game is very simple. However, it is true, this is
one big game! There were so many modes to keep track of, and the
Arcade and Season modes take hours to fully test.
This is the odd thing with sports games; they seem simple but in
fact are really difficult to properly test and balance due to
the time it takes to play through modes like Season & Career.
Add to that developer familiarity and you have a situation where
you really need some fresh eyes and external QA support. We
didn’t have the budget for this unfortunately, and it let us
down.
Not Enough Testing Time
I hang my head in shame and admit Sports needed more testing.
The difficulty isn’t properly balanced; it gets too hard, too
quickly. As touched upon above, Steve and I were both so used to
the way Sports plays that we were able to beat opponents that in
hindsight are stupidly hard. The game is about amateur indoor
sports, not professional sporting prowess.
It really needed an extra period of testing, testing and more
testing. The other issue we had was that by the end of the
project we were beaten; financially and morally. No money to
live on and a sense that this game would never be finished if we
didn’t get the thing out quickly. I’ve had some tough
development experiences in the past, but I think this was in
many ways the most damaging. It just felt like it would never
end, and when all your money goes, you get evicted from your
house and have to sell your personal stuff just to buy food, you
know you are doing something badly wrong!
TRCs and Sony QA Submission
Sony TRCs (Technical Requirements Checklist) are in short, a
complete and utter nightmare. Again I really feel for Steve, I
think his head actually melted at one point due to the extreme
levels of pedantry associated with implementing the TRCs. There
are just so many eventualities and scenarios you have to factor
in to properly implement the TRCs. Also we tackled many of these
at the end of the project, when we were both heartily fed-up
with the whole thing.
Sony QA was an exercise in frustration too. When you desperately
need to start earning money from the game, hitting QA is akin to
running into a brick wall. The testing process is slow, and each
resubmission adds a few weeks to the time it takes to get the
game out. In total it was about two months or so of back and
forth with QA before we were approved. One particularly
frustrating round was the one where they only found one single
issue, a MF (Must Fix) bug, which they found on day-1 of
testing. 10 days later they conclude the testing with no more
bugs found. Yay we thought, quick fix and we’re sorted. We
resubmitted with the fix, and then on day-1 of the resubmission
QA found one new MF issue, then no more.
Steve and I were convinced by this point that Sony hated us, and
they were never going to let Sports get through!
What We Have Learned
First and foremost; never to attempt to develop our own tech
again. I think that you need to be a fair bit larger than our
two man team to effectively develop and maintain your own
cross-platform tools & technology. You also need plenty of
financial support in place to keep things ticking over during
the R&D phase.
To ALWAYS give more time to testing; we made mistakes here and
it has cost us in review scores and user goodwill. We are
currently working on a patch to rectify these issues, primarily:
Tweak the AI, as Darts and Air Hockey are exceptionally hard to
beat on later levels
Fix Darts issues; sometime it is too easy and sometimes
seemingly random
The player’s finger obscuring the darts and pucks at times on
the front screen
Add aiming aid for pool & snooker back into Arcade Mode.
We always try to fix mistakes/hiccups if we can; user feedback
is really important to us and one of the best bits of
development.
Not to do a sports title again. In my career to date I have
developed eight Pool/Snooker games, a PSP Darts game, two
Bowling games and two games with Air Hockey included. They are
always very testing heavy, and not the sort of games to ever
really get good press coverage or build up a community. From
this point onward I shall be focusing on original, unique games
such as Life of Pixel, games that I can really get my teeth into
and implement something special. With the exception of my first
Unity test game, this is the direction Super Icon will go from
now on.
And lastly that we need to earn more money; we can’t carry on
making so little revenue – it is too damaging for our families
and our own mental health & moral.
Click
here for original story.