Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon
6. September 2016

 

There is an entire area of 3D modelling known as architectural visualization, or ArchViz for short, that have long been used by architects to help design buildings and help customers visualize the end result.  Many major CAD packages have archviz functionality built in, but Blender is not one of them, or at least wasn’t.  With the upcoming Blender 2.78 release, there is a plugin called Archimesh that brings much of this capability to Blender.  So… why should you care as a game developer?  As you will see shortly, this can also be used to help rapidly prototype 3D game levels as well.  So without further ado, let’s jump right in.

 

There is a video version of this tutorial available here and embedded below.

 

Getting Started

 

As of writing, the Archimesh plugin isn’t available in the normal Blender distribution.  If by the time you are reading this you are using Blender 2.78 or later you should be good to go.  If not, you will need to download the most recent test release available here.

 

Next you need to enable the plugin.  With Blender loaded select File->User Preferences or hit Ctrl Alt U.

Select the Add-Ons tab

image

 

In the search field type arc

image

 

Click the checkbox beside Add Mesh: Archimesh.

image

 

If you dont want to do this every time be sure to Save User Settings before closing the preferences window:

image

 

We are now ready to make use of Archimesh.  Feel free to close the settings window.

 

Designing A Room

 

Now that we have the plugin enabled, let’s get started.  First let’s get started by drawing some walls.  This is done easily enough using the grease pencil.  In the 3d view (I’m using top view), draw the room outline.  ( D + LMB + Draw ), like so:

image

 

Now in the Tools ( T hotkey ) menu, locate the Archimesh tab:

image

Scroll to the bottom of the tab and locate the Room from Draw button.

image

 

You’ve also got the option to have it generate a Ceiling, Floor and to close the room in ( close any gap in your drawing with a wall ) or not.  I selected Floor then clicked the button.  Here is the result:

image

 

Now in the properties (N) panel you can make tweaks to your generated room.

image

 

Here you can set the thickness of generated walls and you can also add or remove the floor and ceiling after the fact.   Here i’ve set the wall thickness to 0.120.  This is required so we can add doors and windows later.

image

 

You can modify each individual wall, including curving it, raising it to a peak, changing the length, etc.

image

 

And the results of these various settings:

wall

 

Creating your room is that simple.  Now we can refine our room.

 

Adding Detail

So rapidly creating walls and floors is certainly nice, but a little dull no?  Well don’t worry, that’s not the extent of Archimesh’s functionality.  If you take a look in the tools panel you will notice several other options.

image

 

Let’s go ahead and add a door.  Place the cursor where you want the door to be created.  This pivot point is relative to the bottom of the door, so place it low near the floor and along a wall, like so:

image

 

Now you can either add the door using the button in the Tool menu, or via the Shift + A hotkey, then Mesh->Archimesh->Door:

image

 

Tada, a door.

image

 

You will notice there are several options and styles to choose from in the Properties panel:

image

 

These settings appear to only be available on creation however, so be sure you have the door configured in a way you like before moving or modifying it.  Windows can be created using the exact same process.

image

 

Once you are done however there is one last step to perform.  You basically have to “Cut” the window and door from the room.  Don’t worry, it’s easy.  In the Tools panel, with the Room selected, select the Auto Holes button.

image

 

Now the appropriate holes will be cut into the wall.  You will also notice that the mesh hierarchy has changed as well:

image

 

And essentially that’s the process in a nutshell.  There are other very cool features in here, such as Stair creation:

StairGif

 

There is also the option to show detailed measurements, automatically create roofs, built in props like lamps and book shelves and more.

At the end of the way, it’s just creating mesh objects for you too, so you can quickly jump in adding details using traditional techniques like extruding.   There are some missing features.  Ways to link multiple rooms together easily, the ability to create interior walls automatically, but these are easily worked around. 

 

The Video

Art Design


16. May 2016

 

