Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon

17. December 2012

This math recipe is a bit different.  It is in direct response to a question I received about how to give your sprite the ability to shoot.  That is exactly what we will be doing in this recipe.  There is no actual new math, it actually is just applying our prior recipes on Velocity and our recipe on Rotating to face a point.  As those prior recipes both explained how they work, this particular entry is going to be light on description.

 

 

Just the Math

// calculate the speed relative to the mouse click distance

bullet.speed *= (bullet.y - bullet.targetY)/100;

 

// now calculate the angle between the bullet and mouse click

bullet.angle = Math.atan2(bullet.targetY - bullet.y, bullet.targetX - bullet.x );

bullet.angle = bullet.angle * (180/Math.PI);

 

bullet.onTick = function(delta){

    var velocityX = Math.cos((bullet.angle) * Math.PI / 180* (bullet.speed * delta);

    var velocityY = Math.sin((bullet.angle) * Math.PI / 180* (bullet.speed * delta);

 

    bullet.x += velocityX;

    bullet.y += velocityY;

}


 

 

Shooting

Controls:

Click anywhere on screen to shoot. The location determines the angle of the shot, while distance from the jet determines the speed

Description

The actual description behind the mathematics are available at the two linked tutorials at the beginning and end of this recipe.  This is just a quick explanation of exactly what this application does.  We are creating an Array of bullet objects, a class we define ourselves inline.  The bullet simply contains its location (x,y), the location it is targeting (the user click position, targetX and targetY), the angle, speed ( pixels per second ) and finally a graphic that we will create in a moment.  We set the users speed using a multiple relative to the click distance away from the jet sprite.  For example, if the user clicks at 40 on the Y axis, the bullet be moving at  50 * (340-40)/100 == 50 * 3 == 150 pixels / second.  For the record, don't click at 340 in the Y axis or your bullet won't go anywhere! :)

Now that we have the speed, we calculate the initial angle between the jet and the location the user clicked.  Next we register an on tick() method that will be called each frame to update the bullet.  We simply check to see if the bullet is completely off screen in any direction, and if it is, we remove it from our array.  Otherwise we apply our velocity along our given angle, and update the X and Y values accordingly.  The remains of the tick function simply draw the newly updated bullet.

 

Complete Code

<!DOCTYPE html>

<html>

<head>

    <script src="http://code.createjs.com/easeljs-0.5.0.min.js"></script>

    <script>

        var jetSprite;

        var stage;

        var bullets;

 

 

        document.addEventListener('DOMContentLoaded', demo,false);

 

        function demo(){

            bullets = new Array();

            stage = new createjs.Stage("theCanvas");

 

            stage.canvas.onmouseover = function(e){

                document.body.style.cursor = "crosshair";

            }

 

            stage.canvas.onclick = function(e){

 

                userClicked = true;

 

                var bullet = {

                    x: 200,

                    y:340,

                    targetX:e.x,

                    targetY:e.y,

                    angle:0,

                    speed:50,

                    bulletGraphic:null

                };

 

                // calculate the speed relative to the mouse click distance

                bullet.speed *= (bullet.y - bullet.targetY)/100;

 

                // now calculate the angle between the bullet and mouse click

                bullet.angle = Math.atan2(bullet.targetY - bullet.y, bullet.targetX - bullet.x );

                bullet.angle = bullet.angle * (180/Math.PI);

 

 

                bullet.onTick = function(delta){

 

                    if(this.x < -10 || this.x > stage.canvas.width+10 || this.y < -10 || this.y > stage.canvas.height+10){

                        stage.removeChild(this.bulletGraphic);

                        // Remove this bullet from the bullet list

                        var idx = bullets.indexOf(this);

                        bullets.splice(idx,1);

                        console.log(idx + " " + bullets.length);

                        //console.log("Bullet destroyed");

                    }

 

                    var velocityX = Math.cos((bullet.angle) * Math.PI / 180* (bullet.speed * delta);

                    var velocityY = Math.sin((bullet.angle) * Math.PI / 180* (bullet.speed * delta);

 

                    bullet.x += velocityX;

                    bullet.y += velocityY;

                    if(this.bulletGraphic !== null)

                        stage.removeChild(this.bulletGraphic);

                    var g = new createjs.Graphics();

                    g.setStrokeStyle(5);

                    g.beginStroke(createjs.Graphics.getRGB(255,0,0));

                    g.drawCircle(this.x,this.y,10);

 

                    this.bulletGraphic = new createjs.Shape(g);

                    stage.addChild(this.bulletGraphic);

                }

                bullets.push(bullet);

            }

 

            jetSprite = new createjs.Bitmap("jetsprite.small.png");

            jetSprite.regX = 30// Half image width

            jetSprite.regY = 40// Half image height

            jetSprite.y = 360;

            jetSprite.x = 200;

 

            stage.addChild(jetSprite);

 

            jetSprite.image.onload = function(e){

            }

 

            //And go...

            stage.update();

 

            // onFrame will be called each "tick". Default is 50ms, or 20FPS

            createjs.Ticker.addListener(onFrame);

        }

 

        function onFrame(elapsedTime) {

            // Convert from milliseconds to fraction of a second

            var delta = elapsedTime /1000;

 

            for(var i = 0; i < bullets.length; i++){

                bullets[i].onTick(delta);

            }

            stage.update();

        }

    </script>

 

</head>

<body>

<canvas width=400 height=400 id="theCanvas" style="background-color:black" />

</body>

</html>

See Also

See Velocity and Angular Velocity for information on how to move the bullet along a given angle at a given speed.

See Rotating to face another object for details on how to calculate the angle between the jet and the mouse click location.

 

Programming

14. December 2012

Whoops.  I generally keep on top of new Blender releases, but this one slipped past my radar.  So, this new is a bit dated.

Blender 2.65 splash

 

Anyways, Blender 2.65 was released a couple days ago.  This post takes a look at what's in this release of interest for game developers.  At first glance, not too much.  At second glance, quite a bit actually.  At third glance, you are glancing too much and it's time to simply look!

 

 

First off, stability.  Over 200 items were knocked off the bug list.  More stability is always nice.

 

Stuff not really all that gamedev related

  • Fire simulation and smoke flow force field added
  • Open Shading language support added to Cycles renderer
  • anisotrophic shading node added
  • anti-aliased viewport drawing

 

Game dev related additions

  • decimator modifier rewritten and now preserves UV 
  • new smooth modifier that can preserve edges and volumes
  • triangulate modifier which can be used for creating baked normal maps
  • bevel now includes round and no longer sucks
  • a symmetrize tool was added
  • a tool for transferring vertex weights between objects

 

Bevel

There is not a ton to the bevel controls:

Blender Bevel

 Basically you have offset and segment.

 

 Offset is the amount to bevel by

 

 Segments is the number of iterations or edges to use when composing the bevel

 

 

More impressive are the results, before bevelling multiple edges was… ugly.  Now:

Bevel Results

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Symmetrize 

So how exactly does Symmetrize work in Blender?  Remarkably well actually…  Check this out.

 

Before:

Blender Symmetrize Before

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

After:

Blender Symmetize After

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Too damned cool.  So, basically it's like a mirror modifier… that you can apply after the fact.  I like.  Options are pretty simple over all. 

 

Mirror Direction

 

 

 

 

 

 

 

 

Basically you just pick the axis and direction you want the symmetry applied along.  Again, very cool.

 

Great job on the release Blender team.  Head on over and download it here.

Art, News

13. December 2012

 

Some months back we announced that Torque3D had gone open source, now it’s 2D cousin has gone open source as well. 

 

Torque2D is a 2D version of the Torque game engine that also includes WYSIWYG level editing tools and it’s own scripting language, TorqueScript.

 

As you can see from the picture to the right, iTorque2D, the iOS version of Torque2D, is being folded in to this release.  Torque2DMIT will be released early next year.  However there is one gotcha with that release date:

 

In order to work in an open source environment as soon as possible, we made a decision to publish our initial version of Torque 2D MIT without the editors; in other words, the initial version will be an API only engine with tool development to follow thereafter.

 

So basically that WYSIWIG level editor I just mentioned?  Well, it wont be ready day one.

 

As to the license, the MIT license is one of the least restrictive open source licenses available.  Basically you can do what you want with it.

 

You can read more details about Torque2D here.

 

Pretty cool news over all.  When Torque3D was open sourced, they moved pretty quickly to release the source code, so hopefully the same happens here.

News

12. December 2012

In our prior tutorial we looked at using an axis aligned bounding box to perform collision testing.  One big downside was the handling of sprite rotation.  Today, we will look at using a circle instead of a rectangle for our collision detection. The circle has the obvious advantage of being the same size no matter how much you rotate it.  It is also extremely fast to calculate and test for collisions.  Although as you can see from the application to the right, it isn't extremely accurate.

 

Just the Math

Calculating the bounding circle radius:

function getBoundingCircleRadius(sprite){

    return Math.sqrt(((sprite.image.width/2 * sprite.image.width/2)

            + (sprite.image.height/2 * sprite.image.height/2)));

 

}

 

Checking for an intersection between circles


function circlesIntersect(c1X,c1Y,c1Radius, c2X, c2Y, c2Radius){

    var distanceX = c2X - c1X;

    var distanceY = c2Y - c1Y;

 

    var magnitude = Math.sqrt(distanceX * distanceX + distanceY * distanceY);

    return magnitude < c1Radius + c2Radius;

}


 

 

Description

As mentioned earlier, a bounding circle removes the complexity of dealing with rotation.  This is a bit of a double edge sword though.  An axis aligned bounding box can be tighter and more accurate than a bounding circle, but as it rotates it quickly becomes less so.  The following application illustrates the same shape bounded by both a bounding box and a bounding circle.  As you can see, at some points the bounding box is a great deal more accurate, but as it rotates, it becomes a great deal less accurate:

 The calculations for the bounding circle are however a great deal easier to perform.  Let's take a look at them now.

Math.sqrt(((sprite.image.width/2 * sprite.image.width/2)

            + (sprite.image.height/2 * sprite.image.height/2)));

First we start off by calculating the radius of our sprite's image.  This is a matter of calculating the length of furthest point from the centre, giving us the smallest possible radius that encompasses our sprite.  The process is rather straight forward and is calculated using pythagorean theorem again.  We are essentially calculating the magnitude (or distance) from the centre of our sprite to the corner, we do this by forming a right angle triangle.

For a bit of a refresher on pythagorean theorem (which is used A LOT), consider this diagram I stole:

pythagorean theorem

 

a is the X coordinate of our corner, b is the Y coordinate of our corner, therefore the distance or magnitude ( the second is the correct term mathematically ) between those two points is c, which you can calculate by taking the square root of the square of a plus the square of b.  Or using our actual variable names, distance = square root( x * x + y * y).  The resulting value of this equation is the distance between x and y.  So, how did we come up with the values for x and y?  That part was simple, since our pivot is at the centre of our sprite, x is simply half the width of the image, while y is half the height.

If that just confused the hell out of you, the following diagram might help a bit.  It illustrates how pythagorean theorem is being applied to our actual jet sprite to calculate the distance to the corner.

DistanceToCorner

 

So, now we have the distance to the corner, which we can now use it as our circle's radius.  Now we need to figure out how to determine if an intersection occurs.

var distanceX = c2X - c1X;

var distanceY = c2Y - c1Y;

 

var magnitude = Math.sqrt(distanceX * distanceX + distanceY * distanceY);

return magnitude < c1Radius + c2Radius;

This again is a simple and quick equation.  Actually, its the exact same formula again, this time though, we calculate x and y by measuring the magnitude ( distance ) between each of our circles centre points.  Once we have calculate the magnitude between the two circles, we simply check to see if that distance value is less than the total radius of both circles.  If the magnitude is less than the radius of both circles combined, they intersect, otherwise they don't.

One thing you should be aware of ( but not too concerned with initially ) is the square root operation is an expensive one and generally something you want to avoid.  A square root is many times slower to perform than a multiplication or division.  In this situation, it is a very easy to eliminate, you simply square both sides, like so:

function circlesIntersect(c1X,c1Y,c1Radius, c2X, c2Y, c2Radius){

    var distanceX = c2X - c1X;

    var distanceY = c2Y - c1Y;     

    var magnitudeSquared = distanceX * distanceX + distanceY * distanceY;

    return magnitudeSquared < (c1Radius + c2Radius) * (c1Radius + c2Radius);

}

 

If you are still struggling with the math though, these kinds of optimizations can happen later if they are needed at all.  It's often easier to optimize after the fact anyways, so don't worry too much about being fast quite yet.  It's far too easy to get caught up optimizing prematurely.

 

Complete Code

<!DOCTYPE html>

<html>

<head>

    <script src="http://code.createjs.com/easeljs-0.5.0.min.js"></script>

    <script>

        var jetSprite,jetSprite2;

        var boundingCircle1, boundingCircle2;

        var actualBounds;

 

        var stage;

 

        document.addEventListener('DOMContentLoaded', demo,false);

 

 

        function getBoundingCircleRadius(sprite){

            return Math.sqrt(((sprite.image.width/2 * sprite.image.width/2)

                    + (sprite.image.height/2 * sprite.image.height/2)));

 

        }

 

        function createBoundingCircle(sprite,useMaxExtents){

            var g = new createjs.Graphics();

            g.setStrokeStyle(2);

            g.beginStroke(createjs.Graphics.getRGB(0,0,255));

            var radius = getBoundingCircleRadius(sprite);

            g.drawCircle(sprite.x,sprite.y,radius);

            return new createjs.Shape(g);

        }

 

        function circlesIntersect(c1X,c1Y,c1Radius, c2X, c2Y, c2Radius){

            var distanceX = c2X - c1X;

            var distanceY = c2Y - c1Y;

 

            var magnitude = Math.sqrt(distanceX * distanceX + distanceY * distanceY);

            return magnitude < c1Radius + c2Radius;

            // Note, sqrt is a slow operation, square both sides for better performance

            // var magnitudeSquared = distanceX * distanceX + distanceY * distanceY;

            // return magnitudeSquared < (c1Radius + c2Radius) * (c1Radius + c2Radius);

        }

 

        function demo(){

            stage = new createjs.Stage("theCanvas");

 

            jetSprite = new createjs.Bitmap("jetsprite.small.png");

            jetSprite.regX = 30; // Half image width

            jetSprite.regY = 40; // Half image height

            jetSprite.y = 200;

            jetSprite.x = 100;

 

            jetSprite.image.onload = function(){

                boundingCircle1 = createBoundingCircle(jetSprite);

                stage.addChild(boundingCircle1);

            }

 

            stage.addChild(jetSprite);

 

 

 

            jetSprite2 = new createjs.Bitmap("jetsprite.small.png");

            jetSprite2.regX = 30; // Half image width

            jetSprite2.regY = 40; // Half image height

            jetSprite2.y = 200;

            jetSprite2.x = 300;

 

            jetSprite2.image.onload = function(){

                boundingCircle2 = createBoundingCircle(jetSprite2);

                stage.addChild(boundingCircle2);

            }

 

 

            stage.addChild(jetSprite2);

 

            //And go...

            stage.update();

 

            // onFrame will be called each "tick". Default is 50ms, or 20FPS

            createjs.Ticker.addListener(onFrame);

        }

 

        function onFrame(elapsedTime) {

            jetSprite.x++;

            jetSprite.rotation = jetSprite.rotation+1;

            stage.removeChild(boundingCircle1);

            boundingCircle1 = createBoundingCircle(jetSprite);

 

            stage.addChild(boundingCircle1);

            stage.addChild(boundingCircle2);

 

            if(circlesIntersect(jetSprite.x, jetSprite.y, getBoundingCircleRadius(jetSprite),

                    jetSprite2.x, jetSprite2.y, getBoundingCircleRadius(jetSprite2)))

            {

                jetSprite.x = 100;

            }

 

            stage.update();

        }

    </script>

 

</head>

<body>

<canvaswidth=400height=400id="theCanvas"style="background-color:black"/>

</body>

</html>

 

 

See Also

See Collision Detection using an axis-aligned bounding box for details on bounding boxes.

 

If you are still struggling with the use of triangles, you really need to wrap your head around this concept.  This Youtube video ( with horrible audio ), gives a good example of pythagorean theorem in action:

 

 

Programming

10. December 2012

 

I don’t throw around words like ‘Nanny State’ often or lightly, but when it comes to epically stupid “think of the children” laws effecting video games I take notice.  This one is a whopper though.  When I think Nanny State… there are a few countries and companies I think of, Germany and Nintendo nearly topping both of those lists ( well.. and Australia…  they’ve mastered the art of stupid law making in the name of protecting children ).  When Germany and Nintendo combine, the results are some epic stupidity.

 

As of right now you can’t buy games online in Europe that have a PEGI 18 rating, unless it’s after 11PM and before 3AM.  So, if you want to buy Assassin's Creed or ZombieU online and aren’t a night owl, you can’t.

 

Here is a quote from Nintendo in response to Eurogamer:

“At Nintendo we always aim to provide a safe gaming experience for fans of all ages and ensure that we comply with applicable legal age restriction requirements across Europe,” a Nintendo spokesperson told Eurogamer.

“Legal age restriction requirements vary across a number of European countries. Since Nintendo of Europe is based in Germany, Nintendo eShop is complying with German youth protection regulation which therefore applies to all our European markets. Under German law, content rated 18+ must be made available only at night.

“Therefore the accessibility of 18+ content in Nintendo eShop is limited to [USK: 22:00 UTC until 4:00 UTC] [PEGI: 23:00 UTC until 3:00 UTC].”

 

So, Germany has a downright stupid child protection law on the books, and Nintendo Europe’s offices are based out of Germany, so they are applying the law TO ALL OF EUROPE.

 

So, Germany get’s the stupid prize for enacting a law that makes not a lick of sense.  It’s modeled in the mode of television restrictions where adult content can’t be played until a certain time window, which itself is completely ignorant of 10 years of progress in digital distribution rendering the entire concept archaic and mostly pointless.  Not to mention the fact… what are the demographic that are up between 11 and 3?  Outside the university crowd…  that’s basically insomniacs, people working nights and….  well, students under the age of 18!  Buying *ANY* content on the app store already requires users submit their age, making the entire scheme redundant anyways.  All you are doing is annoying your users.

 

Nintendo obviously takes their share of the blame here.  They have a history of stupidity when it comes to online, "protecting” users behind those god awful friend codes being the most glaring example.  This just seems to be another example of them being pretty out of touch with online reality.  Now it may be a legal requirement due to their office location, but this doesn’t absolve them of responsibility.  First off, basing your European operations out of the most legally anti-video game country in Europe is a downright stupid decision to start with.  The fact they can’t seem to work their way around a problem that EVERY other online retailer solved years ago… well, that’s 100% on Nintendo.  It would take their lawyers about 20 minutes to spin the eStore European division off as a subsidiary and open an unmanned office in a more legally friendly country.  Instead they took the lazy and downright stupid approach of applying this bad restriction to all of their customers.

 

I imagine in time common sense will prevail… at least, I certainly hope it does.

 

This post isn’t as off topic as it might seem.  These kind of legal hassles, especially as it applies to digital distribution, should be of concern to all indie game developers.  When or if you register your company, you should be exceptionally mindful of your host countries laws and how they can impact your legal rights and liabilities.

Totally Off Topic, News ,

Month List

Popular Comments

An Introduction to 3D Graphics Applications… and a small history lesson
Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon


Home > Art >

2. December 2014

 

Starting life as niche technology, costing millions of dollars and used only on high end films, 3D graphics have now become nearly ubiquitous these days.  Still used in movies ( nearly all movies these days ), 3D graphics are used heavily in games, TV, marketing, conceptualization, engineering and much much more.

 

In this particular guide we are going to look at the more popular options out there, with an obvious bias towards gaming.  If you are just starting out and trying to get an idea of what’s available, this should be the perfect page for you!

 

This entire discussion ( and much more I think ) is available as a 56 minute talk in 1080p on YouTube as well as embedded at the bottom of this post.

 

A Quick History Lesson

 

Actually, the big two would probably be more accurate, as Autodesk recently put a bullet in one of these apps.  These are probably the three most used commercial 3D graphics applications, and to really understand them probably requires a bit of a history lesson.  Don’t worry, I’ll keep it brief.

 

Way back in the stone age of computer graphics, there were a handful of really successful 3D applications, but at the forefront were a pair of applications.  One was a product called Power Animator created by a company called Alias ( who became Alias/Wavefront ) which eventually morphed into a project called Maya.  Power Animator was used in such early and high profile 3D movies like Terminator 2 and The Abyss and on early 3D video games like Super Mario 64.  The other major player of the day was a product called Softimage ( the one that just took a bullet actually… ) which was used to make Jurassic Park and the Virtua Fighter series of games.  By no means were they the only players, many others existed such as Nichimen nWorlds, Lightwave and more, but these two were the big players used in big budget movies.

 

A few things started to happen however…  In these early days, the computers capable of running these 3D applications were dedicated workstations like those from Silicon Graphics Inc (SGI) and Digital (DEC).  These machines ran from $10K to $50K and much much more.  3D graphics applications certainly weren’t and neither were the machines that ran them. 

 

There was a movement towards running 3D applications on “mere mortal” machines.  The earlier mentioned Lightwave ran on Amiga’s for example, as did a popular-at-the-time application called Imagine.  But three major things happened to bring 3D graphics to the unwashed masses

 

  1. home computers became less crappy.  OpenGL arrived, 3D cards arrived, processors got faster and memory increased
  2. Autodesk created a program called 3D Studio that ran on DOS.  It was a very small player in the industry (outside of CAD that is), but opened 3D up to a world of people that never had access.
  3. Microsoft released Windows NT and wanted to move into the 3D market, so they did what they did and bought it.  That is, they bought Softimage and ported it to Windows.  Coupled with companies like Intergraph releasing workstation class PCs and the rise of the video card, they succeed.

 

Fast forward a few years and many amazing things happened.  Kinetics became Autodesk ( of AutoCAD fame ) and 3D Studio became 3D Studio Max, moving from DOS to Windows.  In fact, Windows is now the new home of 3D.  SGI is fast becoming a fading memory and all the major applications have been ported to Windows.  Then a wonderful thing happens… prices all start to fall!  A version of Maya and Softimage are available for under $1,000 and free game focused versions are available of Softimage ( Mod Tool ) and 3D Studio ( GMax ).  3D had truly started coming to the masses.

 

Enter Autodesk.  There was a LOT of consolidation in the industry…  Alias and Wavefront merged to form Alias/Wavefront, Microsoft purchased Softimage and eventually sold it to Avid.  In the end, Autodesk purchased both Avid and Alias resulting in all three major 3D applications being owned by a single company.  Almost over night the price wars predictably enough ended, and the prices went up.  That said, it hasn’t all been bad.  These days, for students and educators anyways, the entire Autodesk suite is available for free.  There is also a game focused version of Maya available, which we will discuss shortly.  So in some ways, 3D has become a great deal more expensive and a great deal cheaper all at once.

 

So, that brings us to today.

 

The Big Three… Er… Two

 

In commercial studios, be it for games, TV or movies, the same three products are the ones most encountered:

3D Studio MAX

Maya

Softimage Xsi

 

As I mentioned earlier, after a very long and successful run, Softimage is being put out to pasture.  Softimage 2015 was the most recent, and final, release ever.  Obviously if you are just starting out today and need to pick a package, Softimage is no longer a good choice.

 

That leaves Maya and Max to choose from.  Traditionally 3D Studio Max was strongest in games, with many game developer friendly features ( excellent plugin system, ability to build your renderer into Max, great low polygon tools, good texturing tools, etc ), while Maya was known more for Film and TV, with animation certainly being it’s strong suit.  That all said, it’s become more and more common to see Max used for film work and Maya used for game work, so the old stereotypes don’t really hold.

 

Actually, being under the same rough has leads to a convergence of sorts.  Over time the feature list of the two products is quickly becoming virtually identical.  As have the keyboard shortcuts, even the file formats are standardizing ( FBX, read more about it here if interested ).  With each new release, each product is starting to feel more alike than different.

 

Of the two, I personally prefer Maya, although the mouse heavy UI drives me nuts.  3D Studio MAX is just getting so long in the tooth that it’s massively in need for a major overhaul.  I first used Max when it was initially released and frankly the Max of today is very very very similar.  Same UI, even a lot of the same tools, tools that have long since been obsoleted.  This is just cluttering things up and making the learning curve higher.  Maya was the result of a complete re-write on the other hand, so the code base is much newer with less years of cruft.  The menus though, those mouse heavy radial menus…  ugh.  Of course, this is all personal opinion.

 

At the end of the day, Max and Maya are your two safe choices if you want a job in the industry.  Max probably has an edge for getting you into a game studio, while Maya probably has an edge getting you into a film studio.  At the end of the day though, they are owned by the same company, speak the same language and are often both used.

 

Neither however is cheap.  3D Studio MAX is $3,675.  Interesting fact, it’s always been that price… even during the 3D application price wars, Autodesk never dropped their price.  The big difference is you can now lease monthly or annually, for $185 / month or $1470 / year.  Maya is now the exact same price as Max ( see how they are becoming more and more similar… ) down from a pricetag of about $5K last year.  Softimage was around the same price.  I’m not sure if you can even buy it anymore, if you can, Autodesk sure don’t make it easy.

 

Oh yeah, Max is Windows only, while Maya is available on Windows and Mac.  If you are a Mac user, that’s a pretty important tidbit of info, no?

 

Maya for Indie Developers

 

Last year, Autodesk took a step towards courting the indie game developer market with the release of Maya LT.  This is a stripped down version of Maya that targets indie game developers specifically.  It is priced at $30 a month, or $795 to purchase a perpetual license (with, I believe, one year of support).

 

So, the obvious question is, what’s stripped out?  Initially the limitations really sucked…  polygon caps, no scripting support, it was pretty much crippled.  Over time though they revisited things and made up for some of the glaring mistakes.  The big areas that are cut are Visual FX stuff and most of the renderers.  This means, if for example, you wanted to create a pre-rendered cutscene, you couldn’t.  The animation features have also been stripped back, leaving mostly the stuff you would use for real-time games.

 

At the end of the day Maya is really only suitable for modeling and rigging game assets or possibly level creation/design.  That said, for a great many game developers, that’s all you actually use it for.  For a full breakdown of Maya vs Maya LT features, you can check here.

 

 

The 900lb Open Source Gorilla in the Room

 

If you are sitting here thinking 4 grand?!?!?!??! OUCH!

 

Well, meet Blender.

 

Blender started life as an in-house 3D tool for a company called NeoGeo… yeah, not the NeoGeo game console, but instead it was the Netherlands largest 3D house… or is that haus?  Eventually a company named NaN was formed to “productize” Blender.  NaN died in 2002 and a project was launched to open source the Blender code… in many ways this was one of the first highly successful KickStarter campaigns!  Blender was eventually open sources, the community took it and ran with it and Blender is thriving today.

 

Blender is entirely free and open source.  It’s nowhere near as commonly used commercially as Max or Maya, but it is certainly used, such as for pre-viz work on Spiderman 2.  I would lie though…  the vast majority of commercial games *aren’t* created using Blender.  If you are looking for something to stick on your resume, Max and Maya certainly carry more weight.

 

HOWEVER, and this is where we drop heavily into opinion land for a bit…

 

If you are working on a 3D game and need to create textured, animated, 3D models, Blender is just as capable as 3D Studio Max or Maya, even without factoring in the price tag.  For many years, Blender had a reputation for being chosen solely because it’s free.  Those days are starting to pass however.   Put into the simplest terms, for the last several years I would say with each new release, Blender is the application that is improving by far the most of the three.  Now, you will find all three apps are quite capable, with Maya/Max and Blender all being strong and weak in different categories.

 

Blender used to ( ok… still does ) have a reputation for being hard to use with an unwieldy interface and in many ways, this was quite fair.  Blender followed it’s own idioms and was a VERY keyboard heavy workflow which takes some time to get.  Also, rather bluntly, Blender 2.4’s interface was pretty much terrible.  Blender 2.5 however was a massive rewrite and rework and it really bore fruit.  Then the 2.6 releases improved the rough edges, while 2.7 has a heavy focus on usability, and it’s make a huge difference.  If you haven’t checked out Blender since the 2.4 days you really owe it to yourself to try it again.

 

The single biggest flaw with Blender IMHO, at least as far as game development is concerned, is the file support.  Autodesk owns the FBX format and the COLLADA file format is a bloody mess of complication to the point that nobody really does it all that well.  This means getting assets into and out of Blender can certainly be more of a challenge than using Autodesk products.  This is an area Blender have recently focused their efforts on and the Unreal Engine folks have kicked in some cash toward the effort so hopefully this improves.

 

So, my summary on Blender… it’s honestly an equal to the two Autodesk products, with as I said, it’s strengths and weaknesses.  I also personally think it’s improving at a much greater rate than either of those products.  Of course, it’s also a hell of a lot cheaper.  That said, once you start paying actual salaries, the cost of software licenses quickly become peanuts.  Can you use Blender for your own game project?  Certainly.  Should you?  That depends on you really, but you should certainly try it out.  The functionality is certainly there, with the biggest flaw easily being the content pipeline.  However, if you are a student looking for a job, Max and Maya will certainly look better on a resume.  A great artist will be able to make great art in any three of those tools, and a good studio will hire an artist will a great reel, regardless to the tool it was created in.  That said, at the end of the day, human resources will be looking for Max or Maya on your CV… they will not be looking for Blender.  Which is actually kind of sad.

 

My much shorter summary…  Blender is free and very good, you should certainly give it a look.  Oh, being Open Source… it’s available on basic everything… possibly even your Toaster… although oddly enough, not been ported to iPad.  Seriously, someone really should port Blender to the iPad!

 

 

Sculpting… the new hotness

 

Another major development in the world of 3D is 3D sculpting.  Sculpting is like working in digital clay for quickly creating hyper detailed, very organic meshes.  In in the world of real-time games, this is still quite useful, as high resolution versions of game models are often used to create something called a normal map.  This allows you to use texture maps to fake super high levels of detail.  Another common operation is to sculpt hyper high resolution models, then basically “trace” a lower detailed version over top.  This is a process called retopology.  Now the good news… all three of the above solutions have sculpting built and retopology tools built in.  That said, compared to the tools we are about to discuss, they simply sucks at it.  So it’s becoming increasingly common to see these kinds of applications pop up in studios.  That said, these are more like initial tools in your toolbox, and certainly not where you should start!

 

zBrush

Pixologic’s zBrush is where the whole sculpting movement started and it’s by far the biggest player in the space.  It’s also $800 by the way.  It’s not an end to end solution, it’s designed to do what it does, then passes the results off to a different program ( Max… Maya… Blender… ) for animation, rendering, etc.  For sculpting though, it’s hard to beat zBrush.  You should at least be aware of it’s existence.

 

Sculptris

$800 a little rich for you?  How does free sound?  Sculptris is an interesting project… it actually started life as a fan’s attempt to replicate zBrush.  Said Fan did a pretty damned good job of it, to the point the Pixologic bought the rights and make it available for free.  So go, download it now… even if you don’t ever do anything with it, it’s an amazing amount of fun.

 

Mudbox

Of course you couldn’t be a 3D application without having an Autodesk product, could you?  Mudbox is Autodesk’s offering in the 3D sculpting space.  It started life as a tool used by Weta on King Kong and Lord of the Rings.  Eventually Autodesk bought them and now it’s available for $500 or $10 a month.  In all honesty, that’s the end of my knowledge, I’ve never used Mudbox, nor have I ever talked to an artist that chose it over zBrush.  There is however a trial available, so I really should check it out one of these days…

 

3D Coat

3D Coat is another interesting product out there that focuses on 3D tasks…  Sculpting, 3D Painting and Retopology.  3D Coat is about $400 at full retail.  It is however available on Steam so keep an eye out for amazing discounts.  Be warned, you need the commercial version if you are using 3D Coat for a commercial product.  3D Coat does have a trial available.

 

 

Hey What About _________!

 

 

In all honesty, we just ticked off the major boxes… but of course that was by no means comprehensive.  There are a few other packages you should certainly be aware of, so let’s discuss them now.  These aren’t rated lower for functionality, but simply for popularity.

 

Modo

Modo started life somewhat recently ( by 3D application standards ) as a dedicated 3D modeler.  The company itself was formed by a number of former Lightwave developers and this application has a huge following.  Over time it’s evolved to become much more than a modeler, although it’s still not quite a full 3D suite like Max, Maya or Blender, it’s getting very close.  As the functionality has grown, so to has the price tag.  Currently its 1000Euro.  Animation is a somewhat recent addition to Modo, so the functionality is a bit limited compared to more mature packages.  That all said, Modo has grown in functionality at an amazing rate and is getting quite popular.  There is also a trial available.

 

Lightwave

As I just stated, Modo was formed by a bunch of ex-Lightwave developers.  Lightwave is a once great package that has seemingly lost it’s way and as a result, a great deal of it’s user base.  Lightwave still exists today, there was a new release in 2014, but it seems to be developing at a snails pace and the community around it seems to have mostly disappeared.  Lightwave has been used in a staggering number of TV and Film projects, as you can see here, but the number of recent projects seems to have dried up.  Lightwave costs $1000USD and there is a free trial available.

 

Sketchup

This application is actually used a surprising amount.  It was purchased by Google and used to create 3D models for Google Earth.  Eventually however Google sold it off and it’s a stand alone product again.  Sketchup is available in both a free and commercial version.  At the end of the day, for commercial game dev you will probably need the pro version, which has a $600 price tag.  Sketchup is a 3D modeller only, but damn is it an easy to use one!  For an introduction to 3D modeling, the free version may be the perfect place to start.  You can read more about Sketchup’s use in game design here.

 

Silo

This program is most similar to Modo in functionality and I was a huge fan when it came out.  It’s mostly a modeler that’s gained more features over time, it has a nice low price tag of $109, is cross platform and great to use.  So why the negativity?  Well, the developers basically abandoned it for many years, only recently started working on it again.  I have no idea how much support there is behind this application.  It’s such a shame too, as this product could have been truly great.  There is a trial available and it’s worth checking out, but I wouldn’t rely on too many new features or bugs being fixed going forward.

 

Wings

Wings is an awesome 3D modeler, based heavily on Nichimen Nendo, an awesome 3D modeler that came before it.  It is free and open source and uses a completely different technology called Winged Edge meshes.  Unfortunately it’s also written in a programming language about 4 people on earth use, so when the primary developer stopped supporting it, it effectively died.  It’s still available, and still very cool, but in the last few years it’s stayed still while the world around it got a whole lot better.

 

Cinema4D

This package has quietly existed for years, gaining more and more features and a rabidly loyal user base.  To be honest, I’ve never really got it, especially with a $3,700 price tag.  That said, there must be advantages, as it wouldn’t still exist otherwise.  There is a trial available if you want to check it out for yourself.

 

Houdini

This one has also been around for a very long time and was traditionally used quite heavily for 3D effects in movies.  In all honesty, this is the single most confusing piece of software I have ever tried to use! ;)  It takes a procedural approach to 3D and frankly, I don’t really understand how it works, so I’m not even going to try to explain it.  There is a trial available and Houdini is available for $2000.  They do however have an Indie friendly version available for $200, that is tied to company revenue.  Remember that somewhat famous Dead Island trailer that took the web by storm?  That was created in Houdini.  Again though, this program is very very very weird. 

 

Animation Master

Here is another application that’s quietly been around forever, 1987.  It’s a low cost modeling and animation tool that is based around splines and patches ( most modern modelers are polygonal / subD surfaces ).  Organic models are easy to create, the animation tools are surprisingly comprehensive and the price tag starts at $80.  It’s an interesting package and there is a trial available, but it’s a bit of a pain to get it running. 

 

Shade3D

To be honest, I know almost nothing about this application, even though it’s been around forever.  It’s a full suite 3D package like Max or Maya and they recently released a Unity version.  I tried Shade shortly after that release ( a trial is available ), and the documentation was extremely lacking at the time, so I got pretty much nowhere.

 

Hexagon

A free 3D modeling package made available by Daz.  Reviewed it quite a while back, not a fan.  An advance warning, Daz will spam the ever loving hell out of you if you give them an email address!

 

 

TL;DR

 

So, you got to this point and now you are probably asking… now what?  That’s a lot of options, what should I do???

 

The answer really depends on you and what your goals are.  If you are a student (secondary or post-secondary) and looking to get into AAA 3D for games or film, the answer is pretty much a no-brainer.  Get in the free student program from Autodesk and start learning either Max or Maya.  If it’s games you are most interested in, Max is probably the route to go between the two.

 

If you aren’t a student, or aren’t trying to work on your CV, the answer gets much trickier.  The choice between Maya, Max and Blender on strictly technical merits comes down mostly to the persons opinion and work-style.  If you are working with a large team, or on a free product, Blender quickly becomes a no brainer solution as well.  If you’ve got no budget at all, Blender simply wins by default.  Otherwise I would recommend taking advantage of the free trial, trying out all three and seeing which one has a workflow that fits you.  Just be warned, it’s going to take some time to come to terms with each package.

 

For all others, I saw this.  At least download Blender and Sculptris.  Both are completely free, both are very good and both are excellent places to start.  The skills you learn transfer very well to other packages.

 

The Video Version

 

Art ,

blog comments powered by Disqus

Month List

Popular Comments