Mech Tunnel Concept

For over a year I have been struggling with the art direction for the mechanical tunnels of  Crystal Flux.

first concept for mech levels

In early concept I didn't know the robots and their entire city would be made up of cubes that can break apart and rebuild into something different. Making a tunnel that fits with the theme would be challenging. All the tunnels up until the mech theme would be very organic but in this case they needed to seem like an advanced alien civilization hidden deep underground on Earth.

fractal robots can be shot apart but never destroyed

Snowboarding over a cubed landscape similar to Minecraft would look odd so I thought the tunnel could be a transparent tube with a backdrop of cubes.

cubes surrounding transparent tunnel

The biggest problem with this is that it was CPU intensive if I wanted any of the cubes to move; and they are supposed to be robots after all. I basically shelved the idea and made a few bad concepts until someone asked how to do a wave of cubes in Unreal Engine 4.

Visit my tutorial on Wave Cubes to see the basic concept.

It quickly got me thinking that the cubes could "move" though a material shader which could be done on the GPU thousands of times quite easily. With this technique the cubes wouldn't actually move they would just appear to change positions. They can't have collision but this is fine since its supposed to be scenery anyway.

Instead of a flat plane of cubes I would spawn them in 3 directions. (The way I'm doing this for a concept is very slow and will have to be moved to C++ for the game)

a 41x41x121 grid of cubes

Since we aren't dealing with an vector offset to a plane array of cubes, the "World Position Offset" input can be left blank. The Masked material option needs to be checked so we can input our 3d noise into the "Opacity Mask" of the material. I left the threshold at its 0.33 default and adjusted the mask with a 0.2 value. The noise is outputting black and white at 3d locations in space so if it drops below 0.33 the cube will be invisible! Neat!

Opacity Mask replaces World Position offset

After playing with the values all day I finally arrived at the look I'm going for:

The center of the grid must be masked to make it look like a tunnel, otherwise you would just run into the cubes. I still have a long way to go but this is finally something I am excited about and can work toward. The tunnels do curve around in various directions so it worries me that this idea isn't even feasible.

Continue to part 3

Questions and comments always welcome :)

Wave Cubes

Someone just asked on Unreal Engine 4 Developers' Community on Facebook how to make a surface of moving cubes.

After a quick discussion we determined that the effect can just be applied to the material shader of each cube rather than moving each one though the tick. If collision is needed than this technique doesn't work since its not actually moving the cubes.

First we need to create a plane of cubes. 21x21 cubes should be enough.

Blueprint spawning actor

Keep in mind if you put large values in loops on the construction script of Blueprints you could be waiting a long time or crash the engine: start with small values and push it later. Moving this part to C++ would definitely help but we should be fine for now.

For the material shader we must first get the world location of each pixel in space. Since our cube size is 10x10 (you will have to change this depending on your cube size) we will divide that by 10 and then round each of the values. This will give us nice 10 unit steps of values later.

stepped values in 3d space

We didn't do anything to keep the position of the actor Blueprint that spawned the cubes at 10 unit increments so when you position that actor in the world make sure its a factor of 10 on both the x and y axis. i.e. 100, 0, 0 or -20, 50, 30.

You can play around with the noise values but these seems to work well. After the noise node multiply it by 100 to get some dramatic movement and plug it into a Float3 vector. We only want the Z channel to move so leave x and y blank. Plug that into the World Position Offset. This will then offset each vector of the cubeaccording to the amount generated by the 3d noise node. Color can be connected too for a more visible effect in case the position offsets aren't multiplied enough.

the 3d noise node

You can then save the material and apply it to the static mesh instance of our plane of cubes spawning actor Blueprint.

If all goes well it should output something like this. You might want to scale the cubes down slightly so it doesn't overlap any vertices.

back to the blueprint actor to see our progress

Ahhh but the cubes aren't moving just yet, they are still static but offset. Well, go back to the material and add this on the x or y channel of that Float3 before the noise. This will add a value in the form of time and shift the noise in that direction.

Motion nodes

AND THAT IS IT! Feel free to post comments, questions, or suggestions. I hope you enjoyed this exercise in UE4 materials.

Continue to part 2

The Next 11 Months

By having no schedule and no boss, my development work seems to go from almost nonexistent to hectic depending upon what stage in a game I'm working on. In an effort to change that I've made a timeline for the next 11 months.

