GDC16 – Day 2

So yesterday was all math, and today was all education. …well sort of. Academic artists have a world view that is quite different from that of your typical scientist. I come from a very analytic background. Even my hobbies, playing poker and racing cars, and my artistic work in photography are a blend of the creative and the analytic. Once I wrapped my brain around the different way in which they were looking at the problem of pedagogy, there were some good take-away points from the morning and afternoon sessions.

One of the things that true of both artist and scientist is that we fail, and I mean we fail a lot. Most of our careers is spent creating one failure after another. This is NOT a bad thing, unless it’s the only thing you’re doing. The road to success is lined with a long sequence of failures, and those who do succeed accept this and even embrace it. When students finally arrive in a college classroom, they are absolutely terrified of failure. Personal note: This should not be a surprise given how frequently we subject our kids to high-stakes standardized testing, but that’s a topic for another article. Game development, much like the development of a new scientific model, is a process of constant iteration. You try, test, fail, tweak, test, fail, rinse and repeat. So many of our students are fearful of that initial failure that they don’t even attempt the work and fail in a far more destructive way. Mitigating, navigating, and learning from failure through iteration is paramount in game development just as it is in science, but it’s a tough thing to teach.

There were more ideas that I picked up throughout the day, but nothing really groundbreaking. I have some ideas related to the iteration process and managing failure I mentioned above that I will craft into some new exercises for the Astronomy courses. I’ll have more on that as I develop the idea into more than just thoughts in my head.

The last talk I attended was by Margaret Moser, “Teaching Designers to Code”. I thought that this would be useful not only because we occasionally get a more design-focused student in the Math and Physics for Games course, but also because even many of the programming-focused students are really just learning how to code efficiently. The two big take-away items here were not ones that were startling revelations, but rather stern reminder of what I already knew and should be deploying in my classroom. Something I could do better when describing algorithms in class is not to start writing line-items of pseudo code or equations, but instead to start with a block diagram of the process. This, of course, is the key to coding more complex solutions. Don’t think in terms of individual lines, but think in terms of functional blocks. That’s how I think of my scientific work. Think about the big blocks of the problem before you drill down into writing specific equations.

The evening ended brilliantly. Professor Hanna and I made our way down to a region where my good friend and fellow photographer, Bash Beard, took me when I was in town for the AGU Fall Meeting, Beldon Place. At first, it just looks like a sketchy back alley, but when you peek around the corner, it’s lined with one amazing restaurant after another with just about every type of food you can think to eat. We tried the last restaurant at the end of the alley, Brindisi Cucina Di Mare. Of course I was going to sniff out a seafood joint. What else did you expect?

Tomorrow is the first day of the main conference which means SWAG!!! The Expo Hall opens and it’s time to meander around the vendor booths and see what kind of cool loot I can drag back for my students, for Lillian, and for my officemate’s geocaches. It’s also the day of the Game Developers Choice Awards. Think the Oscars for video games, only with a bit more edge to it.

GDC16 – Day 1

It’s Math Day!!! The first two days of the Game Developers Conference is always given to specialty tracks and summits. For the past twelve years, there has been a Math for Game Programmers summit on Monday and Physics for Game Programmers on Tuesday. They’ve combined the two into a one-day summit, with the majority of talks being focused on the mathematics, but often with the physics of the game play in mind. As with any conference, some of the talks are huge hits, some are misses, some are good talks but not directly pertinent to your work or interests. This was the case on Monday as well. Fortunately, there were far more hits than misses. On the balance, it was a fantastic summit.

First up was J. Kyle Pittman (@piratehearts) to discuss jump physics. In our course, Math and Physics for Game Programmers, we teach students the basics of uniformly accelerated motion and the Forward Euler Method for numerical integration. When doing this, we certainly talk about free-fall motion and the kinematics of a jump, but Mr. Pittman made some great arguments for why doing jumps physically correctly could often be incorrect for good game play. Often, the acceleration due to gravity, $g$, is preset to a given value, often 9.8 m/s2 downward, and the dynamics of a jump are then determined by the vertical velocity, $v_y$, of the jump. This can lead to, although realistic, jumps that feel too floaty or too heavy, and often jump physics that do not match the necessary trajectories demanded by the level design. Rather than pre-determining the value of $g$, Mr. Pittman suggests allowing it to be determined by the constraints of the level design. If a gap distance and maximum height are known, the value of $g$ and $v_y$ can be calculated so that it is possible for the character to complete the jump.

$g = - \frac {2 h} {t_h}$
$v_y = \frac {2 h v_x} {x_h}$

where $h$ is the maximum height of the jump, $t_h$ is the time to reach the maximum height, $v_x$ is the maximum horizontal speed of the player’s character, and $x_h$ is the horizontal distance covered to the reach the maximum height. Combining these yields a value for the acceleration due to gravity that relies solely on the level design parameters and ensures that a jump is makeable by a player.

$g = - \frac {2 h {v_x}^2} { {x_h}^2}$

Groovy!

The other technique Mr. Pittman explained was using a different value for gravity for ascent versus decent. Mario’s jump physics included increasing the acceleration due to gravity by a factor of three once the jump reached it’s maximum height. This, of course, is physically inaccurate, but in developing a game, you’re goal is to produce good gameplay with believable physics, but simulation-level accurate physics. It’s funny how our brains will sometimes see a simulation that is physically accurate, but believe it’s totally fake.

