jump to navigation

Finally finished the Graphics Black Book June 18, 2009

Posted by jhuculak in Industry Commentary.
Tags:
add a comment

I finally finished reading Micheal Abrash’s Graphics Black Book from cover to cover. I found it funny that Jeff Atwood of Coding Horror fame posted about it about the same time that I started reading it. Almost a year later I finally made it through.  I had read the Zen of Graphics Programming but not the entire collection before.

In my opinion there is only one real reason that Micheal’s writing and articles are exceptional: He LOVES what he does and it shows. I got my start in games programming in the pre-internet days and articles from people like Micheal or even books like Tricks of the Game Programming Gurus were like candy to me as a kid. It seems that since the 80’s, books on programming have generally become more stuffy or process focused and move away from the love of coding. It was good to read this book as a reminder that anyone that has the lucky job of creating things, in this specific case code, has a dream job that is contantly changing and challenging! Some people might be confused why someone would derive so much entertainment out of squeezing performance out of code. I think that the days of fast hardware are making the efficiency battles less important and less fun.

I consider this the “Great Cultural Divide” that is developing within the game programming community. There are people that want to code to the metal and understand everything that makes a program tick. Then the other group wants to make the computer do something specific and the details of that are not the strict focus. Some people split these up as programmers vs. scripters. The divide to me is actually between people that like working with well defined problems and people that don’t mind creative iteration and subjectivity.

Low level programmers love direct challenges and fixed hardware environments. This allows you to craft out the best possible solution to a problem and “know” that you are close to optimal. You can measure your progress by the time taken to execute.

High level programming is mostly about making sure you are hitting the requirements of the application within reasonable performance/memory targets and getting a product that is interesting.

Even through these personality types can co-exist in the same programmer, I still find that one takes a healthy precedence. I also think that the low level programmer is changing from being assembly programmers to being C++ programmers. It is a scary thought, but the move towards having fully fledged support libraries like .NET, XNA, DirectX etc. are making it so that you don’t need as low level expertise. This means we are making more programmers into the high level programmers and I find that less are doing it for a love of code, but rather for a love of results. This changes the dynamic and feel of the workplace from loving code and learning to frustrations about what hardware can do and how annoying the coding part is to get results. Meanwhile, the low level luddites hang onto languages that take twice as long to write the code and may not end up getting things done. This is going to lead to an interesting language transition in the near future where some other language will completely dominate C++, even in embedded systems.  I am interested in seeing how this evolves and what being a low level programmer will mean 5 years from now.

I also apologize for my lack of posts in the last little while. I’m packing my place up to try and sell and have been out of the house more than I have been in it!

Down with the Sickness again… June 8, 2009

Posted by jhuculak in Uncategorized.
add a comment

I had another crazy sick weekend. If I get the chance I will post more tomorrow but for now I’m just trying to sleep and hydrate.

Star Destroyer Part II – Geometry Block In June 2, 2009

Posted by jhuculak in Art, Speed Modeling.
Tags: , ,
add a comment

It has been a couple weeks since I looked at my Star Destroyer model. Last time I had come to the conclusion that I should start over because the geometry was messed up in the back of the ship. Rather than start from scratch I decided to delete the geometry be doing a boolean subtraction of a cube from that half of the model.

FixByCuttingInHalf

In order to subtract half the model I went through every vertex that should be aligned and moved them to 0.0 on the X-axis. Then when I subtracted the cube from that half I had a perfectly divided Star Destroyer and my bad geometry was gone forever.

Next step was adding some detail to the engines. I did this using some capped cylinders and extruding them back into themselves to make the engine shape. I still haven’t finished with the bottom of the ship but I might skip to details and UV mapping next week to maximize my learnings.

By no means do I consider this a “good block-in”. This is about building by skills, not fine art!

StarDestroyerDay2Shot1StarDestroyerDay2Shot2

Down with the sickness May 25, 2009

Posted by jhuculak in Uncategorized.
add a comment

I’m a little under the weather today so my usual weekly post might be a bit delayed this week. I’m hoping to hit part II of the star destroyer modeling soon. Until then I will be sleeping and hydrating as much as possible.

Where are games going after 2009? May 19, 2009

Posted by jhuculak in Industry Commentary.
Tags: , , , ,
add a comment

