cast_ar

Looks like the VR/AR crowd-funding freight-train is not slowing down one bit. The latest success story being castAR, a set of stereo 3D augmented reality glasses from ex-Valve engineers. At first I was not all that excited about the project, seeing as I am more of a VR buff than for AR. However, this project looks too interesting to pass up.

Basically the device is based around a set of active-shutter 3D glasses. The trick is that instead of looking at a monitor, there are dual 720P projectors mounted on the frames which project the images onto a surface. This surface happens to be a retro-reflective canvas, basically bouncing the images straight back to your eyes. Combined with head-tracking, the glasses can provide a realistic 3D sandbox in which to play in.

Even better, there will be AR/VR clip-ons that allow for a more traditional head-mounted experience. They claim the VR model will have a 90 degree field of view, which actually sounds pretty good (if maybe still a bit shy of the Rift). It all sounds very ambitious, but really amazing if they pull this off right. I’ve backed it.

MoreEffectiveC

I decided to break from my 3D game engine book marathon and go to something more fundamental. More Effective C++ by Scott Meyers is one of those books I have  had on my wishlist for years but just hadn’t got around to reading yet.  I had read the original book  Effective C++ some years ago, and this sequel very much follows the same form. Though slightly dated now, it does cover a good amount of C++ design considerations that will show up in almost any decently complex C++ application.

The book covers a lot of OOP (object oriented programming) concepts and designs, and also a lot of the trouble you can get into using C++ without fully understanding what you are doing. Some of the coverage includes how to use abstract base classes and virtual functions. Specifically Meyers talks about memory management issues with construction and destruction, temporary objects, passing by value versus pointer/reference, and overloading copy/assignment constructors. He also discusses problems with using exceptions, explains how to write a smart pointer class (which is now obsolete with C++11, but still good to understand the implementation), using proxy objects, how to do lazy evaluation, and some various odds and ends.

Overall I found this to be a great text and very helpful, especially the discussion on inheritance and abstract base classes. If you really want to understand C++, warts and all, this should be a required text. However, please read the original title first, as it covers some more fundamental concepts than in the second text. Recommended.

 

Getting Started w UDK

Right off the bat, I knew this was not going to be an in-depth resource. The book weighs in and a light 120 pages, though the title does say “getting started” so I least they were upfront about it. That said, I did find the book useful and feel it was a good intro text for people unfamiliar with UDK.

Getting Started with UDK by John P. Doran explains how to create a simple tower defense type game using the Epic UDK (Unreal Development Kit). UDK is a free version of the popular Unreal Engine 3, and is targeted toward indie developers. Though the software itself can be downloaded for free, there are various rules in the license as to how content created with the engine can be used. For example, there is a revenue sharing model if you make over a certain amount. Even so, it’s still a great piece of software and certainly a good deal at this price (who can beat free?).

Anyway, this book has only 4 chapters that take you through creating a game. It started with using CSG (constructive solid geometry) to block out a simple level. We use the editor to add various items to the map, like spawn-points for the enemies. Then it moves onto using Kismet, the built-in visual programming language, to add logic to the game. In this part we create some rules, for example, deducting life when the enemies reach the base. We also create some towers that shoot missiles at the enemies. Next we build a GUI and HUD using Flash and Scaleform, and finally cook and package the game for distribution.

I have been meaning to learn more about UDK for a while now, both for work and for my own personal benefit. Mainly, though, since I am working on my own engine I want to make sure I have a firm understanding of what’s out there so I know how to improve upon it. UDK seems very powerful, and it’s fun to play around with an engine that comes with a ton of AAA assets from the start. Working with the engine certainly gives me some ideas, and shows me some things that could be innovated on. I will certainly want to learn more, as I feel this book barely scratches the surface.

However, there were some parts I did not like. Namely, in the first section on Kismet the author skips a crucial step (connecting one node to another). Without this step, the code does not work all (but doesn’t produce any errors either) and the reader is left to wonder if they made a mistake. Thankfully the images in the book show the correct setup, so if you look closely you can figure this out. Even so, this seems like a huge oversight and it’s really sad when authors make careless mistakes like this. Maybe even worse is that almost none of the Kismet logic is explained at all. In the later part of the book there is one part where you are setting up Kismet code for maybe 30 minutes straight, following steps in the book, but without any sort of guidance or explanation. You do eventually get something that works, but with little knowledge of what you are doing in the process. Granted, much of it is self explanatory, but it really should be explained in some fashion.

All in all, this is not a horrible introductory text. If you are already familiar with UDK, you can probably skip this book, but for new-comers this may be an approachable resource. I still don’t feel like I understand even a fraction of the engine, but I do feel at least a bit more confident in moving to a more in-depth book. In addition, the Kindle e-book was a cheap $9.99, so I can’t complain on the price. For the most part, the formatting was good and the images were decent quality, in-color, and zoomable. On the downside, some of the Actionscript code was a little difficult to read due to the word-wrap, but this is a problem across-the-board with programming e-books. Anyway, for $10 this is a great bang-for-your-buck, even at the rather brief 120 pages. I did end up with a functional game at the end, and that counts for a lot.

Freedom

Personally I hate spoilers, so I will keep this brief. Freedom™ is the sequel to the best-selling book Daemon by Daniel Suarez. If you haven’t read the original, you should go do that now. It’s great.

The premise of the first book is that of a famous game developer that dies, and spawns an AI that goes rouge and starts killing people. It then follows the investigation into the Daemon and the people that try to stop it. The whole thing is an action-packed ride, and is especially fun for anyone into computers or gaming as there are several scenes with hacking and bringing gaming concepts into real-life. There is also a science-fiction element with augmented reality glasses, autonomous robots and things of that nature. Top notch.

This second book, Freedom™, picks up where the first book left off. I don’t really want to explain further as I feel that would give away too much of the first book (if you haven’t read it). That said, I did enjoy this sequel. Granted, it was not as gripping as the original (but what sequel is?). There is a lot of action, but I feel some of the suspense of the first book was lost. However it was still enjoyable and worth reading.

3D Math

Mathematics for 3D Game Programming and Computer Graphics by Eric Lengyel is one of those books I have literally been eyeing for years and just never got around to reading. If you are not familiar, Eric Lengyel is the creator of the C4 Engine, and also the author of various game development books. He is well regarded in the community, so I assumed this was a must read title. After reading it, I still agree; it’s an excellent source of knowledge.

The book covers the basic stuff you would expect from a 3D math book: vectors, matrices, quaternions, intersections between various types of geometry, visibility, etc. Great, so the bases are covered. Lengyel goes a bit further, though, and discusses other topics that are very important in computer graphics. For example: lighting and shadowing, decals, curved surfaces, and physics (including fluid and cloth simulation). So a decent amount of topics are covered, but the chapters are still brief enough to finish each in one sitting.

While there are some implementation examples, the text is pretty light on the code. The code that is here is mostly based around OpenGL, however the concepts should still translate to DirectX. Not a huge issue. When needed, he does show code samples, but most of the copy is dedicated to math discussion and the equations.

Granted, some of the equations and proofs were dense and hard to follow. This was made worse by the fact that I was reading this on the Kindle, and the equations were made up of small images you couldn’t zoom in on. Having said that, I still understood most of the concepts, but there were a few times I felt overwhelmed. I can’t really fault the author for that, since his written explanations were all very clear and concise. It’s just some of the content is deep and complex, so be prepared.

All in all, I found this to be a great resource and you can never know enough math in this field. Unfortunately, I will still probably have to look up some of the equations online or in other books due to the low quality of the images in the e-book. But this is a minor complaint compared to the amount of information backed in this title. I would recommend this.

 

The guys at Sixense have just released a new video showing off the 5 STEM motion-tracking system that they are Kickstarting. The Sixense version of the Oculus Tuscany demo was already one of the more impressive examples of VR I have seen, and that was just using the Razer Hydra. This new demo ups the ante with a total of 5 trackers, resulting in a convincing full-body simulation. I have already backed the Kickstarter and I suggest, if you haven’t already, that you do too. This technology looks way too awesome to pass up.

It’s been quite a while since my last 3D game engine post, but I haven’t forgot about it. In fact, I’ve been so heads-down in research I haven’t really done any development at all. I still feel like there are a few more books I will need to read to be better prepared, but I guess that will always be the case. So I’ve decided to at least start some preliminary work on the engine itself. Honestly, I’ve barely even started but I thought this series would be more interesting if you saw the genesis of the engine. From absolutely nothing to, well, I hope something respectable.

Since I’m considering this the precursor to my first 3D engine, I am code-naming the project “Engine Zero”. Partly because this is sort of the “day zero” and partly because I’m a programmer and zero comes before one. Though it does look like there is a “Zero Engine” already, so I will have to come up with a better name once I am further along. So behold, the first screenshot of the engine below. Yes, it’s just a message box. You have to start somewhere, right?

Engine Zero 01

OK, so that took all of 5 minutes to whip together. But I have done some planning in terms of file management and source control. First off, the way Visual Studio organizes files by default is non-optimal. Having the source files mixed in with project/solution/temp files is not what I want. So I have made a folder just for source code, another for the build binaries, and a project folder for everything else. This feels a lot cleaner and will help keep the project more organized. You can see the structure below.

Engine Zero 02

Next up, I created a source control repository for the project. I ended up going with Subversion, as this will be fine for just coding by myself. I know everyone loves Git, but honestly I find the tools and front-ends for Subversion to be a lot more mature than with Git. If I can use a user-friendly GUI and save myself time, I’d rather do that over command-line hacking. However, I am not using source control as my sole backup method. I have the project folder backing up to an external hard-drive and to the cloud. Plus, it saves each file revision, so I could rollback changes even if I forgot to commit to SVN. It would literately take Armageddon to destroy this code. And, frankly, if it’s the end of the world I’ll probably have more important things to worry about than the integrity of my backups.

Anyway, I am still very excited about this project and think the potential is enormous. While there is not much room for yet another 3D engine, I think I have some innovative ideas to bring to the table that the community would be genuinely excited about. I don’t want to over hype things this early into development, or give away all my ideas, but if you stick around with me through this series, I think it’s going to be a fun ride.