Saturday, April 24, 2010

Gold Complete!

My DigiPen Junior game team, Phoenix, just presented our game Runeshift at the DigiPen 2010 Student Showcase! Runeshift is an entrancing slide puzzle game that reveals a symbolic story as the player solves runic patterns. Here is the trailer I made for our presentation:

Friday, March 26, 2010

The Mystery of the Window into the World

This week saw the due date for what I'm calling "the worst graphics assignment ever." I saw some of the weirdest renders in this assignment. The first mistakes I made were little ones, but they had some very artistic effects. Later, I had one of the most mysterious problems I've ever encountered.

I'll start the story from the beginning: The project was to create a KD Tree from a triangle-based scene using Surface Area Heuristics to choose the best dividing planes. Then, using my KD Tree, I was to render the scene using ray casting (non-recursive ray tracing). And after that, add phong lighting. What could go wrong, right?

I decided to approach the assignment by ignoring the KD Tree altogether. I attempted ray casting by testing ray intersection against every triangle in the scene. Very, very slow, but at least I could isolate problems more easily.

The first render looked like a pre-school paint smear. After realizing that I was performing an integer division when getting my aspect ratio, I got a slightly more intelligible paint smear. The left side of the picture looked correct, but the right half looked like my program just stopped trying. Then, I considered the merits of resetting my color between casting rays, and got what must be the cheapest version of shadow casting I've ever implemented:

(Quick, tell the NPR graphics guys! I got comic book shading!)

Finally, I thought of also resetting my minimum time of intersection between casting rays. I rendered and waited extremely patiently for the picture to form. It looked correct! The slow speed of ray casting without a KD Tree was getting to me, though, so I decided to cast a ray for only every other pixel to speed it up. So, I got the newsprint version:

Then, I implemented my KD Tree. I waited with bated breath as it built the tree and rendered. I was sure it was going to draw something like a sparse spattering of random triangles... But it didn't! It looked perfect. Except for the fact that it only rendered a cube-shaped portion of my scene:

Excuse me, but huh? I moved the camera around, and the rendered cube moved with it, almost like I had a three-dimensional cube-shaped "window" into the world of my scene. Amazing. After I showed everybody I could find, I sat back down to figure it out. Was I miscalculating the area I should be ray casting over? No. Was my Axis-aligned bounding box (AABB) for the whole scene too small? No. I asked other classmates if they had any ideas. No. I asked Seniors if they had any ideas. They thought it was cool, but they were as puzzled as I was.

