Sunday, May 3, 2015

Lighting theory for 3D games, part 3: the heresy of three-point lighting


This is part of a series on how I approach game lighting. Part 1 was about light fixtures, and part 2 is about light as a formal material.

In part one, we began by thinking about light culturally -- light has meant different things to different people across history, and you must consider that meaning when lighting your spaces. But in part two, we observed that much of our everyday relationship to light is more immediate and less intellectualized, that we often use light to help us do things. Theoretical frameworks about light help us articulate what we think the light is doing.

One of the most common theoretical frameworks for lighting is the three-point lighting system, used mainly in photography and film. As I argued in part 2, one of light's most important jobs is to allow you to read the surface or topology of an object. The three point system helps us formalize light source in terms of how to "read" an object. (I also argue that it has some serious weaknesses for 3D video games, but we'll get to that in a minute.)

It's called "three point" because there's at least three light sources involved:

Friday, April 24, 2015

"Succulent" technical overview / behind the scenes


This is a high level discussion of how I achieved certain effects in Succulent using Unity. It spoils the game, so I recommend you play it and/or read my artist's statement.

To the game engine, the popsicle (or "ice lolly" or corn dog) in Succulent is the main director for the entire scene. It is essentially a psychic telekinetic popsicle that dictates music playback, effects, and character animations... The popsicle is god. Love the popsicle.

To many developers, the most obvious straightforward way to achieve this popsicle-sucking interaction would've been to create a hand / arm controller, and then parent the popsicle to the dude's hand. But this "direct" way would've been the wrong way; this game is about popsicles, not about hands. Tuning the hand and arm movements necessary to pilot it into his mouth -- it would've been painful and unnecessary. (This is why it's important to have a fairly solid concept before you start coding something. The concept and design will affect how you code it!)

Friday, April 17, 2015

Embarrassed silence

I'm stealing the first three paragraphs of Pippin Barr's lovely post: (see also -- Emily Short's take)
A post called Minimum Sustainable Success by Dan Cook has been doing the rounds on Twitter recently and so I read it because people were saying it was good. And it is pretty good, especially if you’re a bit games+money minded – as I am not. It’s a hard look at how you might address and perhaps even mitigate some of the enormous risks and problems involved in getting into the making-a-living end of our beloved videogames.

In there, Dan brings up the “supportive spouse or family” category of game developers and points out that people don’t often “admit” to being in this one, with the idea being that it’s a bit embarrassing, and that it should be talked about more to add perspective to this crazy thing called “how the hell am I supposed to make the games I love and also live at the same time?”

Fortunately I have no shame, and so I’m writing this to represent one data point of the “supportive spouse” crew. Are we legion? I don’t know. I’m definitely one of us, anyway. Hi, here’s my life story (of privilege).
Like Pippin, I have a very supportive and awesome spouse. His name is Eddie.

In addition to currently making more money than I could ever hope to make as a part-time adjunct academic, he is a better Unity programmer than me and taught me a lot of what I know today. He also has really good design instincts; he had the idea to make the cooldown in Hurt Me Plenty go into several weeks, and he also picked-out the music used in Stick Shift. And right now, I'm making him write the server code for my upcoming dick pic game because I don't feel like doing it. (LOL.)

Friday, April 10, 2015

"Stick Shift" technical tricks / backstage Unity peek


This is a high level discussion of how I achieved certain effects in Stick Shift. It spoils the game, so I recommend you play it and/or read my artist's statement.

The "car" in Stick Shift is actually (a) two different cars, one for each camera, and (b) neither car actually moves, ever.

When you want to create an illusion of motion, or at least have something read as motion, then you generally have two options in games: move the object around the world, or move the world around the object. Because I wanted to focus on the gestures in the drivers seat, it didn't make sense to actually simulate a road. A scrolling panoramic image of a city street, blurred and stretched horizontally, would give enough of an impression of motion.

Friday, April 3, 2015

"Stick Shift" as activist autoerotica


This is a post detailing my process and intent in making Stick Shift. It has SPOILERS; if you care about that kind of thing, then you should probably play the game first.



(Again, SPOILER WARNING is in effect. Last chance!)

Stick Shift is an autoerotic night-driving game about pleasuring your gay car. It is the last of my recent erotic gay sex game trilogy, alongside its sisters Hurt Me Plenty and Succulent. I also feel like it is a fitting book-end to the past two games, incorporating themes and ideas from both.

Over the past two months, the game has changed quite a bit. Originally, I started from Paolo Pedercini's suggestion to riff off Andy Warhol's film Blow Job (1964).

Saturday, March 28, 2015

Implementing real-world real-time stamina / energy cooldown timers in Unity C#

In Hurt Me Plenty, I implemented "real-world" cooldown timers, which persist even if the player restarts the program. The cooldown period elapses in "real world" time, not in game time.

This resembles stamina delays in many popular free-to-play games, but it also connects with the design tradition of using real world system clocks to dictate game logic -- maybe certain Pokemon emerge at real world night, or you witness events that correspond with real world holidays, or perhaps you can even kill a boss NPC by setting your console's system clock forward by a week.

Much like the implementations referenced above, mine is quite weak and vulnerable to circumvention and cheating: I simply save a system timestamp in the game's PlayerPrefs, and then check that saved timestamp upon loading the game. If the difference between the current system time and the saved timestamp is less than zero, then the time has fully elapsed and the game continues.

Monday, March 23, 2015

Level With Me, vol. 1 re-release (v1.1)

I have updated my old experimental Portal 2 mod "Level With Me" to work with current versions of Portal 2. This mostly involved repackaging a menu file and rebuilding the sound cache. Assuming you have Portal 2 installed, you can download and play this collaborative interview / playable journalism project at the itch.io page.


  • Remember to feel free to stop playing the first chapter at any time.
  • Previous posts / notes are here.
  • Interview subjects were: Dan Pinchbeck (The Chinese Room), Jack Monahan (Stellar Jockeys), Brendon Chung (Blendo Games), Magnar Jenssen (Avalanche Studios / Valve), Davey Wreden (Galactic Cafe), Ed Key (Twisted Tree Games), Richard Perrin (Locked Door Puzzle)
TECHNICAL SOURCE ENGINE NERD NOTES: It was fun trying to figure out how to update everything; Valve updated every Source game to use .VPK v2, except Portal 2, so it was pretty much impossible to find the old VPK.exe compile utility. Luckily, I had a hunch that Alien Swarm hadn't been updated since forever, and I turned out to be correct. (For anyone who googles for this post, you can grab the one from the Alien Swarm SDK, or download the old v1 VPK.exe here. Make sure you place it in a \bin\ folder with a tier0.dll, and then you can just drag-and-drop folders onto it or a shortcut, etc.)

Thursday, March 19, 2015

Lighting theory for 3D games, part 2: a formal approach to light design, and light as depth

Here's how I generally, theoretically, approach lighting in my games and game worlds. Part 2 is about light and function, mostly for level design.

In part 1, I talked about how different light sources have different connotations to the viewer, and these meanings are culturally constructed. In New York City today, an antique Edison bulb connotes trendy bourgeois expense, but 50 years ago it might've been merely eccentric, and 150 years ago it would've been a thrilling phenomenological novelty.

But people rarely intellectualize lighting this way, in, like, your own bedroom. In your daily middle class Western life you don't usually agonize over the existential quandaries of electricity, you just flip the light switch without looking. When in familiar places, we experience light as a resource or tool and take it for granted. So much of our everyday relationship with light concerns its functionality and what it enables us to do.