Bioshock Infinite

I stay pretty busy at DigiPen, and especially so a week out from gold milestone.  Despite that, I still try to play SOME games; staying current with what’s going on in the industry and staying sane in the face of a hectic work schedule.  After getting home from GDC, I promptly bought Tomb Raider (not quite finished, but expect a review soonish) and Bioshock Infinite despite what a terrible idea that was for productivity   I just completed Bioshock this weekend, and I felt pretty strongly about the ending, so I thought I’d write about it.  So, if you haven’t beaten the game yet this is your warning.  SPOILERS AHEAD!

So, overall, I really liked the game.  I think that it took the mechanics and themes and ideas from the previous games and really pushed them in a direction that was interesting.  I found Bioshock 2 to be decent but pretty lackluster of a sequel compared to the original.  It would have been easy for Infinite to be more of the same, but it wasn’t.  I felt more compelled by the story in this game than I did in the first Bioshock.  And despite being an FPS, Bioshock is really all about the story in my mind.  Which brings me to the ending…

 

BioshockInfinite

 

I think that this is going to be a pretty unpopular opinion, but I absolutely hated the very end of this game.  The idea of a multiverse of this game world was really intriguing and I honestly didn’t fully see it coming that Elizabeth was Anna.  So, even up to the point that we’re wandering the infinite lighthouses, I was still hooked.  But then, out of nowhere, at the very end we get Butterfly Effect’ed.  Seriously?  We spend the whole game building a relationship with these characters, getting to know them, building empathy for them.  Irrational took a lot of care to put tons of emotion into Elizabeth’s facial expressions and to give her a range of unique interactions throughout the world to really flesh out her personality.  And, while it sucks, to have a scenario where one or both characters get killed tragically… that happens in good stories sometimes; throw a wrench into the works.  But to just blink both characters, and this entire, rich universe, out of existence just angers me so much.  And the worst part is that it’s because I would totally love to play another game in Columbia with Elizabeth in tow.

Maybe it’s for the best.  Rather than make a sequel to this game that falls flat like Bioshock 2, maybe we’ll get yet another great setting like Columbia and yet another great set of characters like Booker and Elizabeth.  Maybe.  I don’t know.  It feels a little like how I imagine those crazy people that are still angry at Bioware felt about the ending of Mass Effect 3.  Except that I’m not an insane zealot.  Irrational obviously knows what they’re doing most of the time.  Regardless, in the short term, the end of this game left me feeling really unsatisfied.  Maybe with more time to reflect I’ll change my opinion, but for right now, it’s an amazing game that ends with a whimper.

GoodGraphics25.png, More Particles, Gloss Maps, And Starting Cleanup

I spent the last week down in San Francisco for GDC, and the amount of knowledge gained from the various talks I attended is staggering.  I can’t wait for the videos and slides to get uploaded to the Vault and to start in earnest at trying to get some of those tricks and techniques integrated into my own graphics engine.  I’m thinking that a switch over to generous usage of Compute Shaders and Deferred Contexts should help me speed up performance quite nicely in my architecture.  Hopefully future posts will be able to show if that pans out as expected.

However, until that happens, back in the real world I’m finishing up feature implementation and tying up loose ends heading into gold submission for the game.  Since I’ve been back (and, honestly, a little bit while I was in San Francisco), I’ve been working at improving particle systems, working with artists to get whatever else we can into the engine, and handling lingering technical issues.  Let’s start with particles!  First, a video of my more recent efforts.

 

 

Work has progressed pretty steadily on particle systems since they first got implemented.  I’ve fixed a pretty bad heap corruption that the memory manager was hiding (decrement index 0 and then calculate distance from camera!), I’ve actually added camera distance calculation to make alpha blending work properly, billboarded the sprites, written some extra particle operators to deal with special case functionality we want, and then spent a huge amount of time just tweaking values to find really good effects.  It’s the kind of thing that, given time, makes me want to write a genetic algorithm to find good effects of certain type.  You know, rather than me spending hours and hours tinkering until I get a good fire, I can just go to sleep and wake up to some good options.  Dreams, right?  But, the fire is really a test case and not something that’s necessarily planned to be in game, so let’s talk about something that is.  Here’s another video!

 

 

One way that we’re looking to add player feedback to the game is to use particle systems to “drain” power from power nodes and then to “push” that power into mechanics objects.  So, Hayden and I wrote an operator to take in a variable control point and have particles update their velocities each frame to direct them towards that point.  The inspiration here is Team Fortress 2’s medic gun.  While we still have some work to do to tighten up the player tracking and to get a nice curve on it like TF2, I still think it’s already looking pretty decent.

The last “big” thing I’ve worked on since the last update is gloss maps.  My artists have wanted to use them for a while, and I finally worked with them to make it happen.  And it was pretty easy, too.  The idea here is to have an additional map that contains the n.s exponent value for the specular equation.  As a result, a single material can have variable shininess across it’s surface, which is pretty cool.  I actually separated out the depth texture from the normals texture in the pre-light accumulation stage a while ago so that the scene normals could store to an RGBA8_UNORM and the depth could be an R32_FLOAT, so it was easy to integrate the gloss maps.  Since they only store a single value per pixel, I was able to stuff them into the alpha channel of the normal maps, change 3 lines in my shaders, and everything worked.  Pretty simple!

 

GoodGraphics25.png, particles, gloss maps, and gravity.

 

Now I just need to implement texture animation (I know that I mentioned I’d already have it finished, but expect it tomorrow?) and then I’m on to doing detection routines for things like available resolutions, MSAA levels, etc to finish outstanding TCRs.  You know, stuff I should have already done a long time ago.  But, I did also get 3D positional sound working in engine this week (have I mentioned I also do the audio programming for this project), so that was also pretty exciting.  And maybe makes up for it?  I’m not sure.

Anyway, that’s everything that’s been happening since the last update.  Oh, and you’ll notice in the second video and the screen capture that Max has finished his gravity flipping mechanic.  So, there should be some cool levels utilizing it soon.  While I plan to continue posting as I make progress on my graphics engine, I’m concerned that the content from here to the end of the semester won’t be too exciting.  Texture animation and bug fixing?  It needs to be done, but it isn’t very flashy.  Maybe I’ll find time to slide in some extra post processing.  We’ll see!