Thesis prize!

My thesis “Real-Time Dynamic Radiosity for High Quality Global Illumination” has won the Science Faculty’s thesis prize. This encourages me to pursue publication, even though I’ve already been shifting my research focus. Also, my thesis was nominated as one of the three candidates for the even more prestigious general Utrecht University thesis prize.

The laudatio can be found in the Utrecht University news item. (The page is in Dutch, but the laudatio is in English.)

More info on my thesis can be found here.

Thesis prize ceremony

Debate on game education

In June I represented Utrecht University in a debate on game education. It wasn’t so much as a debate but more of a discussion, and in my case mainly giving a long overdue introduction to the game education at the Utrecht University.

It turns out there is quite a lot of confusion about the difference between university level students and applied higher education students. I was surprised by the gap: the audience didn’t seem to know much about the university, while in my background at the university I have never seen an explanation what makes the university different from applied higher education. It was very challenging to bridge this gap in one evening, and I think I succeeded only partially.

Another major source of confusion lies in the role of university internships. Where higher level education internships are usually about the intern joining the regular working process, university level internships are about doing research. Research seems to be interpreted as doing fundamental theoretical research which is only usable in companies working on state of the art technology. Understandably, this interpretation scares away a lot of companies from university level internships. In reality, university internships are often about applied research. If a game studio has a technical problem or question, this is usually sufficient for a university level internship. Most game studios have yet to recognize these technical problems and questions as university internship opportunities.

The debate can be viewed online here.

Marries at Control Gamelab

Lecturer position at Utrecht University

As of January 2014, I started as half-time lecturer at Utrecht University within the Virtual Worlds division of the Department of Information and Computing Sciences. The other half of my time I’m an experimental game developer. One of the reasons I was asked for this position was the good evaluation of the Advanced Graphics course which I created and taught in 2013.

The first major project I did as lecturer was recreating and lecturing the Game Design course from January to May. The course is primarily for Game Technology bachelor students and it is the only game design course in their technology-oriented curriculum. By recreating the entire course I was able to give it a more academic theoretical basis and include recent developments in game design theory. The new course largely reflects my current view on game design. You can visit the Game Design course website here, which contains all course material.

What I particularly like about my position as lecturer is the positive influence it has on my activities as experimental game developer. This positive influence also works the other way around as my lecturer role benefits greatly from my experimental game developer adventures.

And finally a fuzzy picture showing my game design students:

Game Design students

Graduated!

Last December I finally finished my master’s thesis for the Game and Media Technology programme at Utrecht University. It was more arduous than anticipated, but I’m satisfied with the result.

The topic of my master thesis is real-time high-quality global illumination. In short, I developed a radiosity-style technique which modifies the radiosity solution using hemicubes which are rendered only from the perspective of the dynamic object. Real-time high-quality diffuse global illumination is achieved using this technique, but only for relatively small scenes. Although my implementation is not suitable for general use in games, I’m convinced the theoretical framework introduced in my thesis has a lot of potential and will lead to more practical techniques when investigated further.

The thesis, which provided me with a cum laude graduation, will appear later on this website under “Graphics Research” together with a demo.

This movie shows the results, which was captured in real-time on an AMD Radeon HD 5770 graphics card. The visual quality is nearly indistinguishable from the reference rendering.

Development Break

I’ve been quite inactive on the development front, but for a good reason. I’m currently creating (and going to teach) a master’s course in Advanced Graphics (technology) at the Utrecht University. More information can be found here: http://www.cs.uu.nl/docs/vakken/magr

The teaching is a one-time thing which will be finished at the end of April. Aside from being really cool, the teaching will provide me with some healthy financial reserves. I will use those reserves when starting full-time independent game development.

I haven’t been totally inactive on the development front, but most of my time is spent refining concepts and making plans for the future. There’s some really cool stuff coming up, but it’s too soon to talk about it…

Game definition revisited

One of the things I hate about writing on a blog is that I’m always confronted with my earlier thoughts. The previous post has been up here for over 3 months, but my opinion changed 2 and a half months ago.

