Winning the C Awards

The showroom

The C Awards were held at Visualiseringcenter C in Norrköping on Wednesday. I brought my desktop to the showroom event before the prize ceremony, as I wanted to rectify my previous frame rate problems at the Swedish Game Awards Conference, where I only used my laptop.

Set up on the showroom floor before guests arrive

Set up on the showroom floor before guests arrive

Suffice to say, it ran smoother than butter, and the comments were much the same. No negative comments to be had, and everyone seemed to enjoy Obscurus, even if they had tried other VR games previously, which is a testament to the game’s design. A lot of interesting questions about my design choices came up, and I also got the chance to see if my slight adjustments to the game paid off. It did. I also got to meet Fredrik Berling, a childhood hero of mine who was the host for the show Hjärnkontoret, and now acted as compere for the prize ceremony.

The prize ceremony

The prize ceremony started a few hours after the showroom, and I was incredibly nervous. I was nominated in two categories: Next Audience Magnet, and Technical Excellence. From what I’d seen of the other nominees on the show floor, I was sure that I had a shot at both, but Technical Excellence being my stronger entry, as one group didn’t even show up to the showroom floor.

Next Audience Award nominees

Next Audience Award nominees

The award for Next Audience Magnet comes up, I’m nervous, but I’m also thinking “It’s fine, this isn’t my strongest category”; so you can imagine my surprise when my name pops up before the jury has even given their motivation!

Getting my award for Next Audience Magnet

Getting my award for Next Audience Magnet

I was ecstatic! I was overjoyed! I was a bit nervous being on stage with a microphone shoved in my face, but I think I fared alright.

The jury’s motivation was as follows:

“In this entry we see the first steps on a journey towards a whole new type of public storytelling. Through experimenting with virtual spatiality and design, the entry shows the potential of technology whose possibilities we can only yet dream about.”

Happy award winner back on the showroom floor

Happy award winner back on the showroom floor

Where next?

Obscurus has now gotten its first award, and hopefully many more are to come. The next big milestone for me is to finish up the vertical slice of the game for the Swedish Game Awards. The prize money I got here will help pay my rent and continue development on Obscurus and other projects, like Mimic, which is starting to gain steam. Hopefully I can keep you updated on it’s development as well as my latest game, a 2D card game.

As always, I’m continuing my pursuit of master thesis work in the video game field.

CAwards entry & Obscurus development slowing down

CAwards entry

Work on Obscurus has gone slowly this past week and half, as I decided to take part in the CAwards. CAwards is a competition held by Visualiseringscenter C in Norrköping, where ambitious student projects in visualization and human computer interaction can compete in 5 categories for 10,000 sek. To compete, you need to create a video of your project, and enclose a description with the application. Therefore, I needed to create a video that showed what Obscurus was all about. This included finding a way to show Virtual Reality for people who’ve never experienced it. I ended up recording myself playing the game and simultaneously recording the screen so I get a side by side in the final video. I like the effect.

Obscurus development slowing down

Obscurus development has been slow as of late. I fear I’ve hit the Indie shame spiral. My early enthusiasm for Obscurus has started to dwindle, and I’m looking to new projects, like Mimic, to keep going. I will continue small development on Obscurus though, as I want it to be as polished as possible for the Swedish Game Awards. I will restricting it to a single level for the time being however. SGA is more of a vertical slice competition anyhow.

To conclude this post, here’s a collection of images I’ve saved from development over the past two weeks.

Obscurus | Preparing for the Swedish Game Awards Conference

So over the past week I’ve been hard at work, getting Obscurus to run as smoothly as possible, as well as adding new assets for Level 2. This has mostly been because of the Swedish Game Awards Conference which is hosted by Södertörn on the 8th and 9th of March. This blog post will document what I’ve been doing and what is left to do before Saturday. I’m taking part of the the Student Showcase, where I get to show off Obscurus for the companies there as well as the other students who are attending. This is a great opportunity for me to show how far I’ve come with Obscurus.

Level 1 Rebooted

As has been said previously, I’m working on a rebooted version of the first level. This has mainly consisted of creating larger asset building blocks and building the level. This work completed this week, and I have started the arduous task of transferring all the doors, sound effects, speakers, etc. Luckily, the way I set up my initial Level Flow in Bitsquid, all I actually need to do is move these assets to their corresponding places. The flow looks like the image below. A trigger with a delay plays the animation on the door, that triggers an unspawning of a collider once the animation of opening the door is completed. At the same time, the trigger also triggers the door’s sound effect at the door’s location. Thus, I only need to move the trigger and door to the correct position and my initial Flow still works.

flowexample

Level 2 – The Hotel

The second level is where I’ve been focusing most of my efforts lately, as it provides a nice break from adjusting assets or perusing Lua code. This level has a 50’s / 60’s hotel theme, reminiscent of The Shining or The God Complex episode of Doctor Who. This level will feature a very different narration (more on that in a future post), and will have a different feel, for a very specific reason that hopefully will become clear by the end of the game.

When designing the wallpapers, I looked at 50’s wallpaper designs, brought them into Photoshop, where I then drew over them to try and get a more cartoony feel. This, however, led to some not so seamless textures, something that still needs to be fixed soon. Overall it was a lot of fun to do though, a nice change of pace.

