Category Archives: 3D modeling

Why most indie games are 2D games.

Why Most Indie Games are 2D Games

Okay so do you want to know why most indie games are in 2D?  Read the posts from the last month or so in my blog.  In summary, you’ll notice that 90% of all that work was asset creation.  Keeping in mind, this is supposed to be a small-scale single-level 3D mini game.  Artwork, modeling, texturing, more artwork, more texturing, more modeling.. etc.  Simply stated, asset creation for 3D games is LONG, HARD work.. and in my case, I didn’t even do it all myself (I had a character modeler/animator help me with my single base character model, and I’ve relied quite a few times on turbosquid).  Even still, compared to 2D game development, this process can be extremely time consuming.  If this was a 2D platformer, most devs would have had at least basic assets for a “level 1″ finished probably in the first day, and would have been programming the actual game long before now.  I’ve always tried to ignore this fact but its true.  Look at the number of delays, setbacks, and ultimate release date shifts that have plagued recent AAA game projects project and you’ll see that rapid 3D game development is not an easy task even for seasoned developers.

Most independent game developers have certain skillsets that usually fall into the domains of programmer or artist.  Now I know there’s stortywriting, sound effects, music, etc.  But just about everything involved in a game’s development really splits into the two big umbrellas of either programming or creative (artwork, asset creation, etc).  The problem here is that as one advances in their particular domain, and starts to get really good at one aspect of the field, they often have to leave the other side of things to somewhat wither.  To become a really good programmer, I mean a really good programmer, you need to get obsessed with your craft.  That means even if you were a decent artist, you probably won’t keep up your artistry skillset as much.  The same goes for becoming a very good artist, and even a 3D artist.

As the industry has made the shift into large-scale theatric AAA games, more and more specialized craftsmen/craftswomen are needed to spend 8-hour days on something as simple as the texture of a claw of a single enemy in a single dungeon of a game.  The sheer manpower that AAA studios can throw at a game allows for the large attention to detail that 3D games require to feel right.  Even a “simple” game like mario 64 likely required dozens of artists to pan and pan over every keyframe of mario’s animations to make sure it was perfect.  Now don’t get me wrong, this was also true of the SNES/Genesis 2D era.  However, attention-to-detail, or lack thereof in these kind of games comes with less of a penalty, and certainly less of a time commitment.

It’s a hard pill to swallow since my dream of making games that started at a young age, has always predominantly been a dream of 3D game development.  But you know what?  I still love 3D game development.  It’s supposed to be hard.  The hard… is what makes it great.  Tom Hanks is right.  

So where does that leave the indie developer with respect to 3D game development?  Well when you have a team of only 2-3 people (or in my case, 1 people), you CAN succeed at independent 3D game development.  The absolutely crucial difference here is to understand and accept your limitations as an independent.  For starters, no matter who you are, limit your freaking scope.  Understand that you simply can’t make an AAA-length 3D game in any reasonable amount of time.  If you’re 1 person, and a hobbyist with almost zero budget (like me), set a goal for a game that requires at most 1-2 3D environments with very few (if any) unique character models.  If you are weak with art but you have the funds, consider using services like turbosquid to procure assets.  If you are weak with 3D programming, consider (after buying a few books) using a 3D engine such as unity or unreal instead of building your own.  

Above all, plan out the scope of your game to a t.  Then, give yourself a pre-determined amount of time to finish the game project… and..   quadruple it.

Driveby Gangster Update – a Dive Into Swift

Over one month in to my planned “2 week” 3D game project, 90% of my assets are done!  I still need a 3D tommy gun and an old-timey driveby gangster car.  But I’m going to start actually programming (imagine that) the very simple AI that will drive the walking of most of the bystanders in the game.  I’ve got my work cut out for me since most of the game logic code I’ve written to this point is all throwaway “get-it-to-work” POC code.  I now need to organize and get a basic heirarchical game-architecture together.  More fun, as I mentioned in my first post, I’ll be doing most of the game classes and logic in swift.  Swift, despite being officially released, still has its problems.  Namely for me, the speed of the IDE (for things like auto-completion) while typing in swift is the biggest gripe I have with the language so far.  That problem is followed by a close-second of annoying cryptic compiler errors that have nothing to do with the underlying problem of “I’m expecting an Int32, but you gave me an Int”.  Either way, I’m keeping my promise to write the game in swift as an experiment to see if the language is truly something I’ll want to leverage for game development in the future.