I have had a series of unconnected events in the last week that all made me think about the progress games have made and where they will go in the future. I had the pleasure of listening to BioWare’s doctor head honchos at GDC Canada on emotionally engaging games and where they are going. They followed this up with a great description of how the events outside of the game in the real world also engage the player. While packing up my old book collection I came across some Game Developer Magazines from the late 90’s and the covers showed me how far we have really come. Finally I had a chat with a friend who is starting his own video game company targeting the console market. All of these events lead me to the conclusion that the current PS3/360 generation of games is transitioning from technology based success to quality/polish based success and that games in 10 to 20 years might not be all that different but will be incredibly polished.

Dr. Greg Zeschuk and Ray Muzyka had an awesome keynote at GDC where they described how they connect with their audience on an emotional level. Half of the presentation was comparing the evolution in their games by playing videos of similar interactions in their products over the years. I missed a little bit of the point of their presentation because I couldn’t help but think that all their games conversation systems acted essentially the same. Ultimately you are picking from a branching choose your own adventure. Is Dragon Age going to be much more engaging than Baldur’s Gate II was? Having more advanced story telling mechanisms may make games more like movies than novels and that may lead to more sales but I do not think it makes the games themselves more engaging. However story telling mechanisms make the games message more clear and accessible which can lead to having more people getting engaged. I was looking at the core of the product when I should have been looking at the audience. Audiences seem to want movies not novels. Always think of the customers.

BioWare has always been a leader in supporting their community. I have always admired BioWare’s dedication to their audience. They were one of the first game companies that really listened to fans by having message boards, dedicated community managers and encouraging user created content. Ray and Greg took a bit of time to describe how all of this activity really builds fan base and a story around the game. When I was playing Baldur’s Gate II simultaneously with my room mates we all had different parties and were amazed by how all of our stories were different in a significant way. I still feel guilty that I let Aerie die! Creating enough emotion to have conversations about how you felt in the game with friends is building a community and I do think BioWare is the best in the business at this.

If the strategy that BioWare is taking is the future of gaming I would think that more movie like story telling devices and polish will be combined with massively involved community. When I dug up my game developers I saw a cover for Shattered Steel (a BioWare game) which looked great at the time but sure is dated. It makes me think that games of the past were really the equiavalent of early experimental films where the novelty of the game was what sold the product. That is what I call technology based success. This is still happening today with things like the Wii. There is room for growth in this market, but in order to sustain success games need to contine to get even more polished and accessible.

Chatting with a friend starting a new studio made me think what I would do if I was starting a studio myself. Some of my friends think it is crazy to jump into the AAA console market. If you are jumping in, I think you have to realize that you have to target a very broad range of skillsets first and foremost and then find ways to engage them in your game before launch. Many companies can barely get the product done and as a result as successful game does not become a successful product. This is one of the things that I think is much different between the movie and game industry. In the movie industry you can have a sleeper hit on DVD because the cost of investment in this is relatively low. Gamers follow studios and you need to nurture a fan base. That means investing in your product for years after launch.

In the future games will be separated not by their technology innovations. Instead games will be set apart by the emotional journey they take you on by involving you in a way that no movie can. Innovations that add to this immersion will be successful. When this kind of thing happens I think there should be a separation between “games” and “games as an emotional experience”. Take chess as an example, it doesn’t explicitly tell a story and is not Art in my opinion. The future will hold many more games that introduce audiences to new experiences but if it doesn’t connection emotionally it isn’t art to me. The classic debates will continue but companies like BioWare will make more people believe in games as art in the future. Can’t wait to see it happen!

Filmspiration and the three reasons to make a game May 11, 2009

Posted by jhuculak in Game Design, Industry Commentary.
add a comment

Film was a love of mine before games were. My first theatrical memory is sitting at the drive-in watching Luke Skywalker battle a Rancor. That kind of thing leaves a lasting impression on a young child’s mind! The magic of Star Wars back then was that I think many adults felt like I did…the wonderment of a child all over again. It was many years before another movie hit that mark again.

That movie was The Matrix and it brought philosophy and technology to the mainstream (not necessarily in that order). Although hailed for its action cinematography and bullet time, nearly every action film device they used was pioneered in Blade before the Matrix’s release. Blade did not capture the mainstream and therefore was lost in cinematic history. It isn’t who does it first, it is who does it in front of enough people to count. But what do these two movies have to do with making games?