MakeHuman 1.1 was just released today.  This marks the first release to Make Human in nearly two years and adds major new functionality such as a new pose system and completely new and more game friendly skeleton support.  MakeHuman started life as a Blender plugin but was since spun off into a stand alone application.  It enables people to quickly and easily create fully rigged and textured human models.  Oh and it’s complete free and released under the CC0 Creative Commons open source license, perhaps the most liberal license in existence.

 

image

Major components of this release include:

  • Many bug fixes and stability fixes
  • Many targets improved and minor modeling corrections
  • Completely new skeleton and posing system, with support for pose loading from BVH, and support for custom weight and proxies
  • New pose system with auto-rigging, support for T-pose export, and initial support for special poses like high heel shoes
  • New skin library with age variation
  • New expression system now based on a face bone rig, including a library with facial expressions.
  • Improved topologies/proxies
  • FBX export now supports binary FBX and should work for most third-part applications which support FBX

 

 

You can read the full release notes here.

 

You can watch a video of MakeHuman in action below.

GameDev News Art


13. May 2016

 

One of the challenges with prototyping games is finding assets to work with.  Simple boxes are fine, but if you are working on a game with animations this proves a bit more challenging.  Therefore I created a simple sequence of spritesheets you can use in your game.   The package includes an idle, walk cycle, jump up and forward, death and duck animations.  This animation shows all of the various frames of animation.  The character was created using Fuse then animated using Mixamo and finally exported to sprite sheets using TexturePacker.

gifanimation

 

There are several different options here. 

 

Raw Sprites

( Download Link 18MB )

These are all of the raw sprites as individual files, each sprite is 512x512 pixels in size.

 

Phaser Sprite Sheets

( Download Link 13MB )

This is a set of sprite atlases and a JSON Array format for consuming in the Phaser game engine.  (See below for code)

 

Generic Sprite Sheets

( Download Link 14MB )

This is simply all of the frames of animation across several separate images, usable in any game engine.

 

License

CC0 icon These files are released under the Creative Commons CC0 license.  Basically do what you will, how you will, when you will, with whomever you will.  I on the other hand assume no responsibility for anything that may happen as a result.

 

Using In Code

The following is a example of using the generated spritesheet in Phaser, a popular HTML5 game library.  The entire project is available here as a zip.  If you are interested in learning more about Phaser I have a complete tutorial series available here.

function Game() {}

var character;

Game.prototype.preload = function () {
    this.game.load.atlas('walkSS','assets/walk.png','assets/walk.json', Phaser.Loader.TEXTURE_ATLAS_JSON_ARRAY);
    this.game.load.atlas('dieSS','assets/die.png','assets/die.json', Phaser.Loader.TEXTURE_ATLAS_JSON_ARRAY);
    this.game.load.atlas('idleSS','assets/idle.png','assets/idle.json', Phaser.Loader.TEXTURE_ATLAS_JSON_ARRAY);
    this.game.load.atlas('jumpForwardSS','assets/jumpForward.png','assets/jumpForward.json', Phaser.Loader.TEXTURE_ATLAS_JSON_ARRAY);
    this.game.load.atlas('jumpUpSS','assets/jumpUp.png','assets/jumpUp.json', Phaser.Loader.TEXTURE_ATLAS_JSON_ARRAY);
    this.game.load.atlas('rollSS','assets/roll.png','assets/roll.json', Phaser.Loader.TEXTURE_ATLAS_JSON_ARRAY);
};

Game.prototype.create = function () {
  this.input.onDown.add(this.onInputDown, this);
    character = this.game.add.sprite(0,0,'idleSS',0);
    character.animations.add("idle");
    character.animations.play("idle",30,true);
};

Game.prototype.update = function () {};

Game.prototype.onInputDown = function () {
};

module.exports = Game;

 

All of the binaries used to generate this project, including the FBX animations, a fully configured Blend file, etc. are available for download by Patreon backers.  Simply log in to your Patreon account for the download link and password.

Art


4. May 2016

 

Mixamo is a great animation resource, that enables you to quickly (and currently freely) add animations to your 3D models.  However, if you want to incorporate the results into your Blender workflow, it can be a bit non-intuitive.  The Mixamo documentation recommend using Collada, which simply does not work well.  There instructions also skip completely the process of actually using the resulting animations...  a rather key component.  The following workflow is perhaps the easiest with the best results.

 