I’ve also got some ideas for the menu, but I’m leaving that for another post, other than this image.

menuWIP1

Obscurus Development | Shadow fixes, optimizations, and thesis reflections

Shadow fixes (sorta)

After getting in contact with Bitsquid, I have confirmed my suspicions; the renderer in this alpha-state Oculus Rift build renders the lights from different offsets. This is apparently caused by how the engine is structured, and my main contact with Bitsquid is looking into how difficult it would be to restructure the renderer so that the problem disappears.

Optimizing in Bitsquid

This is a topic that deserves it’s own blog post, and I’ll get to that, but for now I just want to document the steps I’ve taken to optimize my game. Working in Bitsquid can be very interesting, as it is a data driven engine unlike any other conventional game engine like Unity or UDK. It means you can do certain things a lot faster or in a different way to other engines, and tricks that work in those engines might not necessarily work in Bitsquid. This became very evident for me when I started to optimize Obscurus for the Oculus Rift.

In order to achieve the best possible experience in virtual reality, you need to get as low a latency between the player moving their head and the game updating the view port. 20ms is the upper threshold according to John Carmack, Oculus Rift’s new CTO. It is also advisable to get your game running at as high a frame rate as possible, and to keep it stable.

60 frames per second is my goal for Obscurus, and I thought it would be easily attainable, with it being a confined corridor game, most objects should be obscured. Lo and behold my surprise when I was getting 25fps on a powerful rig! It took some time to figure out what was happening, and asking the Bitsquid Q&A forum. The forum is great in that it has a lot of talent, mostly Swedish, that are working in the engine. The only problem that it is a very small pool of developers, something that will change as Bitsquid gets more widely adopted, I’m sure.

I got some sound advice on how to optimize my game. I had carelessly just copy-pasted my assets (I love this feature!), building my entire level with the basic building block of wall, roof, and floor. The problem with building this way is the amount of draw calls you get. I was submitting more than 20,000 batches per frame. That really taxes your computer, no matter how powerful!

Type ‘Perfhud artist’ for a useful overlay

So how should I go about fixing this problem with my shadow casters? Simple, really. I instanced my floor, wall, and roof textures, as they are repeated a few hundred times each. This immediately garnered an almost 100% increase in frames per second. The next step is to combine as many assets into larger assets as possible. I am currently in the process of creating larger building blocks comprised of my simpler smaller assets. 3×3 wall sections, 1×3 floor sections and so on. This will also speed up future levels that I’ll create.

Making new building blocks

At the same time as I was doing this work in Maya, I’m also creating occluders inside the objects. Occluders are create big planes that hide anything behind them. You don’t expect to draw something behind a wall, so you put an occluder in the wall, and voilá nothing is drawn. An occluder in action can be seen below.

Occluders in action

The downside with me having to do this is that it takes a bit of time to create all the building blocks I need to recreate my level. Then of course I need to actually rebuild my level, rewriting the Flow scripts for it too. As mentioned though, it will really speed up future development of the title.

A final optimization tip, which I luckily had already implemented, is to create simplified meshes as you are creating your assets that can be used for shadow casting. It isn’t necessary to have the super high detailed mesh for shadow casting, but a simpler series of boxes will often suffice. It can also be a good idea to create level of detail meshes at this point, and use the shadow mesh as the lowest level of detail. An example of LOD and a shadow caster from the Fatshark game Hamilton’s Great Adventure can be seen below.

Level of Detail and Shadow Caster meshes

Master Thesis reflections

I had the pleasure to listen to my friend, Andreas Tarandi perform a first presentation of his Master’s Thesis in Computer Science that he did for DICE. It detailed a new sort of renderer for tessellated objects that in real time can provide the texture for an object, without using the archaic notion of UV mapping. Instead, his method uses triangle strips storing the colour values of the triangles’ hexes in an array. In this way, he could render an obscenely high poly face (millions of triangles) in 30+ fps (real time).

It was especially interesting as I myself am in the process of starting my master thesis. I’ve applied to a few companies already, about doing different work for them, including Oculus Rift and tools to integrate user created content. I’m hoping they respond soon, as I can’t wait to start working in the video game industry, and think that I bring many competencies and qualities to the table.

Obscurus development | Shadow problems

Working in Bitsquid is fun. Working in Bitsquid as a student is not as much fun. Working in Bitsquid as a lone developer is down right what it is: work.

I have been working on my first-person pacifist puzzle game Obscurus since November 2013 now, and I am very close to finishing up the demo/first level. The game is meant to be played with an Oculus Rift or other Head Mounted Display in order to immerse the player in a virtual reality. The game’s puzzles rely on the player being immersed as if in a real world, from being blinded, to achieving vertigo or getting lost in a cramped maze. Development has gone really well, until it was time to integrate Oculus Rift support for real.

Surprisingly the main problem isn’t that Bitsquid doesn’t have native support for it. I got in contact with the nice folks at Bitsquid and they hooked me up with an experimental build. After some frustration (more like a TON of frustration), that ended up being that I forgot to render environment to the stereo renderer, I finally got to play my game in VR.

However amazing it was to work in it, I noticed some interesting errors. The dynamic shadows were different in each eye. After diving into the shader code in HLSL, I have stared myself blind, and I’m no closer to solving the problem. Hopefully the new week can give me some fresh eyes and finally solve it.