Since these are the kinds of stories that got me inspired I was trying to think of what the equivalent in the gaming world it was and it occurred to me that there were largely three “reasons” or “types” of games to make.

My initial gaming inspirations would probably be titles like: Wing Commander, X-Wing/Tie-Fighter, Space Quest, Kings Quest, Wolf 3D, Doom, Duke 3D, Dune 2, Warcraft 2, etc. Some of these genres have basically died (space and point/click adventure) and others are at the top of their game (first person shooters) and yet others dominate new markets (World of Warcraft). What is the secret to why these games are great? Tonight I was having a few ideas I would like to share to categorize: Fantasy enablers, Brain Teasers and New Experiences.

  1. Fantasy enablers: Let the player do things they always wanted to. Some examples: Wing Commander (live star wars), GTA (do whatever you want in a city), Star Craft (be a military commander), World of Warcraft (fantasy archetypes in an altered world), Rock Band (be a star). Games are interactive, the biggest strength is by giving into players desires. If you are trying to mimic the real world, enabling what people want to do/experience is a good way to target players.
  2. Brain teasers:The brain is a muscle, people like to exercise it. Some game examples: Tetris, Brain age, Bookworm.
  3. New experiences: This is the meaty one that is more like film. Star Wars showed people a new world/place. The Matrix did as well. In a craft like film, doing Fantasy enablers or brain teasers was done in the first years of the genre because it WAS new. If you look at modern film, it is more about how a story is told than the structure of the story itself. Writers don’t make the huge bucks. Actors do because it is how the story is executed and perform that counts. I think you are starting to see that crafting in games. What games have you played lately that took you someplace new? For me the only really new world that I played in a fictional sense was Bioshock. In a play sense, it is every iconic first game in a genre (Wolf 3d, Dune 2, Tetris, etc.). I haven’t played a new one of these in a long time. Are games so close to art progression that the realistic is gone and the new experience will need to be surreal? Personally I don’t think so…especially since most the innovation in this area is in controls. I listed Rock Band in Fantasy Enabler but the accessories also make this a new experience for most. It makes music more accessible.

Perhaps Rock band/guitar hero are examples of all three in unison. Fantasy of being a rock star combined with a puzzle/coordination packaged in a new control experience. Sounds like a formula for success!

Do you have films or games that have inspired you? I would love to hear your thoughts on them and why they captured your attention.

Star Destroyer Part II – Failure to block in May 4, 2009

Posted by jhuculak in Art, Speed Modeling.
Tags: , ,
add a comment

I’m forcing myself to blog once a week and sometimes it is tough! However, much like working out it feels good once you are done.

Failed Star Destroyer Block In

Failed Star Destroyer Block In

Today I attempted to block in the geometry for a star destroyer. You can see it in the image attached. At first glance I was fairly happy about how the top of the ship turned out and was going to spend some time on the back and bottom. Then I noticed a disaster at the rear of the ship. I had connected the top of the ship to the bottom by selecting the wrong vertex for an early split! Luckily I had only put in about 20-30 minutes of work which was mostly figuring out the tools to split the geometry where I needed it to be. If I learn how to do mirroring and know all the tools I think I could do this in about 10-15 minutes. I learned a lesson in always checking what vertex you have selected when splitting because the rear of my start destroyer is a dogs breakfast! I ended up splitting along the wrong face and have a rogue vertex sticking out in the middle of nowhere and I’m not sure how to repair it. Detail is the last step when modeling, I should have gone for a rough in of the rear of the ship and bottom before focusing on the top.

At this point I think I would rather just try it all again and learn the tools better. I’ll give Star Destroyer Part II another try in an upcoming post and hopefully have better results. But who knows…I might take this incorrect model and texture it just to figure out the texture tools.

p.s. I mentioned trying to model last week without a mouse. WOW, what a difference having a mouse makes!

Star Destroyer Part I – Geometry reference and setup April 27, 2009

Posted by jhuculak in Art.
Tags: , , , ,
add a comment
Stardestroyer Top

Stardestroyer Top

I love Star Wars. Return of the Jedi is the first movie I remember watching, Star Wars novels got me reading science fiction, and Star Wars model kits were the first ones I built. I still remember the hours it took me to put together my AT-ST walker and how daunting the Millenium Falcon was! Not only did you have to spend hours to put the model together, you also had to spend hours painting it if you wanted it to look anything like the real ship! On top of that there wasn’t really any painting reference available. Those were some fun times and I thought I would try and relive a little of that digitally.

