Remember Me

Remember Me is an action-adventure title recently released by Capcom (developed by Dontnod). It is set in a futuristic Paris, and follows a “memory hunter” named Nilin. Basically, in the future people can erase (or alter) their memories, and there is a big evil corporation profiting off the situation. Nilin is part of the resistance, called Errorists, that fight the corporation.  Nilin starts the game with all her memories conveniently erased, and fights throughout the story to regain her past. An interesting premise, though you can tell the story borrows concepts from other popular science fiction. That said, it’s compelling enough to take you through the game.

Aside from the story, I found the locations and environments to be very detailed and well designed. The graphics are using the Unreal Engine 3, so there are no complaints there. I found the environment modelling to be top-notch, and loved the detail put into everything. A lot of the time, you will be running through the level quickly and even miss all the little things they modeled, like the inside of a shop you can’t even enter. They really went out of their way to flesh out this world. Although there is a lot of detail in the world, most of it is not interactive. You can climb on things, ledges, windows, etc. but only in pre-defined spots. So it’s not like you can go exploring the city any way you like. It’s very controlled and you really can only go on that one path.

One thing I loved about the game, beside being in the future (and I’m a sucker for the future), was that the main character was both female and black. Well actually, she was multi-racial, which may even be more edgy. This is a breath of fresh air from all the games that pit the savior of the world as a white male. So kudos for the developers for trying something different.

Probably the best part of the game is the memory remix scenes. Basically what you do is hack into someones brain and alter their memories. This can have interesting effects, like convincing a woman that her husband died and things like that. This then changes their actions in real-life. This is really an original concept, and was implemented flawlessly. During these sequences you can rewind and fast-forward, through a scene that could play for about a few minutes. During that time you can alter certain objects or actions in the scene to change the memory. Some scenes could have 5 or 6 different objects to interact with, which adds a lot of possible branches for the scene to go in. This is clearly the selling point of the game, and it’s nice to see the polish they put on this. Unfortunately there are not a lot of these memory remixes during the game. There are maybe only 3 or 4 scenes throughout the whole experience. Even so, they add a lot.

However, the game isn’t all praise. I found the combat to be somewhat clunky, and look me toward the end of the game before I got all the combos down solid. There is a system where you can customize your combos. This sounds cooler and deeper than it really is. Basically there are 2 attack buttons (one punch, one kick). There are also 3 or 4 pre-designed combo sequences. What you can control is the power and effect of each hit. So some attacks will refill your health, others will be more powerful, others will increase your cool-down (needed for special attacks). This is great, but I wish you could actually have adjusted the combos themselves, or had more control over the sequences. It’s not entirely broken, but the fighting could have been a lot more fluid. The part of the fighting I did like were the special moves, which are varied and all powerful. Some make you go berzerk, others allow you to turn enemies into bombs, another will make robots explode, another makes you invisible. Overall this adds a much needed interlude to the somewhat monotonous button mashing.

Of course, I was playing this in stereo 3D on a 100+ inch projector using the DDD TriDef driver and it worked well. Although there seemed to be parts of the game when the frame-rate chugged for a few seconds, overall the performance was good and the 3D looked nice. There were only a few small issues, like with real-time reflections, but overall support was good. I’m becoming more and more impressed with the DDD solution, and I was glad they had a profile for such a new title.

Overall, I was happy playing this game for the 12 hours it took to finish. I realize it wasn’t an A+ title, but I sort of knew that going in. If you are a sucker for futuristic sci-fi (like I am) then you will probably find something worth playing here. If you are looking for the next Assassin’s Creed, then you should probably look else-where. That said, I had fun with it.

3D Game Programming

Frank Luna’s DirectX series has been the go to book for DirectX development for many years. Although there are other great resources, Luna’s writing is both informative and approachable. The book also covers a broad range of topics from the basic lighting, texturing, and blending, to terrain rendering, normal and displacement mapping, geometry and compute shaders and more. He even tackles some tough topics like shadow mapping and ambient occlusion in a way that is understandable. Overall a lot of good material in a package that’s a bit under 900 pages.

The book assumes you have some knowledge of graphics and C++ programming, though it does go over some of the basics at the beginning. So you don’t need to be a graphics wizard to read this book, but you should at least have a firm grasp of C++ and some idea about 3D mathematics. Though you don’t need previous knowledge of DirectX. I had some experience with DirectX 9 going in, and I was still surprised about some of the changes with DirectX 11. Although the basic concepts are the same (using vertex and index buffers, for example), the code to accomplish things were very different in places.  That said, Luna’s style made even some of the denser code snippets manageable.

Luckily, the included samples did compile with only minor changes to the project properties. I purchased the Kindle e-book, but was able to download the samples from the website. Although I enjoyed the e-book, I will make note that many of the code snippets didn’t look great on the device. This is a common problem with programming books on the Kindle, where code that should be on one line spans multiple lines and makes a mess of the original print formatting. Unfortunately this book is not much better in that regard. Even so, I was still able to follow the code. I just wish more care would be taken with the formatting.