Scene texturing 99% done!

I got the street scene mostly done!  I actually had gotten this far on monday but I’ve had to spend alot of time getting Verto Studio for iOS back up to speed and polishing the new features that I’ve recently added.

I’ve started to worry a little bit that this game will quickly become too boring for only having one scene but I’ve promised myself that this will be a SMALL scope game (which has already ran quite longer than I thought it would).  I’m hoping my idea of slowly transitioning the graphics from “realism” to “black&white noire comic-bookism” as the player loses touch with reality will help keep things interesting.

Yarr.  Screenshots be below.

My cubemap renderer feature came real handy for the light-bulb reflection effect.

More of texturing day

Yesterday I worked quite a bit with my character animator Tyler Hurdle to get the animations properly exported from his modeling software into my graphics engine.  After much wrestling, I got the simple walk cycle loaded in and it looks awesome.  

Things happened today.  Those things included me finishing up the texturing for the Hotel.  I must say, it’s really starting to look good. I can’t imagine how it’s going to look once I add in the final shadowing and post-processing effects.  I didn’t take as many intermediate screenshots as I should have this time. So I only really have the final results of where I am at the end of today.  Nothing too-far out of the ordinary happened during the last steps of the texturing of the hotel besides me modifying the basic window shader effects to include partial transparency. I did this so that I could “cheat” with the interior shops of the hotel, modeling the interior as a simple gaussian-blurred backdrop which is partially of obscured by the semitransparent window.

I also decided to get rid of the ugly default “sand” texture that I’ve been using for my background terrain.  I spiffied this up a bit with multitexturing effects using a detail texture which came out pretty awesome.

After all this, the frame rate performance within the editor and the game started to both get really bad.  So I had to stop modeling and dive into some optimization once again.  Using instruments within xcode, I uncovered some horrors related to the terrible performance of objective-c’s NSString methods (namely stringWithFormat) which forced me to eliminate their usage and some of the more critical sections of the rendering engine’s code.  That alone, gained me another ten frames per second back and started getting me to question the viability of Objective-C for hardcore game engine development.  I sure hope Swift’s string methods are faster than Objective-C’s.

Continuing with optimization, I put off the long-needed step of sorting scene entities first by transparency, and then by material.  This helped me avoid unnecessary state changes which propagate to the shader and harm performance.  I also hard-coded a backface culling test which showed that I really need a per-model “cull backfaces” option within the editor.  All of this optimization added up quite a bit to bring my performance back up to a reasonable level.

All of this work today uncovered quite a few new bugs in the editor itself, so tomorrow will likely be spent fixing those…

Texturing day

I got alot accomplished today.  I continued with my texturing efforts and started texturing the hotel.  This is the most important building in the scene since its the biggest and stands out the most.  I really wanted to work on my attention to detail while working on it.

One feature that I programmed for verto yesterday that has proven insanely invaluable to me is the unwrap texture feature.  This feature maps polygons to one of 6 faces of a virtual box and assigns them their own coordinates within the UV texture space.  In lamens terms, it makes texturing box-like objects a hell of alot easier.  It works best when the object has some flat shading enabled.

I finished texturing the supermarket yesterday but I’m not all that satisfied with it.  I’ll probably revisit it when the rest of the street is further along.

The hotel on the other hand, is looking really nice.  Sometimes its all about finding the right texture.  I found an excellent brick texture via turbosquid.  I then ran it through my favorite filter:  gimp’s “make seamless”.  Lastly, I created a normal-map for it using the “crazy bump” tool for mac.  All rendered with bumpmapping, the hotel front looks great.

