GoodGraphics22.png, We Have Lighting

I finally solved the last issues with my light pre-pass renderer yesterday and designers got to work with point lights today.  After all the time I spent on implementing it, it’s a huge relief for it to work finally, and look good to boot!

As happy as I am with current progress, it also led me to some brand new problems.  For example, I “discovered” that setting all render target textures to R32G32B32A32_Float is a horrible, horrible idea.  Who knew?  Ryan Rohrer did, so thanks!  It also has led to additional work needed on handling transparency in models, but that was to be expected.  For the scope and time constraints of our project, I’m planning to do a basic forward lighting pass for models that have transparency, and designers can set the primary light to use for that in editor rather than do any closest light calculations at runtime.  It might not be a super elegant way to solve it, but it’ll work and I can get it done, so!

Now that the basic implementation is finished, I’m hoping that progress will speed up considerably on a large number of smaller tasks.  We’ll see how that pans out.

Heavy Rain, And Testing New Features

So, I decided to use my 3 day weekend productively and played some video games.  We are all shocked at my priority management skills, I’m sure.  Now that I’m done with it, I have a few thoughts on Heavy Rain that I thought I’d share.  Also, this seemed as good a time as any to test out the Facebook integration features I just set up.  So, hopefully that works.

I enjoyed Heavy Rain a lot more than I thought I would.  I went in without any prior knowledge; I hadn’t looked at any videos or screenshots, I hadn’t read any reviews, I didn’t even know what kind of game it was.  All I knew was that it was set around a crime.  And I think my experience with the game was much better off for it.  If you have the ability, I highly suggest doing the same.

In ways, this game is very similar to Telltale’s The Walking Dead.  They’re both interactive dramas, they both offer an engaging story that puts emotional hooks into the player, they both provide staggering amounts of choice to the player, and they both create the illusion that the choices given to the player are more impactful than they are.  However, despite the obvious difference of graphical direction and fidelity, the biggest difference to me is that Heavy Rain seems a lot more dynamic than The Walking Dead in those choices.  Even after playing through once, I still get the sense that any character could have lived or died at any moment.  My best guess is that you still have certain “checkpoints” that every play through has to pass through, but there are many ways to get to them that can vary up the story dramatically.  And that’s very cool and what takes a game that could easily be a single play through experience and makes me want to play it again (and possibly again, and again).

However, I do have to bring up something that really bothered me.  While there are some small plot holes and glitches here and there in an otherwise near flawless execution, the casting of Paco was just ridiculous.  Here’s a screen capture of Paco.

Paco is supposed to be a Hispanic guy and has a very thick accent.  He’s a pretty heavy stereotype actually.  And Heavy Rain is a game that takes visual fidelity and photorealism very seriously.  So, why oh why did this happen?  Honestly, can someone tell me what happened here?  Do French people not know what this guy should have looked like?  I would love to know.

Anyway, despite the Paco debacle, I highly suggest Heavy Rain if you get the chance to play it.  It is definitely the current pinnacle of interactive storytelling.  And if you’re reading this on Facebook, that’s awesome that I got everything setup but I’m sorry for this long winded post that most of you likely don’t care about.

This Is Not A Pointlight

With the shift in game locales from being outdoors to indoors on a space station, my lighting model needs have shifted.  Previously I was using a single, dominant directional light as the main light source and shadow mapping off of that.  Now that doesn’t make sense, so I need a lot of pointlights instead.  When faced with the decision on how to approach that, I decided to implement a light pre-pass system in my forward renderer instead of a complete rewrite to a fully deferred system.  It’s generally been progressing well until I tried to actually store a pointlight into the lighting buffer and then sample that in place of the standard Phong lighting equation.  Silly me!

This is not a pointlight.  It’s supposed to be, but it isn’t.  Tomorrow, I’m hopeful I’ll get it working and be able to post some great new screen captures.  Right now, however,  life kind of sucks.

GoodGraphics21.png, Doing Transparency Right

This post should more or less bring things current.  I think.  I completely reserve the right to change my mind on that later.  We’ll see what happens.  Or what I remember.

Anyway, lots of new assets make this look very pretty, but the big thing here is properly handled transparency.  To give transparent objects a proper sense of volumetric depth, I just had to add a back face pass before the front face pass and everything was great.  Was about 6 lines of code to add the pass and appropriate state change calls.  And that model depth makes things feel “right” in a way that they didn’t before.  So, pretty happy about this new functionality and how simple it was to implement.

CS380 Project 1, Having Fun Outside Of Game

Shifting gears ever so slightly, I thought I’d make a post about my first CS380 project.  CS380 is a class on game AI and the first project is to implement something inside of the provided State Machine Language framework.  The only limitations are that we have to implement at least 3 state machines, at least 15 states between them, and then at least 10 unique features from a list we were given.  Otherwise, we’re free to simulate anything we want, modify the code base to handle new graphical, audio, etc features, anything at all.

I made the choice to simulate a parody of my game team.  There are 4 programmers and 1 producer.  They all have fatigue and anger levels they have to manage.  When anyone is too fatigued, they go on break until they get rested.  When working, programmers will either fix bugs if they have any assigned to them or create bugs if not.  After either, they will do a small compile, during which they just sit there and reduce fatigue slightly.  If any bugs are unassigned, the producer will assign them out.  Otherwise, he will pick between doing scheduling or calling a meeting.  When a meeting is called, everyone drops whatever they’re doing and attends.

Now, this is where it gets good.  When scheduling, the producer increases his anger towards individual programmers based on how many outstanding bugs are assigned to them.  During meetings, programmers increase anger towards the producer, and they also incur fatigue at a doubled rate.  When a programmer reaches his anger threshold, he quits. When the producer reaches his anger threshold with a specific programmer, he fires him.  Any unemployed programmer switches state machines to “homeless bum”.  Homeless bums will either spend 20 seconds crying in the alley or go beg the producer for their job back.  And so, the simulation is highly cyclical, but each cycle typically devolves into the producer constantly calling meetings and everyone becoming very angry and unemployed.

What started as parody ended up hitting a little closer to the mark than intended as far as the average Digipen team goes.  So, it was hilariously successful.  My only regret was not starting early enough to have time to change the graphics framework to load in extra models and animations to make the visuals match the logic.  Also, this was the first school project outside of game class where I felt compelled to put in extra work to make something specific because I wanted to and not because it was worth any class credit.  It was totally worth the effort.