All in all, a great resource and should not be missed if you plan on writing a game or engine with DirectX 11.

wizdishThere is now another omni-directional treadmill project on Kickstarter, this one called the Wizdish. It’s a passive design, similar to the Omni, however it does not allow the user to lift their feet. It works by wearing special shoes with low-friction tiles on the bottom. This allows you to slide your feet back-and-forth easily without the need to pick up your feet.

I actually got to try a prototype of this device, and it was certainly interesting. It did not blow me away, but seemed intriguing enough for me to want to get in on the Kickstarter. And this isn’t even that only other ODT coming out soon. There are at least two other projects in the works, this is turning into a highly competitive space. Looks like the Wizdish is still pretty far from it’s goal, with 28 days left, so jump in the Kickstarter now if you’re interested.

3D Game Engine Architecture

In preparation for my 3D game engine, I have been trying to read all I can on 3D engine design and architecture. Although there are some good books out there, it’s very difficult to find a text that will walk you through everything you need to know. That said, 3D Game Engine Architecture: Engineering Real-Time Applications with Wild Magic by David H. Eberly gives it a good attempt.

The book covers the author’s Wild Magic engine, and discusses certain choices he made when developing the engine. It briefly touches on OpenGL, discusses abstracting away platform-specific details, 3D mathematics (and there is a lot of math in this book), an object system, scene-graphs, level of detail, render states, sorting, terrain, animation, collision detection, physics, and more. A lot of ground is covered in less than 800 pages.

However, I found much of the book difficult to follow and still feel like I could have a better picture of the “architecture” of an engine. When I think of “architecture” I think about a broad 500 foot view of a project. I think of flow charts or UML. I expect discussion on how all these disparate elements come together a form a whole. Sadly, that is mostly missing from this book. What the author provides is a good insight into his particular engine, and certain specific aspects of that engine. While this is still a great example to look at, I feel the text could have been more robust in terms of painting the big picture. Some of the things that I found missing were an event system, which seems crucial to an object-oriented engine, or a component architecture, really any type of  structure that allows communication between classes.

Additionally, I found myself getting lost multiple times while reading the book. The author would frequently put in dense mathematical equations and proofs, sometimes spanning multiple pages, and by the end you would be left to wonder what the purpose of the equation even was. I feel like having proofs of equations was not really relevant to the architecture, and surely there are many books on straight math if the reader needed that. Some math is necessary, of course, for a 3D engine but the space could have been used for more important topics.

Not really a jab at the book so much as it is the author’s coding conventions, I really did not like his style. I realize this is somewhat of a holy-war with programmers, but I guess we all have a style that is comfortable for us. Personally I found the author’s style to be really obtuse, and made reading the code snippets more difficult. For example, for a camera’s forward vector, he would use something like:

m_pkFVec

Where “m_” was a member variable, “p” is a pointer, “k” is of a class type, and “FVec” for forward vector. Personally I would use simply:

forwardVector

Just glancing through the code, which one is more apparent to what it is? This really bothered me to no end, but I guess you can chock it up to personal taste.

All-in-all it may sound like I am putting down on this book, but I actually did find it useful in a lot of ways. Certainly if you are aiming to create a 3D game engine from scratch, you will need any and all the help you can get. So yes, still read this book. However, I had much higher expectations and I feel it was a missed opportunity for the author. While it is still a decent resource, this should not be your first stop in engine development.

ARAIG

Looks like there’s yet another virtual reality project on Kickstarter. Well, I guess this is not strictly a VR thing, but it certainly could be used as such. Basically the ARAIG is a vest that you wear while gaming, and it provides force-feedback when you are getting hit in the game. While it does include vibration (like current controllers), it also has direct stimulation with TENS, which could get pretty intense depending on how much power they are pumping through. I really think a vest like this can add a lot of immersion, specifically in first-person shooters. I backed the project at the $299 level, and I suggest anyone interested in VR with some cash to spare do the same. The creators still have a long way to go to reach their $900,000 goal, but you never know.

 

The above video is demonstrating a 4.5″ flex sensor made by Spectra Symbol that I got from Sparkfun. Hooked it up to an Arduino and had it print the values to the serial monitor. Since I don’t have a tripod, it was going to be difficult to demo with only one hand, so I ended up taping the sensor to my finger. Ghetto? Yes. But it actually was pretty fun, and gets me psyched up to buy a glove to mount this on. So far it seems to work good enough for my needs.

Virtuix Omni

The Virtuix Omni Kickstarter campaign was fully funded within hours of the doors opening this morning. If you haven’t heard of this device before, it’s basically a passive treadmill. It allows you to walk in any direction inside a virtual world, without actually moving in the real world. At the time of writing, they are sitting on over $454,000 with 47 days left to go. An amazing achievement and testament to how popular virtual reality has become recently. I backed them for $399. Let’s hope they actually ship next January.

 