First off, when exporting your animations from Mixamo, use the following settings:

image

 

This will result in a zip file containing your model, as well as several animations, like so:

image

 

If you haven’t already, load Blender.  Next go to File->Import->FBX.  The next part is critical, in the Import FBX settings select Manual Orientation and Apply Transform

image

 

Your model and it’s armature should now load fine, with full proper textures showing up.  I suggest you rename your armature something meaningful, as each animation is going to come in with the same name (Armature, Armature.001, etc.).

 

Next do the import again, with the exact same settings, this time bring in one of your animations.  If you only need to wire up a single animation, you are nearly done.  Just bring up the DopeSheet, switch to Action Editor

image

 

You can now toggle between any animation available in the Blend file:

image

Keep in mind, I renamed my main character Timeline, then the walk animation armature was renamed Walk, etc...

 

If however you need to use multiple animations, or want to create a single timeline with all of the animations on it, you are now going to have to break out the NLA Editor.  It is simply a matter of Add Action Strip to your main character, for each animation in the timeline, like so:

image

 

And, the end result:

GIF

 

I glossed over part of the process, but never fear... I also did a video!

Art


25. April 2016

 

One of the major advantages to working in 3D is once you have your character modeled and rigged, creating new animations is simply a matter of defining a series of poses on a timeline.  Animations are generally defined by moving a series of bones controlling your mesh, which in turn are powered by a system called inverse kinematics.  IK is basically a fancy way of saying “move an end bone and the computer will calculate how all the other bones in the chain will respond” enabling you to animate by positioning the foot forimage example and the ankle, knee and hip will rotate appropriately.  It’s a pretty powerful way to perform animation and every single major 3D application implements IK (and FK – forward kinematics).

 

In the land of 2D art, the process is often quite different.  Generally the approach here is to generate a sprite sheet, which is a sequence of slightly altered versions of the same character, which played in sequence results in an animation.  If you ever done a flipbook animation at the top corner of any of your textbooks, you already have the process of traditional 2D animation down.  There are other techniques such as onion skinning and rotoscoping to aid in the animation process, but it still remains time intensive.  If only there was some way to take the 3D worlds bone based animations and apply them to generating 2D art?  Well, there is... Spine.

 

Today we are going to look inside Spine, look at the art generation process, how to make sprite graphics that are animation ready, define an animation, then perhaps most importantly, play that animation back in our game engine of choice.  Since Spine itself is built over top of the LibGDX library (by one of the frameworks founders to boot), therefore I suppose a LibGDX example makes the most sense.  If you are bored, the story of how Spine came to be is an interesting read.

 

Full disclosure, I requested a review license in order to get hands on time with Spine.  Additionally some of the assets I am using in this demonstration are part of asset packs available for purchase and aren’t my creation.  Spine is commercial software, ranging in price from $70 for the essentials version, $300 for professional and $2200 for enterprise (which is tied to your companies revenue).  There is a free trial available and capable of doing everything we are about to do below except export and run in code.  Without further ado, let’s jump in.  As is often the case on GameFromScratch, if you prefer a video version one is available here as well as embedded below.

 

Meet Spine

Here is the main Spine interface:

image

 

It’s actually an exercise in simplicity which I appreciate.  It also supports UI scaling, so works well on high DPI displays, something far too many applications suck at, so I also appreciate that.  The left hand viewport is where the magic happens, this is where you compose your characters and animations, while on the right hand side you’ve got your project hierarchy a scene graph of sorts.  The primary UI is across the bottom of the screen.  You can easily pan and zoom around the display using a combination or RMB and Ctrl + RMB.  There is some additional complexity hidden away behind this menu:

image

 

But most of the time, what you see is actually all that you need.  It’s a very clean and simple UI.  Notice in the top left corner it says SETUP.  This is because you are currently in Setup mode.  Once our Sprite has been assembled and our bones have been arranged ( more on this in a moment ), we can then switch in to animation mode by clicking SETUP.

image

In animation mode, its all about posing our character.  Notice SETUP changes to ANIMATE and our interface changes slightly.  Now we have a timeline across the bottom of the screen.  We will get back to that in a moment.

 

Creating Spine Ready Sprites

Creating a sprite that is ready to be animated in Spine is pretty close to traditional sprite based animation with two major exceptions.  First, you cut your image up into several different pieces.  You can draw your sprite as a single image if you wish, but once you are done you need to cut it into several different animatable pieces.  Consider the sprite from the above screenshots:

image

This looks like a single drawn sprite, but it’s actually made up for several pieces arranged together.  If you look in the images section of the hierarchy, you can see it’s actually composed of several different images:

image

 

Again, you can draw your sprite how you normally would, but each animatable piece will need to be cut up to proceed in Spine.  This leads to our second requirement...  you also need to draw parts of the images that are normally obscured.  Again, using this example, even if the upper arm isn’t full shown due to being obscured by the body you still need to draw the entire arm, as the visibility can change as the sprite moves, for example:

imageimage

 

So when drawing the pieces of your sprite, you have to think about the depth as well.  Here for example are all the pieces that go together to make this character:

image

 

Rigging Your Character

Next up comes perhaps the most time intensive portion of working with Spine, rigging you character.  You can think of this as arranging all the various images together to create your character, while defining the underlying armature (fancy word for skeleton).  We will do a very simple skeleton, just to demonstrate the process.  You will notice in the tree view that there is a root node under our skeleton:

image

 

This is the very base of the skeleton and all bones are parented to it ultimately.  From here we need to create a root bone, it’s very common to start from the hips, which is what we will do.  Using the create tool, we will quickly create a simple leg skeleton:

image

Click once to set the start of the skeleton, then move the mouse and click again to set the first bone.  Now move down slightly and set another bone, like so:

image

In the hierarchy I rename the bones to values that make sense.

image

Now that we have bones, let’s attach some images to each.  From the images section you can simply drag the appropriate image onto the bone, like so:

image

You will be prompted if you want to go ahead with it:

image

 

The image is now parented to that bone.  By selecting the image you can now transform, rotate and resize it so it best matches the underlying bone:

image

You can also modifying the bone length by hovering over the tip, like so:

GIF

 

Now repeat for the lower bone, like so:

image

 

You end up with a hierarchy like:

image

 

Extremely simple, but the character is rigged, well, the leg is anyways.

 

Creating an Animation

 

Now that we have a very simple animatable character, let’s now switch over to ANIMATE mode.  In the tree view, you should see a section called Animations.  There may be a default one there, otherwise create one using the New Animation button that appears when animation is selected:

image

image

 

Keyframed animation is pretty simple in concept.  You will notice at the bottom of the screen there is now a Dopesheet view:

image

 

Your animation is composed of a set of “key” frames.  That is, you post your character and take a snapshot of the location/rotation/scale of a given bone, then advance the timeline to a different value and repeat the process.  The computer then interpolates between keyframes to create a smooth animation.  You can turn “autokey” on, so that any changes you make in the editing window automatically set a key.  Otherwise you can manually create the key by clicking the green key to the right of each transform:

image

 

Set a key for the default rotate, translate and scale values, or use Autokey.  Next advance the timeline to say 5, like so:

image

 

Next using rotations, manipulate each bone, like so:

gif2

 

Advance the timeline slightly more, then repeat the process all over again.  You can control the playback of your animation using these simple VCR style controls:

image

 

Here is a very simple and crude kicking animation:

gif3

 

Another cool thing you can do is add Events as part of your timeline, like so:

image

image

Enabling you to create events that can be fired in code, allowing you to incorporate programmatic aspects into your animations, such as playing a footstep audio effect.  We will see this process shortly.

 

Exporting the Animation

Now that we’ve got an animation to use in our game, it’s time to export it.  Here there are a couple of choices. 

image

 