I am still an entry level computer programmer. Aside from my failed attempt to program some in college 10 years ago I've basically only been programming for 2 years now. Unlike CAD programs which take me a few hours to switch to something new, programming languages take me months if not years to master. With Microsoft's recent transition away from XNA/C# to direcX11/C++ in Windows 8 (and WP8) I have been flustered to say the least about which direction to take. Should I learn C++ with DirectX 11.1 to make some really impressively graphical games or stick with XNA for another year? On one hand I have exhausted the possibilities of Windows Phone 7 and I crave more, but on the other, Xbox 360 still has a lot of neat tricks I need to master. A couple features that really come to mind are reflections and point lights; neither of which can really be done on the current Windows Phone 7. My games may appear to have point lights but those are baked out textures done in Autodesk Maya, and are not calculated by the phone. To create a point light travels with the ball in Bonsai Golf, to make it appear like it was glowing, I would need to use custom shaders; and Xbox 360 can use them with the same XNA code I now feel comfortable with.

If there is still so much more than can be done in XNA, why switch at all? Three reasons: C++ is more industry standard on a professional level, C++ is faster, and DirectX 11 has tessellation. I will continue making games as a profession, why not learn the industry standard now? It might be a little too much for one person to handle. If I was in a team of 3-4 where one person could just be responsible for memory management or bringing in media assets it may make more sense. As a single inexperienced developer most of my time would be going to things like this which are taken care of automatically in XNA/C#.

This brings me to the wildcard: can a developer get high end features of DirectX 11 while still using managed C# code? Yes. Many development teams are working on bringing all of DirectX 11's features, including tessellation, into C#. SharpDX is one of those possibilities and the speed loss is nearly negligible. The problem however is that it is new and there isn't much documentation for it yet. Eventually I'll revisit SharpDX for Windows RT tablets but until then I will be taking the next logical step: XNA on Xbox 360.

Before I jump into that, I think it is time to polish up Bonsai Golf Coral and Hotsprings so I can get them into the marketplace. The original Bonsai Golf must also be updated to the latest Windows Phone 7.5 (mango). Once those are finished I can begin work on the game I've been dreaming of since I started game development. It will be called Flywheels and I will have 9-10 months to work on it before entering the Dream.Build.Play competition of 2013.

Flywheels will be a racing game on inverted planets with monocycles. I have not decided if the monocycles themselves will be alive or you will get to use your Xbox avatar to drive them (maybe both). Unlike most racing games which reward the driver for doing the same precise moves over and over again, Flywheels will be more about player interaction and finding a variety of paths to the finish line. My concept art 2 months from now should better illustrate these concepts. By December 2012 I should have a playable demo of Flywheels to test out with friends and family during the holiday season. I will try to have public betas up throughout development to get lots of feedback before the June 2013 deadline for Dream.Build.Play.

Until then, look forward to a steady release of all 3 of my current games (with updates and more levels) on the Windows Phone marketplace. It should be an excited year even though I'm holding off completely on Windows 8, Windows Phone 8, and Windows RT. Who knows, maybe by June next year there will be XNA 5.0 and everything I just talked about will be a moot point.

Underwater Sounds

I wanted good clear underwater sounds and just wasn't giving me exactly what I wanted for Bonsai Golf Coral. The bubbling and splashing were okay but I really needed some clear ambient underwater sounds. They were really hard to find until I came across  it was a bit more than I wanted to spend but after listening to the first 20 sound effects I can say it is definitely worth it.   Hopefully I won't have to compress them too much fit all I want into an over the air download for this game (20MB).

Bonsai Golf Coral

Just started working on a new game for Microsoft's Dream.Build.Play competition a few weeks ago. Its a spinoff from Bonsai Golf but this one is completely rewritten for Mango update on Windows Phone and will be themed underwater.


Stay tuned for progress updates as I've given full attention to this game until the DBP 2012 deadline in June.

Hello world!

Welcome to After you read this, you should delete and write your own post, with a new title above. Or hit Add New on the left (of the admin dashboard) to start a fresh post. Here are some suggestions for your first post.

  1. You can find new ideas for what to blog about by reading the Daily Post.
  2. Add PressThis to your browser. It creates a new blog post for you about any interesting  page you read on the web.
  3. Make some changes to this page, and then hit preview on the right. You can always preview any post or edit it before you share it to the world.