For quite some time I have been waiting for a good data-glove to hit the market for use with virtual reality applications. So far the only consumer product that has come remotely close was the P5 glove, which was probably one of the biggest disappointments in my life. Although better data-gloves have existed since the 90’s, they have been so expensive to only be attainable by large corporations or the government. So with nothing really available off-the-shelf, I have decided to build my own.

Virtual Reality cannot really be had using archaic input devices like the keyboard and the mouse. While fine for web-browsing, they just don’t cut it for immersive interactive 3D  experiences. Tracking hand and finger movements just seem like a very intuitive way to interact with a virtual world. Although there are devices, like the Razer Hydra, that capture some of these elements, it’s just not the VR I dreamed of as a kid if you don’t don the gloves.

Currently I am evaluating good orientation trackers (rather, an inertial measurement unit or IMU). I found the Pololu MinIMU-9 v2 and it seems to fit the bill. The price, at $40, is not too shabby either. It does not come with a USB interface or anything fancy like that, so I had to solder some connections myself and use an Arduino to interface with the PC. Even so, the package is not bad at all. As you can see in the video, the tracking is decent. Maybe not the best I have ever seen, but certainly workable. I’m pretty sure it’s giving better performance than the Hillcrest Labs unit I was previously using, but it’s hard to say just by looking at a quick demo. Anyway, I’m happy with my $40 dollars.

Next up I will be looking at flex sensors to track finger movement. These ones from Spectra Symbol look nice and were supposedly used in the Nintendo PowerGlove (which could be bad or good depending on how you look at it). Hopefully those sensors won’t be too hard to get running, as it would be very convenient to grab parts like these off the shelf. Especially if I want to post the instructions online so other people can build their own.

Finally I will need to construct a proper positional tracking system so physical movement will be mirrored in the simulation. I have a couple of ideas for this, though I still have a lot to experiment with. Stay tuned.

Game Coding Complete

Finally, I’ve got around to reading (and finishing) Game Coding Complete, and it’s up there on the list of great game development resources. I’d been meaning to read this book for quite some time, but got distracted with DirectX and Windows hooking for use with my 3D driver. Now that I’m back on the 3D engine kick, it seems like a good time to hit this book. Reading through this, I was thoroughly impressed by the content and the writing style. Don’t be discouraged by the lengthy size, this text is well worth the time to read.

The authors, both seasoned game developers, working on the Ultima series and various Sims games, have a lot of collective knowledge and it comes through in the book. There are a lot of snippets and stories about things the went right (or wrong) on the production of some of the games they worked on. I found these insights to be refreshing, and certainly interesting to read about. It also helps to teach people what professional game development is like, and things to expect if you are looking for a job in the industry.

Aside from the stories, there is a lot of topics covered in the book. They go over game loops, component architecture, process system, an event system, 3D math, DirectX, audio, collision and physics, scripting with Lua, AI, a game editor in C#, debugging, version control, multi-threading, etc. Really almost everything you would need to know. They weren’t joking when they said “Complete.” Although the book is long, it’s really amazing what they managed to cram in there. Granted, most topics only get one chapter, which isn’t really enough to fully cover everything. But it’s a great overview on a ton of stuff.

I found the coverage of the event and process system to be every insightful, and I will probably be using a variation of these in my own engine. The event system basically allows different objects to fire events at key points, and then have other objects respond without tight coupling. The process system allows objects to spawn logic loops, that will be updated along with the rest of the engine. So, for example, the player can hit a key to throw a grenade. That would fire an event, which would spawn a grenade with the proper velocity. The grenade itself would have a process, that would count down a few seconds and then explode. At the time of explosion, this could fire another event, which would then cause the audio system to play a sound and the particle engine to create a visual effect. This is a very clean way of handling events and processes, and this is probably the single more useful thing I found in the text.

If you are looking at creating your own game or engine, or just want to see what goes into a commercial title, Game Coding Complete may be one of the best resources to do so. While there is a good amount of C++ code in the book, it is not so much of a “cookbook”, it is more of an overview of architecture. The writing style is casual and friendly, and I really love all the stories told throughout the book. This is a great resource, and should not be missed. My only regret is that I did not read this book sooner. Highly recommended.

The Oculus Rift is great and all, but it still feels pretty constricting using VR sitting in a chair. The Virtuix Omni plans to change that. Commonly referred to as omni-directional treadmills, the Omni allows you to feel like you are walking, or even running, around a virtual space while in real-life you stay safely in the same spot. This project in particular is a passive device, with no moving parts, which means it could be provided for cheaper and in a smaller package than otherwise possible. The Kickstarter to slated to go live June 4th and I will, no doubt, be one of the first in line. Now all we need is cheap wireless data-gloves and I’ll be all set.