My new standpoint is that the word game actually has two commonly accepted meanings. There’s the meaning based on Wittgenstein’s analysis which states that a game cannot be strictly defined (and thus nearly everything can be a game). The other meaning is used in a ludologist context. Most game design research is done in the context of rulesets. When looking at games from that ludology angle, it is sensible to define “game” more strictly. All games which do not consist of rulesets are not interesting from that point of view, because the ludologist’s methods of analysis do not apply.

So the next time someone tries to exclude something from the realm of games, I can rationalize their opinion by accepting them as part of the ludology school of thought.

My game should not be a game

What I didn’t realize before is that the label “game” is not always positive. Many of the non-gamers in this world do not like the focus on challenge which is present in most games (especially casual games). This can be because they do not like to lose, but also because they are just not interested in artificial challenge. This group will not play a game for the sole reason that it is called a game.

The games which have their label disputed are often not challenge focused. These would be perfect for the non-gamers discussed above, but giving the games the predicate “game” actually deters this audience!

What would be a better name, then?
“Notgame” is sometimes used. That name is based on the notgames initiative (led by Tale of Tales). This name is not familiar with non-gamers unfortunately, but it could be a start. However, I feel this name is not applicable to my games. From what I’ve seen notgames are generally focused on atmosphere/narrative/deeper meaning, while my games are primarily oriented on play (without the focus on challenge). (The terms used in the previous sentence are very vague, so they might not describe exactly what I mean.)

The main question is still open: what would be an appropriate label for my “games”?
Ideally, I’m looking for a term without “game”, while still being reasonably specific (e.g. not “experience”).

Help! My game is not a game

As a developer of experimental games, it can occur that someone states that your game is not really a game. Instead, it’s a toy or an interactive *something*. While this may come from a good heart, this is probably not true and you know it. There is a reason why you’re calling yourself a game developer and not a toy developer.

It can be hard to defend yourself against such a statement. The what-is-a-game discussion derails easily due to differing or vague definitions. In this post I will describe a strategy to counter an attempt to exclude your game from the class of games.

Level the Ground

The person who is making the claim that your game is not a game (from here on called the accuser) will probably have a strict definition of the term game. The first thing to do is to establish a ground truth. The ground truth in this case is: If everyone calls something a game, then it must be a game. (Note that “everyone” is not to be taken literally, it is meant as the majority of people.) This is inherently correct because of the way natural language works. Natural language is based on the common agreement of the meaning of words.

Take as example the word cool. It used to have the strict definition of being cold. However, through mass use it gained the additional meaning of something that is “fashionably attractive”. This shows that the common use of a word determines its meaning. A definition can be formulated to capture this meaning (although this is not necessary).

Using the ground truth we can verify for popular games that they are indeed games. We’ll look at game websites and game development awards to find confirmation that they are really games. If a game is featured by several of these websites (and treated like a game), we can be sure that the majority of people also see it as a game.

Build Towards Your Game

Chances are that the game in question (your game) has not received enough public attention yet to be able to use the above approach. Instead of directly proving that your game is generally seen as a game, we’re going to use the act of deduction. Pick a popular game which is very similar to yours. We can verify that it’s truly a game. But if your game would not be a game, then the “gameness” would have been lost in the differences between your game and the popular game.

To complete the argument, we first ask the accuser in which exact difference(s) the “gameness” was lost. For each suggested property, we’ll have to find a counter example – a popular game which does contain that property. For example, if the disputed property is challenge we can present the following counter examples (generally accepted games which do not feature challenge): Proteus, FarmVille and even RPG’s which largely rely on grinding. And for the property goals we can refer to Minecraft or The Sims.

If the game you used as counter argument is suddenly also not a game, it is easy to verify that it’s truly a game using the method described above. Also, make sure that there is a clear definition of the property being discussed. Anything can be seen as (for example) challenging depending on your perspective. So if the accuser argues that your counter example does contain challenge, you can take a perspective which includes your game as well: the mere act of walking in a game is already challenging for a lot of non-gamers.

Finish Him

The accuser might still be unable to accept that your game is really a game. The reason is that his definition of a game simply does not adhere to the common usage of the word game. You could say that either his definition of the word game is wrong, or that the category of games he’s trying to define should have a more specific name than just “game”.

I hope that this strategy does not only help you to prevent the exclusion from the class of games, but also that it strengthens your confidence that you are making real games.

Reprojection experiment