Perhaps the most fun part of today was painting the sign decal texture for the sign that sits above the left shop in the hotel.  For someone who’s a crappy artist, I felt like I didn’t do too bad of a job.  After throwing in a few references to name’s of my buddys, I got it all ready to go.  I render it using a simple alpha-test shader.

Last but not least, I took on the “opaque window” shader that will be used on all the non-transparent windows in the scene.  I tried a flat reflective environment mapping effect but it looked pretty unrealistic.  Since we’re in the early 30′s here, I figured that I would simulate “wavy” or “mildly bumpy” glass.  This means combining bumpmapping and environment mapping shader techniques.  The result is very awesome.

Working on this game is proving to be too fun.  Sadly, I should probably do some non-game-related work on Verto Studio tomorrow and return to this stuff next week.

 

More modeling..

Today was another modeling day.  It’s starting to look pretty decent.  I finished up the convenience store and added a vintage gas station to the end of the street.  I’ve definitely been pushing verto hard so I’ve been running it in the debugger just to make sure I catch any serious bugs or crashes while I work so that I can fix them on the spot.  I’ve already used the crap out of my instancing feature and fingers crossed, it’s working pretty well.

I got to use my shader builder feature today while working on the gas station parking lot which felt awesome.  Being able to quickly hash out shader effects is proving invaluable for this project.  I used the GLSL ‘smoothstep’ function to code a quick-and-dirty solution for cross fading the parking lot with the desert terrain underneath.  Using blending for the entire polygon is not all that efficient but I’ll take that over a more complicated multitexturing solution.

 

I also drafted up a quick terrain mesh using pixelmator to create a height map.  This is how I’m going to take care of the background scenery with a tall “mountain” range in the background of the street view.

Lastly, I screwed around with the multipass pipeline editor to see what a “noire”-like black and white effect would look like on the scene.  It gives me chills and definitely inspires me to keep working on the project.

Early noire effect

I can’t wait to see what it all looks like when I’m done the texturing.

Lots o’ work

Did alot with the “town street” scene today.

I had to add a bunch of new features to verto to keep up.  Namely “merge doubles” and “duplicate instance” to allow for instancing lots of tiny little meshes.  I spent most of today on the theatre area.

It’s starting to look like an actual game scene.

Hoverboards don’t work on water.. Unless you got powahhh

Tiny bit of work today.  Got the second building going and finally put in some powerlines via turbosquid.  I’m not thrilled about the loss of smooth shading on the poles though.  I’ll have to code a quick feature for verto to auto-weld doubled vertices this weekend to fix that.

The framerate within the editor is also starting to drop to 30 fps territory.  Nothing too scary yet, since everything is still quads.  I’ll probably save rendering optimization for the very end.  I hope it won’t be too bad as the scene grows in complexity.

 

Sarging on.

More modeling work was done recently.  I temporarily diverted attention this weekend in a blaze of coding fury to put together a new mac app which I submitted to apple this weekend.  With any luck, this app will hopefully raise more funds to help with this game.

I’ve received some initial renderings and concept art from my character designer.  It’s looking pretty sweet sofar.

Modeling progress of the street below:

First update – all efforts on modeling

So, for the first time in awhile, I’m really using my own modeling tool quite a bit, and I must say I’m pretty happy with it sofar (especially not crashing on me and losing my work).  I’ve only had to pop over to xcode and add two new features that I forgot to bring over from the iPad version (toggle object hidden, and send-to-back for manual transparency render sorting)

Anyways, the city street is coming together nicely, and I hope to keep this momentum up as I build it out.  I’ve also been relying on old-faithful, turbosquid, to help with certain smaller assets that I want to use to fill up the street such as trashcans and mailboxes.

I’ve also hired a character artist, Tyler Hurdle, to put together and animate the character model for me.  I’ll post more on that as progress emerges.

Modeling progress shots below: