GDC San Fransisco 2011

GDC Last session day

Today was already the last GDC day! The sessions started a bit later, so we could catch some extra sleep. The sessions turned out to be even more interesting than yesterday!

Halo: Reach Effects Tech

Halo reach effects techChris Tchou explained the technique they used at Bungie for fast colliding particles. Everything must be done on the GPU to keep the simulation fast. However, dealing with physics in the graphics pipeline is very challenging. Their approach is surprisingly easy, but I had never heard of it before. They calculate the physics for the particles using the information available in screenspace: the normals and depth of the environment. This will result in an incorrect particle simulation behind the player, but that won’t be visible anyway. In short, the path of the particle is checked against the information of the depth buffer. If there is a collision, the bounce is calculated based on the normal-buffer information. This approach seems to me like the perfect solution for colliding particles: No unnecessary work is done, it is fast and it looks very good.

They also explained how they implemented the technique for the shields in Halo: Reach. The vertices are pushed out along the normal to create the hull. The distance to the background is calculated using the depth buffer. When the difference of the current depth and the depth from the depth buffer is small, the hull is in front of the shielded object. In that case, the shield should be more translucent to show the shielded object. The outer edges of the hull are faded to give the shield a smooth look. I really like making such graphical effects myself, so it was cool to see their approach.

To-The-Metal CPU Optimization

This session was sponsored by Intel and introduced their new AVX instructions. Optimizing CPU code in general was also discussed. I had only learned about the internals of a CPU on a very basic level, so this session was very useful to provide me with some more insight in what actually happens. I grew a bit of intuition on how to do hardcore optimization. I will probably not need to use this in the near future. The compiler already optimizes code up to a certain degree. And because optimizations can obfuscate the code quite a bit, I don’t think code should be changed for optimization when it is not necessary. I think readability is much more important than optimization in most cases. However, if I would decide to make a software renderer (or raytracer), this hardcore optimizing will be necessary.

Directionally Localized Anti-Aliasing

A brand new technique for anti-aliasing was presented by Dmitry Andreev. There have been quite some recent developments in the area of anti-aliasing techniques, primarily focusing on MorphoLogical Anti-Aliasing (MLAA). But MLAA is not perfect. MLAA is hard to implement efficiently on the GPU, and the result changes when the camera moves which gives an uneasy image. The approach of DLAA is quite straightforward: edges are blurred along their edge direction. The blurring is done exclusively on the edge pixels and uses a large kernel. The result is a very good looking anti-aliasing!

The algorithm is split in a horizontal and vertical step. First, the edge pixels are detected using a kernel. The detected edges are blurred to filter out insignificant edges. To filter out edges from very high frequency particles, the pixels which show up as edges in both the horizontal and vertical edge detection can be excluded. On the resulting edge-pixels, a large smoothing kernel performs the blurring and the result is blended back onto the original image. There are some other optimizations possible, which brings back the execution time to 2.2 ms on an Xbox 360 and 1.6 ms on a PS3 using 5 SPU’s. That’s still a bit slow, but it might be faster than other techniques with a similar quality. Unfortunately, no in-depth comparison to other anti-aliasing techniques was showed.

Subsurface Scattering

Subsurface scatteringSubsurface scattering is difficult to render quickly in computer graphics. It is the effect that light passes through the material partially and diffusely (like the red glow shining through your hand when an intense light source is at the opposite side). The offered solution approximates this effect, ignoring the real physics behind subsurface scattering. Basically, when a light source shines on an object from the back, the lighting shining on the back is calculated. Two things have to be accounted for in this lighting: the thickness of the object and the distortion of the light. The distortion is handled by changing the inverted normal slightly. The thickness of the object is pre-calculated (and stored in the G-buffer). This is done by using a sort of inverted ambient occlusion: The distance inside the model to other edges of the model is calculated and averaged, giving a sort of average thickness at a specific position on the model. This translucency map can be edited to add for example veins in the material, faking internal material structure. It can also be colored, which could fake for example the red interior color of a human hand. The pre-calculated translucency filters light visible from a back-light. The result of thisĀ  technique looked astonishing, especially when combined with global illumination. The reported execution time was 0.6ms on an Xbox 360, 1.0 ms on a PS3, and 0.03 ms using Compute Shaders in DirectX 11 (What?! This because of their other patching technique for deferred shading). The main disadvantages of this technique are that concavities are ignored and morphing objects are not supported because the translucency map is pre-calculated.

The end

That was the end of the GDC. The last two sessions of the GDC (DLAA and subsurface scattering) were great, and exactly the type of sessions I had expected before attending the GDC. Some sessions were in another form where the developers just told the way they approached things (so not really new stuff, just experience-sharing).

When looking back at the GDC, the experience was inexpressibly awesome. I have never learned some much in so little time. But learning cool new stuff was not the only benefit. I have also gained quite a few valuable connections. I will have contact with at least 4 of them after the GDC!

For the last day, we’ll probably do some more shopping and cruising around San Francisco, but I will not post that here. The previous paragraph is the perfect closing of my GDC-report, so I will not ruin that with a new post. For now, we are going to enjoy the tablets we got yesterday :)

Bas and Emiel with their tablets.

Bas and Emiel with their tablets.

| 6 people like this post.
2 Comments

GDC Second session day

Photo of the 1015 club

One of the rooms of the 1015 Folsom Club.

The party we visited yesterday turned out to be in a luxurious club. We noticed this when we walked in and saw the colored lighting, but we knew it for sure when we saw the prices of the drinks… Unfortunately, Emiel could not join us because the age verification was very strict.

The party itself was not really meant for us. It was more a talk-to-old-friends party than a meet-new-people party. But still, it was fun to be there!

We went back pretty early to get a good night of sleep for the sessions of today:

Inside the Kinect

This lecture was not a promotional session on how great Kinect is, but an actual in-depth explanation of the techniques used in Kinect! The depth sensing appears to be done in a different way than I expected. In general, a depth map can be created by looking from two different positions at the same object. The depth is calculated from the shift in the position of the same object between the two camera images. I assumed this would always involve two camera’s, but Kinect does it differently. In stead of two camera’s, it uses one Infra-Red transmitter (which projects a grid on the room) and one IR-camera. When viewing through the camera, this results in a shift of the positions of the dots relative to the projected positions. That shift reveals the depth at a grid-point.

Also surprising to me was their approach on the skeletal tracking. Skeletal tracking is a very difficult problem because humans can be very different. To cope with this, they use Machine Learning. This means that they actually haven’t made a technique to do this, but they let the computer figure it out based on a huge set of testing data. So they also don’t know how it exactly works! Kind of lame, but at least it works (not perfectly though).

A bit disappointing was that the session focused on gesture controls. I think that Kinect should not be used to detect gestures. When using gestures, one specific action is triggered. But when you want to trigger one action, it’s much easier to just press a button. I think the power of Kinect lies in the mapping of the movement of your body to the virtual world. The game should not judge if the movement of the player is correct (like with the interpretation of a gesture). The movement of the player is always correct, but the final result in the game world can turn out undesirable for the player. But I’m going off-topic here because the session was only on the technical stuff.

Dead Rising 2 multiplayer system

The most interesting part of this session for me was that the developers were busy implementing a component-based entity system. This is a very promising architecture for game objects. Bas and me are also using it in our FireFly 2 engine. The session shortly talked about the possible implementation of multiplayer in this system, which provided us with some ideas.

Intel MeeGo introductory session

Marriott Hotel

A small part of the ginormeous Marriott Hotel

This was not a GDC session, but a separate session organized by Intel outside of the GDC. It took place in the… Marriott hotel. Wow! The session itself was about the Intel AppUp appstore and the MeeGo operating system. I’m still a bit skeptical because both platforms still need to build up a userbase. However, this is also an opportunity because the appstore is not so overcrowded as Apples appstore is. So when (if) I’m going to make a game for tablets, I’ll keep an eye on this.

As reward for attending the session with a highly promotional level, we were given a tablet computer! What?! Yeah, that’s quite exceptional… It’s an ExoPC with MeeGo installed. The tablet user interface of MeeGo is pre-alpha and that’s clearly noticeable. It’s just not finished… at all. So I’ll have to install another operating system next to MeeGo to make normal use of the tablet.

Experimental Gameplay

I could only attend a very small portion of this session but it was quite interesting. I really like experimental gameplay, both to play and to make. Fortunately all sessions are recorded, so I can revisit this one later.

Lighting the Apocalypse: Rendering Techniques for Red Faction: Armageddon

Photo of the Session

This talk was on Inferred Lighting. Because Bas and I did our research project last year mainly on this technique, I was very interested in this talk. Finally a subject I know more about than most other attendees of the GDC!

It appears that some small improvements have been made on the technique since the paper was published on which we based our implementation. For example the custom bilinear filtering was optimized by utilizing the hardware supported bilinear filtering. This is done by simply changing the sampling position to a point where the hardware filtering only uses the correct samples. This is not possible when there are only three correct samples, so then it drops one of the three samples. They also showed a variant of the technique where the lighting was not performed at a lower resolution. In this case, the DSF is only used for transparent surfaces and MSAA, and that allows for some significant optimizations in the DSF.

After the session, I approached the speaker (Mike Flavin) and he was very interested in our research and especially the demo we created. The demo allows for a good comparison between different dynamic lighting techniques, and for tweaking the inferred lighting variables. This was also the first implementation of Inferred Lighting he knew of outside of Volition. (But we’re not actually the first to implement it. Matt Pettineo had implemented it in XNA before we did.) It was really great to talk about Inferred Lighting with a real expert on the subject. We discussed a lot of the challenges the technique posed. I hope our demo can help the guys at Volition to improve the technique further.

Tomorrow is the last day of GDC sessions! I’m not sure if I will survive it because my head already feels like it has absorbed the amount of knowledge it would normally consume in months…

| 5 people like this post.
1 Comment

GDC First session day

Today was the first session day. The difference with the tutorial days is that the sessions do not take each other into account, so you have to make your own schedule. This allows you to choose all the interesting stuff. Also, all sessions present new techniques or insights, while this was not always the case during the tutorial sessions.

Several sessions I really wanted to check out today were overlapping. This is because there are so many fun sessions! I will also face this problem on Thursday and Friday. There is even a slot on Thursday with three extremely interesting sessions! Fortunately, all sessions are recorded (some audio-only), which can be viewed back in the GDC Vault.

Keynote

Keynote hall

You can get an idea of the size when you look at the big pillars. There were 4 of those pillars in the entire hall!

The President of Nintendo started the day off with a keynote (a special session for everyone). It consisted of a lot of PR-talk, and some new bits of information regarding upcoming games. But in the end it was more interesting when he talked about the Industry Concerns of the game industry. It was about the large scale of development teams which prevents real craftsmanship. And about the split between free crappy games and expensive AAA-games, that can possibly threaten the business of the game industry (because people expect games to be free). However, I don’t worry about these concerns. I see them as new opportunities!

The hall in which the keynote took place was HUGE. It showed the massive scale of the GDC, especially when you take into account that most people weren’t even present at the keynote!

Sessions

There were two sessions on techniques used in the Frostbite 2 engine, used for BattleField 3. These sessions went into great detail on their low-level optimizations. This was really fun because I didn’t know what kind of low-level changes gave significant optimizations.

Slide of the culling session

The session on “Culling the Battlefield: Data Oriented Design in Practice” was very interesting. The normal approach to speed up hidden object removal is to use a tree-like spatial hierarchy. However, this introduces a lot of cache-misses. The new approach of DICE is to… not use such a tree-like structure! Everyone laughed when this was presented. It is actually faster to test everything, than to first filter using a spatial hierarchy. Of course this doesn’t apply to all situations, but it does apply when there are around 15000 objects in a scene. The big advantage of this “new” approach is that it can be highly parallelized, and optimized in other ways.

Another session explained the details on how the fully destructible world is calculated in the newest Red faction game. This was a very clearly explained. In essence, buildings consist of layers of objects and the stress on is propagated through these levels (top to bottom).

Networking

We showed our stereoscopic 3D demo to two Dutch people (speakers at the GDC actually!) who were very interested in the usage of head tracking to increase 3D perception. There might be an opportunity for future cooperation here!

We also walked by the Guerrilla Games Career booth, and the guy we spoke was surprisingly interested in our research on the technique for fast stereoscopic 3D! He would forward our business cards to the Tech people of Guerrilla so this might lead to something.

Party

We are invited for a party tonight! It’s a party for Dutch and Scandinavian developers. I’m really curious what it will be like. I hope Emiel will get in because the age limit for alcohol is 21 here, and he is 20…

Here are the links to Bas and Emiel’s posts!

| 5 people like this post.
Leave a comment

Physics for Game Programmers

Morning skyThe day started very early (at 7:30!) with a Dutch Business Breakfast organized by the Dutch Consulate General. It was nice to see a big portion of the Dutch attendees of the GDC, and to catch up with some acquaintances.

As for our GDC-day: We attended the Physics for Game Programmers tutorial. This was a good opportunity to learn more about the implementation of physics engines. I only knew of their internal workings on a very superficial level. The tutorial gave me a better intuition on how physics can work in a game. I also learned in which areas the current developments in physics are. I always thought that rigid body physics was a solved problem in games, but it seems there are still some quirks that can be ironed out. Other developments are in the area of GPU physics, networked physics and fluid dynamics.

Solving the tunneling problem in 2D

During the Motion and Manipulation course at the Utrecht University, the concepts of the Minkowski sum were extensively treated. But the course didn’t discuss the implementation. The talk of Squirrel Eiserloh expanded perfectly on this topic.

The tunneling problem is the problem that a collision can occur between frames. So you have to look at the motion between the frames to do correct collision detection. This is very difficult, but not when simplified extensively. Consider 2 moving polygons A and B. To check for collision, object A should be dilated (Minkowski sum) using the negated shape of B. This simplifies the collision detection to a polygon – point detection. The objects can be translated such that the point is at the origin. Furthermore, in stead of looking at the motion of A and B, place the frame of reference on object A, so that only B seems to move (relative to A). The result is that a moving point has to be intersected with a polygon, which can be done by using a ray cast. (Rotation of two objects still cannot be simplified.)

Physics Networking

Glenn Fiedler gave a great overview of networking models for game physics. Physics involves a lot of interactions, and it is a challenging problem to keep it synchronized on multiple computers over the Internet. There are a few different approaches. The best approach depends on the specific scenario.

  1. Client/server: The server does the entire physics simulation and sends the result to the clients.
  2. Client prediction: Similar to 1, but seemingly solves the problem of delay because the client predicts the simulation. When the final simulation is received from the server and something turned out to be wrongly predicted (like when another user influences the simulation). Then the simulation has to rewind and be re-applied with the final information from the server. Not really pretty.
  3. Deterministic lockstep: The game has to execute fully deterministic, and only input is transferred. The game-simulation can only advance when the input data of all players is received. The input can be transferred peer-to-peer, but that allows for lag-cheating. An alternative is to route the input through a server for better control.
  4. Authory scheme: A very interesting approach where every client simulates a part of the world and transfers the results to the other players. The key here is that every client simulates the things important for that client (like the local surroundings). This way, the user does not notice any delay while no rewinding of game-state is necessary!

Smoothed Particle Hydrodynamics

The simulation of fluids starts to become feasible for use in games. Particles are used to simulate a fluid. The simulation is based on the density, which generates pressure and viscosity forces (which act like a spring and a damper). The density is calculated by adding smoothing kernels. The smoothing kernels represent the amount of presence of the particle.

Presentation

An other presentation on Soft Springs.

Thai Noodle King

We discovered a new type of food: Thai food! It tastes good, it’s cheap and it’s finally something else than hamburgers. It’s also really fun to eat with sticks, although it’s a bit clumsy. Definitely something to keep in mind!

Now we are going to resolve the final conflicts of overlapping sessions in our session-schedule for tomorrow!

Also check out the blog posts on today from Bas and Emiel.

| 5 people like this post.
1 Comment

Advanced Visual Effects with DirectX 11

I was unsure what to expect from this “tutorial”-format. It seems that it consists of a bundle of sessions with the same theme. Great! I’m really interested in the new possibilities DirectX 11 offers.

The day consisted of 9 sessions, which took 8 hours in total (including breaks). It can be compared to a full day of class. Normally that’s wrecking, but not at the GDC. Probably because it’s (mostly) really interesting stuff.

Advanced Visual Effects with DirectX 11 schedule

The sessions gave a really good overview of the potential of DirectX 11. On the one side, it adds more functionality to the GPU. On the other side, it makes the GPU more general, so it opens up possibilities for a whole new range of techniques.

The main features are DirectCompute (the more general purpose side of DirectX 11), Tesselation (to dynamically adjust the level of detail of models), and Deferred Contexts (a way of multithreading the communication with the GPU, although not yet implemented by the drivers). Also some small new features were mentioned which allow for optimizations, such as the GatherRed function which fetches the 4 samples which are nearest to a point, and a read-only depth stencil view.

A very interesting application of Tessellation is the possibility to render splines/surfaces. Splines are a mathematical description of curved lines. When stretched into 2D, they form perfectly curved surfaces. With tessellation the amount of detail of these surfaces can be adjusted depending on the distance to the camera. So if the surface is very close, the surface still seems smooth. This is particularly interesting because I’m currently enrolled in the 3D modeling course at the Utrecht University, which covers the mathematics behind splines (amongst other topics).

The sessions gave me a sort of feeling how DirectX 11 works, and what its strengths and weaknesses are. It also gave me a lot of ideas which I can look into sometimes…

The sessions were on the third floor of the Moscone Center West (one of the three buildings of the Moscone Convention Center), and it was HUGE. Ridiculous…

Moscone West

During a coffee break, we met two Dutch speakers who were going to present tomorrow at the Physics for Game Programmers tutorial. They were actually very interested in the work on head tracking we did as part of our research project on stereoscopic 3D. Tomorrow we are going to show them the demo we created!

Also check out the blog-posts of Bas and Emiel for today.

| 6 people like this post.
1 Comment

Almost time for the Conference

Today, we visited the Golden Gate Park. It is a huge park, so we rent a bike to be able to see all of it. It was very weird to see such a big park in the middle of the city. The trees are also very different from those in The Netherlands.

Golden Gate ParkGolden Gate Park 2San Francisco from the Golden Gate Park

After that, we went for a classic American dinner: Steak! It tasted quite good actually, but it was a bit much meat. And we already picked up our GDC conference passes, so we don’t have to do that tomorrow morning.

GDC Pass and information

We checked the available sessions for the week, and there are a lot of very interesting sessions. Unfortunately, there is quite some overlap. To prepare for the DirectX 11 tutorial day today, I’m going to get a good portion of sleep!

| 4 people like this post.
Leave a comment

Sightseeing San Francisco

Today we went shopping and sightseeing. Bas and I bought a prepaid phone so we can call each other without having to pay the international rate twice. Buying a crappy phone is actually surprisingly cheap. Our phone even has a camera and Bluetooth for only $20 with 20 minutes call-time! I also bought some clothes. We expected the clothes too be much cheaper than in Holland, but unfortunately that didn’t apply to all clothes (for example Vans clothes are still as expensive as in The Netherlands).

There are some ridiculously luxurious malls here. Like the Bijenkorf in Holland, but much bigger and with even more gold-colored stuff.

Nordstrom mall

After that, we did some sightseeing. That’s sort of obligatory when you’re in San Francisco, of course! So we walked past the sky-scrapers in the financial district, towards the coast. The coastline was great and provided a nice view.

Bay Bridge

We also visited Fisherman’s Wharf, but that was overcrowded with tourists and crappy expensive souvenir shops. After that, we headed for the Coit Tower. That tower is built on a hill, and the walls had very ugly paintings on them. The top gave us a great overview of the city!

Coit Tower view

We decided to eat at the McDonalds to get the real American vibe, but it was disappointingly similar to the McDonalds in the Netherlands. No extra extra large burgers, or 3 liter coke cups… Maybe the prejudices about America don’t apply that much on San Francisco. Extremely fat people are also very uncommon here. But Starbucks is as present as the prejudice. On literally every block, there is a Starbucks! What is very strange, is that there aren’t any supermarkets. We found only one small 7 eleven, but the food costs the same as in a Starbucks…

Anyway, back to the story. We took the classic San Francisco tram back to Union Square (near our hotel). It was a weird ride. The tram drove very fast uphill (and it was really steep). And when it went downhill, the driver was braking by pulling a huge handbrake with a lot of force. The tram also stopped on the middle of some crossings for people to hop on and off, blocking all the traffic!

After that, Bas and Emiel had to watch a movie in the theaters. They are huge movie fans. So we watched Tron 3D, which was actually more fun than I expected!

Tomorrow, we will already collect our passes for the GDC, and probably go to the Golden Gate Park. I’m going to recover a bit from the jetlag now, which isn’t as bad as I expected!

| 3 people like this post.
Leave a comment

A taste of San Francisco

Did you know a flight to San Francisco actually passes through Greenland? Probably because the earth is a sphere and all, or maybe it has something to do with the wind. Anyway, I never thought I’d see that on this trip. And I took some nice pictures of it!

Greenland from the sky

The flight went great, although 11 hours is really long. I even met quite a few other game developers who were going to the GDC as well. The KLM services on board are ridiculously good. The food tasted better than in some restaurants!

The ambiance in San Francisco is awesome. It is totally different from any place I’ve been before. During the trip from the airport to our hotel, the freeway through the city reminded me of several games I played a lot such as Burnout Paradise and GTA 4. I will probably have more of these deja-vu’s this week. GTA San Andreas and Midtown madness 2 are games I used to play a lot and the are (partially) based on San Francisco.

Entering San Francisco

Our hotel is great (Park Hotel). On arrival they even arranged something (week-rate in stead of day-rate) which saves us 400$! How’s that for service? Talking about service, we went to an Italian restaurant to get dinner, and it was very luxurious but still affordable!

Now I’m going to catch some sleep because I’ve been awake for the past 24 hours…

| 4 people like this post.
Leave a comment

Ready for lift-off!

My flight for San Francisco is leaving tomorrow! Get ready America!

Suitcase

The suitcase is a bit overkill because it’s only half full. At least I won’t have any trouble packing for the trip back.

| 4 people like this post.
Leave a comment

GDC Scholarship and Plans

GDC LogoLast summer I went to the GDC Europe in Cologne with Bas Zalmstra and Emiel Bon. We had a great time there, and learned a lot. To our surprise, we met two other students from the Utrecht University. They told us they had gotten a scholarship for the trip. (We paid for the entire trip ourselves!) We asked a teacher for more information about this, and he told us there was going to be another opportunity to apply for a scholarship for an event early 2011. Immediately we had the GDC San Fransisco in mind. The GDC San Fransisco was an unreachable event for us, because it is way too expensive. While doing the FireFly research project, we had repeatedly encountered very interesting slides from previous editions of the GDC San Fransisco.

The scholarship was available through the Level Up! project, a collaboration to stimulate game development students, centered around Utrecht. We applied for the scholarship and cross-referenced each other in our motivational letters. All three of us got the scholarship! Yay!

The GDC Schedule

Monday and Tuesday are Tutorial days. I expect the tutorials to be workshops, but I’m not sure how interactive they will be. We applied for the Advanced Visual Effects with DirectX 11 and Physics for Game Programmers tutorials. Die-hard technical stuff, just the way we like it!

We did not make a schedule for the three session days yet. Not all sessions are announced, but there already is a ridiculous amount of interesting sessions. So much that a lot of things we want to attend will overlap. That’s simply because there are only 16 slots, and many more interesting sessions! My focus for the sessions will definitely be on the technical stuff.

Goals

Our primary goal for the GDC is to learn! On the Utrecht University there is little expertise in Computer Graphics, so this is a great opportunity to learn the new developments in that area. Maybe one of the topics is suited to do some future research on, during my Experimentation Project or my Thesis.

When we will be back, we will give presentations about the most interesting topics to students at the Utrecht University. Looking forward to a specific subject? Let me know!

| 5 people like this post.
Leave a comment