Next up was Squirrel Eiserloh’s talk on camera shake. I always think of this as the Star Trek effect. When there’s trauma to a player, either from being hit or landing on a surface after a jump or fall, a bit of camera shake can lend realism to the visuals, much in the same way as camera shake was used, perhaps overused, in the original Star Trek episodes to indicate trauma to the ship. The big take-away from this talk was to use both rotational and translational shake in 2D environments, but only rotational shake in 3D. If you jitter the translation of a camera, you can easily end up with the camera inside of a wall. In a VR environment, just don’t, unless it is your intent to cause motion sickness and nausea in your players.

Later in the day, Simon Strange discussed finding distances in the training simulator, Strike Group Defense, a serious game designed to train Navy personnel on the best anti-ship missile defense strategies and tactics. Since naval engagements happen over hundreds of miles, the curvature of the earth is significant and must be taken into account. Given this, the game makes use of spherical coordinates to determine distance. Rather than using the complex trigonometry of calculating arc length on a great circle between two points, Mr. Strange opted instead to rotate the world so that the player was at the north pole. This means that the polar angle is a direct measure of the distance between the player and any point on the map, $d = R_{Earth} \phi$. This is brilliant, and something that Prof. Grondahl and I have tried to explain to our students over the years. Invest in a bit of work up front in order to save a lot of work later on. This is exactly what this method does. You invest in a bit of work ahead of time to rotate the player position to the +z-axis. After you do this, calculating distances on the curved surface of the Earth is a simple and, more importantly, computationally cheap calculation.

The last talk that I’ll highlight is from the always brilliant Gino van der Bergen. This year’s talk was on enforcing rotational joint limits in quaternian space. Quaternians are awesome mathematical objects first developed by Hamilton in the late 1800s. In fact, Hamilton was so excited about his recognition of the key to quaternian on his way home from the pub that he etched the basic complex numbers rules into the stonework of a bridge in Dublin. You have to love mathematical graffiti. Mr. van der Bergen did a great job of explaining why and how quaternions eliminate the singularity and degeneracy issues inherent in traditional matrix-based rotation operators.

Keep an eye on the website Essential Math. You can find slides from the Math for Game Programmers summits of previous GDCs, and in time the 2016 slides, including Mr. van der Bergen’s presentation on quaternian space, will be posted for public consumption.

At the end of the day, I took my camera and set out to capture some images around the Powell and Market region. If you’ve ever been in this area of San Francisco, you know there is a significant homeless population. The reasons for persons finding themselves homeless are as various and unique and the people themselves, but one thing that is common among them is their effective invisibility. Of course, people physically see them, but they consistently choose to disregard their presence, treating them as essentially invisible and separate from the rest of the sea of humanity shopping, commuting to and from conferences and work, waiting to ride the cable cars, and doing all the other things we’re used to doing. One such individual, an amputee, was sitting in his wheelchair off to the side of the rest of the buzz of tourists and townies. The look on his face was one of resigned dejection as people walked by with not even a glimmer of recognition that they just passed a fellow human being.

GDC16 – Day 0

So today was interesting. I’m all set to check my bag and fly out to San Francisco and I find out that my flight is overbooked. …great. The ticket agent asks if I would mind moving to another flight. I’m in the process of rejecting by default as I needed to be here by 1700h PDT. Before I get around to doing that and demanding the seat I purchased, he says, “How about a non-stop that leaves 22 minutes later than your flight, but arrives two hours earlier. …blink… Yup! That will work just fine, thank you. As it happens, it was the flight that the Game Development Program Chair, Prof. Russ Hanna was on as well.

The rest of the trip goes great. Flight in was smooth, BART into town was smooth, got my MUNI pass easy-peasy. The problem started when I got to hotel. Paperwork is such a fun thing. Turns out there was a mishandling of the paperwork between the college and the hotel so the new front desk clerk didn’t think that my room was paid. Great. There are worse places than San Francisco to be homeless for a day. Fortunately, the folk at the Hotel Stratford were amazing and very understanding! They knew that this would work itself out in the morning when the business offices opened, and they did.

What to do while in the Powell and Market area and your stressed out? Eat! Senior Scientist at Fundamental Technologies, Jerry Manweiler, introduced me to a great burger joint on Union Square, the Burger Bar. Wet, stressed, and hungry, That’s where Russ and I went. It’s an amazing place with an amazing view, although I will say the view during the Christmas season when I come here for the American Geophysical Union Fall Meeting is a bit more colourful.

One thing that did go right was registration at GDC. It used to be such a madhouse. They’ve really streamlined the process and have it working very smoothly. Russ and I were able to walk right up, sign in, and grab our badges. We were in and out in less than five minutes. Brilliant! That left time for some photography work. Before wrapping up the day with more food at an Irish-themed deli. I’m a sucker for corned beef sandwiches!

I’m part of a small group of photogs that post weekly photos on a theme in an effort to push each of us outside of our normal comfort zones and force us out of our photographic ruts. Last week’s theme was “Motion,” and what I wanted was a bus or streetcar moving through the steam rising from the storm grates. I picked the wrong side of the street. Although I didn’t get the steam in the shot like I wanted, I did get some panning practice in before racing season. The lens I used was a 28-mm prime thrift-store special. Auto nothing! It forced me to think about and set every aspect of the exposure and the focus. It’s not tack sharp, but by this time it was starting to pour down rain, and I wasn’t keen on sticking around to grab another.

EXIF
Device: Nikon D7000
Lens: Tokina 28mm f/2.8
Focal Length: 28mm
Focus Mode: Manual
AF-Area Mode: Single
Aperture: f/8
Shutter Speed: 1/15s
Exposure Mode: Manual
Exposure Comp.: 0EV
Metering: Matrix
ISO Sensitivity: ISO 100

Tomorrow, the Math for Game Programmers summit begins! All math, all day!