You can export your results as a video, a sequence of images or as data.  If you chose to export as an image you can actually have some rather advanced controls, including generating a texture atlas (directly usable in LibGDX) or sprite sheet:

image

 

With results like:

skeleton-kick

 

This approach can be utilized in just about every single kind of game engine available today.  However, where Spine shines is when you chose to export as data instead.  This is where runtimes come in.  These are essentially libraries or code for the various game engines that enable you to use spine format natively.  Full source is available on github and runtimes exist for most 2D engines available including Unity, LibGDX, Love, MonoGame, Torque2D, Cocos2d-x and many more.  In this example I will be using LibGDX.

 

In this case I’m going to export to JSON and generate a texture atlas using the following settings:

image

 

Now let’s break out some code.

 

Using Spine In Game

As mentioned earlier Spine have several runtimes available on github.  In the case of the LibGDX project, you simply have to copy the code into your appropriate source code folder.  Assuming you created a project using the setup utility, this means copying the contents of esotericsoftware to your core\src\com directory.  Then I wrote the following code, adapted from one of their LibGDX examples.

Make sure that you’ve exported your assets and created the atlas in your working directory, most likely \core\assets.  Then use the following code:

package com.gamefromscratch;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.esotericsoftware.spine.*;

public class Spine2 extends ApplicationAdapter {
    private OrthographicCamera camera;
    private SpriteBatch batch;
    private SkeletonRenderer renderer;
    private TextureAtlas atlas;
    private Skeleton skeleton;
    private AnimationState state;

	public void create () {
		camera = new OrthographicCamera();
        camera.setToOrtho(false);
		batch = new SpriteBatch();
		renderer = new SkeletonRenderer();
		renderer.setPremultipliedAlpha(true); // PMA results in correct blending without outlines.

		atlas = new TextureAtlas(Gdx.files.internal("skeleton.atlas"));
		SkeletonJson json = new SkeletonJson(atlas);
		SkeletonData skeletonData = json.readSkeletonData(Gdx.files.internal("skeleton.json"));
		skeleton = new Skeleton(skeletonData);
		skeleton.setPosition(0, 0);

		AnimationStateData stateData = new AnimationStateData(skeletonData);
		state = new AnimationState(stateData);

        // Set up an animation listener so we can respond to custom events or completion
        final AnimationState.TrackEntry track = state.setAnimation(0, "kick", false);
        track.setListener(new AnimationState.AnimationStateListener() {
            @Override
            public void event(int trackIndex, Event event) {
                // Check for the "half" event we defined in the editor
                if(event.getString().equals("half"))
                    System.out.println("Half way baby");
            }

            @Override
            public void complete(int trackIndex, int loopCount) {
                // or the complete event (not END!) when done, fire the idle animation instead
                state.setAnimation(0,"idle",false);
            }

            @Override
            public void start(int trackIndex) {
            }

            @Override
            public void end(int trackIndex) {
            }
        });
	}

	public void render () {
		state.update(Gdx.graphics.getDeltaTime()); // Update the animation time.
		state.apply(skeleton);
		skeleton.updateWorldTransform();

        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
		camera.update();
		batch.getProjectionMatrix().set(camera.combined);
		batch.begin();
		renderer.draw(batch, skeleton);
		batch.end();
	}

	public void dispose () {
		atlas.dispose();
	}
}

 

When you run this code...

gif4

 

In the above code example you can see how you can handle an event you defined in Spine.  Otherwise it’s pretty simply to load and play animations on a character developed in Spine.  There is a comprehensive API, I’ve only touched on a very small part of it here due to space (this is already pretty long...).  There are also several features I never got to mention such as free form deformation ( useful for shapes such as capes ), swappable skins, place able props, etc..  If you are doing 2D animation, Spine is certainly a product you should check it.  Spine is by no means the only option when it comes to 2D animation in games, Spriter and Creature are two other popular alternatives.  It is however a very good option.

 

The Video

Art Programming


GFS On YouTube

See More Tutorials on DevGa.me!

Month List