Please consider this a complete newbie tutorial as I’m fumbling my way through modeling myself. Today is all about setting up the modeling environment.

Software: Silo 1.4 + Firefox + GIMP. I’m using Silo 1.4 to start the tutorial because I had to use my laptop to start the modeling process and Silo 2.0 doesn’t really run on my laptop (selection issues).

Stardestroyer Side

Stardestroyer Side

Plan (rough outline, subject to change)
Star Destroyer Part I – Geometry reference and setup
Star Destroyer Part II – Geometry block in
Star Destroyer Part III – Details and UV unwrapping
Star Destroyer Part IV – Texturing

stardestroyer_front

Stardestroyer Front

Although I’m not an artist myself I read lots of tutorials and work with lots of artists. The first step is ALWAYS finding reference images. The better your reference images or concepts, the better your chance at succeeding. Take as much time as you need for this part of the process. Google images makes this incredibly easy! Simply type in Stardestroyer and you get lots of examples to draw on. I found a top/side/front/rear gif and chopped it up into a unique image per view using GIMP.

stardestroyer_back

Stardestroyer Back

These kinds orthographic drawings are the perfect images to start your modeling. Time to fire up Silo.

Although I’m working on a small laptop, I still switched to a four pane view to setup the reference images. The top left pane is the top view. I added the top down view of the star destroyer (using the Display->Set viewport Image menu item) and had to rotate it 90 degrees and move it to the origin to align correctly. I then used the same rough process to put the front (top right) and side (bottom right) views, making sure to center the images equivalently.

After dropping in a rough cube and pulling its shape to match I noticed the front view was way off.

Adding in some geometry helped me notice the misalignment and fix it at this early stage. Now I’ve got this:

adjustedfrontimage1

Stardestroyer Silo Setup

With this setup I thought this would be like a paint by numbers from this point for modeling! Then I tried pulling the view around with the trackpad on my laptop…YIKES! Looks like I will need to bring a mouse along for the next part of the modeling. I also noticed that the take screenshot code looks like it has a bug in that the view of the viewport image in the top right doesn’t align when the screenshot is taken. Odd…

What do you code for fun? April 20, 2009

Posted by jhuculak in Technical.
Tags: ,
add a comment

Sometimes it is fun just to write something for the sake of writing it rather than to have a useful end result. I was out for dinner with a group I used to work with and one of them is currently writing a game for the Sega Genesis. You would think that programmers would see how illogical writing a game for a “dead platform” is. Obviously the end result isn’t the point, it is the journey. Non-programmers might not get that sometimes the point of coding is having fun.

What coding do I consider fun? For me I have always had a fascination with minimalism. Small executable and efficient code have always been fun for me. I even lost marks on one of my exams in University because I made a mistake on my third iteration of optimizing the code to answer the question. The solutions weren’t even rated on their performance or size! Did I learn a lesson from that? Other than being correct is more important than speed, I continue to enjoy writing a small amount of code that can do more.

Minimal Executable
So…how do you make a small executable? I remember reading about a contest to write the smallest application that could download code off the Internet and run it. The author of the program was able to do this in something crazy like 138 bytes or something like that. I’m not interested in going THAT small, but I am interesting in looking at what you can do with a modern compiler like CL.

How big is the following code when compiled with Visual Studio 8’s (Visual C++ Express 2005) compiler?

int main(int argc, char* argv[])
{
return 0;
}

Step 1: Simple compile with CL.exe – 45,056 bytes

cl main.cpp

Seems like a lot of space for not doing very much. What should we trim next?

Step 2: Turning it to a windows program – 2,048 bytes
Modified the code a little:

#define WIN32_LEAN_AND_MEAN
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR cmdLine, int nShowCmd)
{
MessageBox(NULL, “Small Test”, “Small EXE“, MB_OK);
return 0;
}

cl main.cpp /link /SUBSYSTEM:WINDOWS /ENTRY:WinMain /DEFAULTLIB:user32.lib