I was just playing around with this strange idea I had. When walking around, the old image information is recycled to compose the new image. That is, until you press a button to refresh the information for your current position.

Can you get a feeling for where you are in the environment?
I’m not sure what I will do with this. I have several ideas to turn it into a game, but I’ll have to investigate what works best.

(Model is the public domain Sponza model, by Crytek.)

Porting a 3D XNA game to the Mac using MonoGame

When making a cross platform game, XNA is generally not a good choice because it depends heavily on the Windows-only .NET framework and DirectX. In my case, the Mac OS X port came as an afterthought. After creating the game Seven Dimensions for the 7 day FPS challenge, some people requested a Mac version. I thought it was impossible to recompile an XNA game for Mac OS X, but a friend of mine said it could be done! I decided to go for it. If it worked,  it would make XNA a lot more versatile.

Step one: Get a Mac

At first I tried to use Mac OS X in VMware. Running Mac OS X was surprisingly easy, thanks to a pre-made solution found on the internets. But I didn’t succeed in running any type of 3D game at all. I guess the VMware graphics driver can’t handle slightly more complicated graphics. On top of that, Xcode seemed to be impossible to install. Fortunately, I could borrow a Mac from a friend.

Step two: Setting things up

There’s an excellent guide here (part 2 here) which describes everything you need to download and install. However, that guide is aimed at 2D games (using SpriteBatch only). There are some small differences if you want to use 3D graphics with custom shaders. Most importantly, you need to use the develop3d branch of MonoGame (at the time of writing).

Any shaders you want to use have to be compiled into an intermediate MonoGame format. To compile the shaders, you need a Windows computer. Open the 2MGFX solution found in the develop3d branch under Tools. This solution depends on additional dependencies which you have to download separately. Go to the develop3d branch of the github repository and go to the ThirdParty folder. Click on the green “Libs” folder, download that as a zip file and place it in your local ThirdParty/Libs folder. Now you should be able to compile the 2MGFX solution. The compiled program is the command-line tool you have to use to convert your .fx shaders to .fxg shaders. Make sure to open the .fxg shader in a text-editor to see if there is shader-like code in there.

You should test your setup using the CartBlanche sample Particle3DSample. If it compiles and runs without crashing immediately, you’re ready to port your game.

Step three: Porting your game

Prepare your project as described in part two of the guide mentioned above. Your code should compile almost directly. But unfortunately, you will encounter problems when running your game. The problems are very project-specific. These are the problems that popped up in my project:

  • The Game class was destroyed instantly causing an exception that the Game class was used while it was disposed. It turns out that Mono handles the “using (game = new Game())” syntax  in program.cs differently. Simply rewrite this code to avoid the “using” syntax.
  • EffectParameters were not found. This can be caused by two things. First of all, if a parameter is not used in the effect, you can’t set it. Secondly, texture effect parameters cannot be found. The texture should be set using the texture sampler EffectParameter instead.
  • The sampler settings defined in the shader were lost. You should set these settings from c# using the GraphicsDevice.SamplerStates collection.
  • The Mouse.SetPosition function does not work. I worked around it, maybe it’s fixed in a later version of MonoGame.
  • The viewport position offset was mirrored vertically. This is easily fixed by correcting the offset of the viewport you create.

Step four: Hope for the best

MonoGame uses OpenGL instead of DirectX, which can cause obscure problems. Your game might behave strangely on some hardware for no clear reason, especially if you use uncommon graphics features. Seven Dimensions uses line-drawing in combination with depth testing, which is very uncommon. The depth testing didn’t work for the line drawing, so I had to rewrite the game to use triangles instead. There are still other problems on older hardware which I haven’t been able to solve yet.

In total, I spent one day (8 hours) on the port. That’s very little considering that most time was spent on figuring out how to use MonoGame for 3D. The resulting port is not perfect, but MonoGame is still in active development so it will only get better!

Presenting: Seven Dimensions

Seven DimensionsThe seven day FPS challenge is over, and my game is finished! It could be more polished, but I’m really happy with it considering the time constraints.

Seven Dimensions is a puzzle FPS where you play in seven dimensions simultaneously. Is your spatial reasoning capable of understanding these strange worlds?

Go to the page of Seven Dimensions.