Finally, I e-mailed my teacher for a consult. He commented out some functions to isolate the problem. (Why didn't I think of that? Oh well, next time.) It turned out the scene rendered completely correctly if I skipped the function that clips the rays against the AABB's. I looked over my algorithm and couldn't find anything wrong with it, so I scrapped the function and wrote it over again using a similar but slightly simpler algorithm, so I would be able to find problems more easily. And then, of course, because the graphics gods are fickle, it worked:

Here is the ray clipping algorithm for those who are curious:

So, I never did truly find out the answer to the Mystery of the Window into the World. If anyone has any ideas I haven't thought of, I would be all ears!

Tuesday, March 16, 2010

GDC: A Learning Experience (Post Mortem)


Taking a moment to look back on all of it, I have a few things to say about the whole experience.

What Worked
  • The parties were an excellent place to network, and so was the W. I got stacks of business cards and lots of requests for me to send resumes at the parties. The expo floor and career pavilion were not nearly as productive for me.
  • Using humor was always successful in meeting people. Whenever I had an opportunity, ("What a lovely necklace!" to a guy who had beads from another party, or "I want one!" to a guy with a glowing ball from Activision) it was an excellent ice breaker to starting a conversation.
  • Quick exits whenever I annoyed somebody. Almost always the next person I approached was far more worth talking to, which made me glad I hadn't wasted time with someone who didn't really want to talk to me.
  • Profiling people to decide who to talk to. Before I started paying attention, I ended up talking to a lot of people who were students or also looking for jobs. When I started scanning the room to see who looked like producers and leads, I ended up talking to some of the top dogs in the Industry. They gave me good advice, good leads, and sometimes even asked me for my resume.
  • Having a flash drive on hand with a demo of my game. This got me an impromptu interview that led to a second interview the next day, which led to an internship offer!

What I'll Do Differently Next Time
  • Bring fewer resumes and CV's and instead print them out as I go. I only handed out a few, and I would have had plenty of time to restock if I started to run out.
  • Spend more time at the W. The W is a great place to network just about all day, so I think next time, I'll just hang out in the lobby whenever I don't have a better place to be.
  • Remember people. The most embarrassing moment I had was when I introduced myself to someone I'd already met, especially since it happened to be someone at CCP!
  • Bring code samples and a graphics demo with me as well as the demo of my game. At my interview, after they saw my game, they immediately asked for code samples, and I didn't have any on me. Luckily, I had them at my hotel and they let me bring them the next day. At Crytek, I was asked for the graphics demo I listed on my resume. It would have been far more impressive if I'd been able to whip it out on the spot.
Regardless, I had a wonderful time at GDC, got a nice stack of business cards, and met a wide variety of amazing people. I'm definitely going again next year.

Saturday, March 13, 2010

GDC: A Learning Experience (A Blur of Days)

Thursday, Friday, and Saturday have just been one very fast, very blurry ride. What is the last little tidbit I've learned?

Your Idols Are People, Too
The past week I have talked to CEO's, Producers, Directors, and Leads of every department I can imagine. And last night, I talked with Hilmar Veigar Petursson, the CEO of CCP. You know, the guy at the very tippy top of the company I most want to work for. Do you know what makes them so special, so different from us little people? Nothing. They are just people who want to kick back and have a drink.

Wednesday, March 10, 2010

GDC: A Learning Experience (Wednesday)


I have some more tips for GDC!

The W
Last night I didn't have a good party to go to, so I followed a rumor Arisa Scott (DigiPen artist) found out: Hotel lobbies are hot spots for networking. It turns out the St. Regis, which is where I'm staying is known as the "lawyer hotel," so I went a couple blocks down to the W, which is apparently a hotel where game developers network. The rumor was more than right. The place was packed. The experienced GDC goers I talked to there told me the W lobby is the place for game developer networking and business meetings from about 11am to about midnight. They said you can spend all day there, and when the parties get out at around 9pm, most of the party goers come to the W and continue networking. Very good to know!

Body Language
Arisa and I have been putting her uncannily accurate F artist instincts and my T programmer brain together and figuring out some simple body language tells that indicate what kind of a role someone might have in the Industry. I'm absolutely certain I'm going to offend somebody here, but here goes:

Designers - tend to communicate with wild gestures. They're very physically active when they talk, as though their ideas can't be confined to words.

Artists - observe everything. The entire time they're conversing, they are looking, seeing, watching. Their energy is totally absorbent, like a sponge with eyes.

Programmers - are reserved and inward. They rarely make any superfluous movements. Almost like their body is just a shell for their mind, which is where all the real stuff happens.

Producers - see the big picture. They are focused on the room and how everyone interacts and fits together. Their energy is outward and encompassing.

Audio Technicians - are expressive and rhythmic. Their body language is very similar to designers', but every move they make and every word they say seems to follow a rhythm, like they are talking to a song you just can't hear.

Lawyers and Business People- are probably the most "normal" seeming people you will meet at GDC. Lawyers seem to genuinely enjoy the exercise of talking for its own sake, and business folk seem to be very linear and focused.

Of course, don't believe any of this. People are people, and everyone I've met has been unique. This was just a fun exercise, and a good conversation starter!

Talk to People In Suits
They are likely to be CEO's, Directors, Producers, Media, or Outsourcers. Even if they don't represent a company you want to work for, they are likely to be well connected. I spoke to several of the above tonight at various parties, and a couple of them even asked me what my dream company would be and told me they would see what they could do. You never know!

Tuesday, March 9, 2010

GDC: A Learning Experience (Tuesday)

I'm realizing I'm going to want to nearly constantly add things to this blog as I learn more at GDC. So, I'm going to create a post each day and add to it throughout the day. Here is what I've learned today:
Decompress
The parties and constant networking can get draining, so it's good to carve out some time for yourself to recharge before your next socializing bout. San Francisco is a center of art and culture and really good food, so explore!

1. Find something interesting on a map and go find it. Besides being a fun adventure, I found this gave me a reason to learn my way around downtown San Francisco, which I imagine will be very useful when I'm wandering around after dark looking for a party. (Edit: I was right. It was.)

2. Look up! The architecture in San Francisco is absolutely breathtaking. I realize I'm a bit biased from of having a degree in Art History, but I imagine anyone with eyes could enjoy it.

3. Go to the SFMoMA. The San Francisco Museum of Modern Art is very close to the convention and they have a student discount if you bring a student ID. I'm planning on going Thursday morning, since they're closed on Wednesdays.

4. Go to Chinatown. I have always wanted to go to the San Francisco Chinatown, and I'm so glad I made time to do it today. It is so pretty! And the vendors are all so friendly. I'm also glad I budgeted for it. My wallet is much lighter now. I bought a set of Chinese spoons, a set of Japanese bowls, and a real cast iron teapot. And yes, the spoons and the teapot are both lime green.

GDC: A Learning Experience (Monday)

This is my first time at GDC. It's already a whirlwind of experiences, and I don't even start officially attending GDC until Thursday! There's no way I'll remember everything I'm learning, so I'd better record the tidbits I've gathered:

Arriving Early is Totally Worth It

I arrived Saturday, and I'm so glad I did. It gave me a couple days to decompress and find my feet in San Francisco before going to my first party, which was way earlier than I expected!

You Can Attend Parties Before Your Pass
I thought that I wouldn't be allowed to go to parties until Thursday, which is when my Expo Pass to GDC starts. But, I found out about the Sparkpr Kick-Off Party on Monday, and figured it couldn't hurt to drop by and see if I could get in. It turned out they didn't even check my GDC Pass, because it was at a public venue!

Finding Out About Parties
I found out about parties using several methods:
1. Normal: the Parties and Networking page on the official GDC website
2. Watching: Facebook GDC events
3. Seeking: Googling the phrase "GDC 2010 Parties"
4. Stalking: searching the #gdcparty tag on Twitter
5. Mooching: constantly exchanging info with other friends who were also doing research
6. Viral: asking people at parties about other parties

You Don't Have to be Invited
Knowing where the parties are is apparently far more important than actually getting invited to them. I met the hostess at the party I crashed, and she asked me how I found out about the party. I admitted I had been stalking Twitter tags, and she said, "Great! Here, have a free drink! I hope you enjoy yourself."

Don't Buy Drinks
I bought myself two drinks before getting a free drink from the hostess and being offered a drink by an industry professional from Argentina. That made a total of 4 drinks, which is pushing my limit on being social while still being articulate. Next time, I won't buy myself drinks, so that I can accept drinks from other people when they use that as an icebreaker.

Journalists Know Things
Rachel Rutherford is right. If you randomly talk to someone and they turn out to be a journalist, find out as much from them as you can (politely). They know about lots of parties and other random events, and if you are lucky enough to befriend one, you're basically set for the whole conference.

Flit
If the person you're talking to looks tired/bored/edgy/whatever, leave! You have no obligation to keep talking to them, and your time is better spent talking to someone who is actually engaged by you. In fact, it seems to be better to conduct a conversation with an eye toward ending it even slightly short on a positive note, rather than letting it drag on. Speaking of which...

Leave the Conversation Gracefully
Learn these words well: "It was nice meeting you." Quite possibly followed with: "And good luck with GDC!" I was on the receiving end of these words and a very genuine smile, and it made me feel completely happy about the conversation as a whole, which of course is exactly how you want someone to feel when exiting a conversation with you.

Follow Up Immediately
As soon as you get back to your hotel, e-mail the people you met who were gracious enough to exchange business cards with you. It will be a lot easier than trying to e-mail everyone you met over the whole week when you get back to your hometown and your job/school. And, if you made any contacts who might want to get together again during the week, this makes it possible.

If you have any tips to add, please post comments!