• entries
4
5
• views
5965

RockReaper

Hi everyone, it has been quite some time since my last (and only ) journal entry. In the meantime, two friends and I had to develop a game for a game programming course at our university. For that, we decided to create a clone of the old artillery game Scorched Earth. We call it RockReaper! Here is a short video showing the gameplay:
[media] [/media]
The game was created from scratch using C++ and OpenGL 4.0. We used the SDL library, GLM and a thin C++ wrapper for OpenGL provided by our computer graphics chair. Our key features are:
Randomly generated, fully destructible terrain
Day/night-cycle
Weather simulation with wind and rain (not shown in the video)
Pixel perfect collision detection
GPU Particles via Transform Feedback
Dynamic lighting
5 different weapons
Turn-based multiplayer (2-5 players)

At the end, we made it in the top 12 and we now have to give a last presentation and submit a trailer for our game. We have no experience with creating trailers, so if anyone has tips or resources on that topic, please let me know.

Wavelength Dependent Photon Mapping

Hey guys,

recently, I had to work on a project for my lecture on global illumination. My partner and I decided to implement a variant of the progressive photon mapping technique, described by Hachisuka et al.[1]: instead of assigning each photon a certain color, we choose to map each photon to a certain wavelength. This allowed us to simulate caustics more accurately and achieve effects splitting a beam of white light into its spectrum of colors:

So instead of using the refraction index, that is often given for transparent materials, we used Cauchys equation[2] to calculate the correct*, individual refraction index for each photon:

Where lambda is the wavelength and B and C are material parameters, controlling the overall refraction and the variance depending on the wavelength.
(*Actually, the correct refraction index is given by the Sellmeier equation[3], but for light in the visible spectrum the presented formula gives a reasonable approximation.)

There were a number of other problems we had to solve and I will probably create another post about this. So if you are interested in more technical details, let me know.
But now, I want to show you some results.

The first scene is the standard cornell box with two spheres in it:

The image on the left shows the noisy color-artifacts that are introduced with our method. This effect occurs, if the individual points in the scene did not receive enough photons, so that the average color is not the white, that is emitted from the light source. However, simply shooting more photons solves this problem and leads to the image on the right.

This looks pretty nice, but the interesting question was: does our implementation really produce the rainbow effect caused by a prism? So I created a scene with a narrow light source, which emits a beam of light at a prism and it turned out...

...it does!

DevLog #1

Hello there, I recently discovered the game TANX (if you don't know it, check it out, it is really fun) and i really liked the format of the game. Like the more popular game Agar.io you simply visit a website and start playing which, I think, works very well for casual games. It has an extremely low barrier to entry as you don't need to download or install it first. In fact, i find this concept so interesting that I want to try to create a small game like this myself and start to experiment with the new technology. I am fairly new to the whole web development thing, so I first had to figure out how the development workflow in such an environment works. As the programming language I choose TypeScript over JavaScript because all the additional code completion makes life a lot easier and the Visual Studio Code editor has excellent support for it. However, this means that there is an additional compilation step before you can run the game in the browser. At first this was extremely frustrating, but after I familiarised me with some tools like webpack and started using them the workflow became a real breeze. In my current setup I can immediately see the result of the changes I made while coding. This enables extremely fast iteration cycles and lets me test many different things really fast. So for now, I spent most of my time setting up my development environment and creating a small framework for the game. However, I also started programming the server using Node.js. This was very straight forward and even without any experience it didn't took me long to get some basic communication going. Here is a short video of the current state: Everything is very basic right now, just a sample model I found on OpenGameArt and a simple untextured terrain generated with perlin noise. However, I still wanted to document the process, mostly for myself to look back to but maybe some of you find interesting as well. For the next step I want to add some animations. See you then!