2kb is about as small as I would be looking for. The trick moving forward is avoiding anything that uses the standard library and static constructors. I still need to dig into more of what overriding the standard entry point does before I start writing stuff that is “useful” with this framework. Do I recommend anyone actually does any of the above? No, it is just for fun to see what you can do with small exes. Might add some rendering stuff next.

Game Breakdown – Resistance: Retribution vs. Syphon Filter: Logan’s Shadow April 13, 2009

Posted by jhuculak in Game Breakdowns.
Tags: , , , , ,
1 comment so far

I had high expectations for Resistance: Retribution (RR) given that it was Bend Studio’s follow up title to Syphon Filter: Logan’s Shadow (SF:LS). Syphon Filter blew my socks off in showing me what a shooter could be like on the PSP. I thought even having the same game with a new skin would have been a great experience. What I got was a similar quality game, but targeting a different audience that is much more into action/run and gun than they are into stealth tactics.

I’m going to compare Syphon Filter against Resistance in the following areas:

  1. Shooting Mechanic
  2. Story Telling
  3. Achievements
  4. Presentation

1. Shooting Mechanics
At first I hated the auto-targeting system that RR had because they took away the most impressive element of SF:LS – the ability to target precisely. At first I mentally fought with this and hated it until I realized it services a different kind of gameplay. In SF:LS I would creep around and because the mixture of the control system, world design and animation design allowed it, I would target precisely where people would poke their heads out and BOOM, headshot. Using the PSP controls (challenging at best) and being able to support precise shooting was incredible.

Cover Sharp Shooting (SF:LS)
The key ingredients to this shooting experience are:

  • Stealth approach to combat (they might not know you are there)
  • You and your enemies spend majority of time in cover, timing when to shoot
  • You aim from cover
  • Head’s are always at fixed crouching or standing height
  • Significant reward for a head shot, great animation feedback on it
  • Any weapon can be fatal, focus is on player movement and aim

Hose them down (RR)
The body count in RR is probably 5 times higher per minute of play than Syphon Filter (if not more).

  • Easy cover
  • Auto aim
  • Allow called shots for special enemies that need their heads removed
  • Strategy based on weapon selection and fire mode selection

At the end of the day, I prefer to have my tactics be movement or aiming based so I much preferred SF:LS for these mechanics. However, knowing why the design was changed, it did match the play experience.

2. Story Telling
Both games use a mix of videos and in game cinemas to tell their stories. I’m using my memory to recall the amounts of the story but I think the mix was something like this for each game:

SF:LS Story breakdown
Story Telling 20%

  • Pre-rendered cinemas 10% (explicit story telling, briefings)
  • In game cinemas 10% (mission context)

Gameplay 80%

RR Story breakdown
Story Telling 40%

  • Pre-rendered cinemas 10% (Introduction, per act cinemas)
  • Concept Art naration cinemas 20% (Mostly maps and narrated story telling)
  • In game cinemas 10% (in mission cinemas, small stories)

Gameplay 60%

I enjoyed both stories but I found RR had WAY to much attitude and forced naration through the story. They did a great job of telling the story and describing the motivation. The voice acting in the concept artwork told story was excellent as was the writing. I really didn’t like the main character until about the last quarter of the game. Logan’s shadow had more of a simple and cliche’d story, but the ensemble cast made me care more about the crew and let me focus more on the game itself.
3. Achievements
Both games have hidden documents and various achievments throughout the level. The key difference between the two games for me is that I have NO IDEA what the achievements in RR are whereas the achievements in SF:LS were very clear to me. To be fair I gave SF:LS more replays, but througout that play experience I was getting feedback on achievements. Replays were very clear and very fun to attempt. The focus was on using weapons and the environment properly and collecting hidden documents. The presentation in SF:LS increased the play experience. I didn’t find any game enhancing elements in RR.

4. Presentation
Both games really show off what the PSP can do. I think that RR probably takes the edge in technical difficulty and variety (mech levels) and also dealing with red/browns on PSP is very hard to make it look good with the low responce time on the LCD. SF:LS had more natural environments and more blues and whites. For my own taste LS:SF was again the better game.

Conclusion
Obviously I liked SF:LS much more, but both games are good. I find it fascinating that the same studio made a similar if not the same quality game but that choosing a more action based focus made the game less interesting to me. From what I can tell, this is an example of where choosing your audience really does dictate design changes. I hope that RR is more successful than SF:LS because I don’t think the previous games got the sales they deserved.