Subscribe to GameFromScratch on YouTube Support GameFromScratch on Patreon
12. August 2013


So today on Safari Books Online came a book that was a complete flash from my past.  Computer Graphics: Principles and Practices 3rd edition has been released.  What’s so special about this book?


Three things… 


First, it was the textbook I used to learn computer graphics a very long time ago.

Second, it was one of the only ( incredibly expensive ) books I had to purchase for school that I actually found valuable.  ( Code Complete was the other book, if you were curious )

Third, it’s one of the only dead tree books I have kept.  I am almost entirely digital these days, so you have to be a good book for me to keep you around, especially given the size of a few of the condos I’ve moved into over time, I’ve gone through a lot of book purges!  When you consider how incredibly out-dated it had become, the world of graphics has changed a great deal since the second edition of the book was released in 1990!  On top of that, all of the code examples where in Pascal, using a library I’d never heard of at the time, or used since.


Fortunately with the release of the 3rd edition, I now have one less piece of dead tree fighting for space in my house!  There are a few things to know about this book, it’s has no code for OpenGL or Direct3D, it’s not really about that.  The book actually uses WPF for it’s examples, but don’t worry, the concepts are easily applied elsewhere. The entire point of this book is to teach graphics programming concepts, not really about the implementation.  If you don’t already know one of those APIs, you are going to want to pick up an additional book on your graphics library of choice ( if needed. )  That said, this will make you **understand** what you are doing with either of those graphics libraries.  You will find when reading this book, it doesn’t really matter what programming languages or library you use, you will be able to digest and adapt to your tools of choice without a lot of effort.  This book has been almost completely re-written at this point, and does cover the modern graphics pipeline.


What does it cover?  Well, just about everything actually.  That’s why I kept it around all these years.  For example, here is the Table of Contents:

  1. Introduction
  2. Introduction to 2D Graphics Using WPF
  3. An Ancient Renderer Made Modern
  4. A 2D Graphics Test Bed
  5. An Introduction to Human Visual Perception
  6. Introduction to Fixed-Function 3D Graphics and Hierarchical Modeling
  7. Essential Mathematics and the Geometry of 2-Space and 3-Space
  8. A Simple Way to Describe Shape in 2D and 3D
  9. Functions on Meshes
  10. Transformations in Two Dimensions
  11. Transformations in Three Dimensions
  12. A 2D and 3D Transformation Library for Graphics
  13. Camera Specifications and Transformations
  14. Standard Approximations and Representations
  15. Ray Casting and Rasterizations
  16. Survey of Real-Time 3D Graphics Platforms
  17. Image Representation and Manipulation
  18. Images and Signal Processing
  19. Enlarging and Shrinking Images
  20. Textures and Texture Mapping
  21. Interaction Techniques
  22. Splines and Subdivision Curves
  23. Splines and Subdivision Surfaces
  24. Implicit Representations of Shape
  25. Meshes
  26. Light
  27. Materials and Scattering
  28. Color
  29. Light Transport
  30. Probability and Monte Carlo Integration
  31. Computing Solutions to the Rendering Equation: Theoretical Approaches
  32. Rendering in Practice
  33. Shaders
  34. Expressive Rendering
  35. Motion
  36. Visibility Determination
  37. Spatial Data Structures
  38. Modern Graphics Hardware


… so as you may be able to tell, this isn’t a short book.  In fact it’s 1264 pages in length, which would be why this isn’t a proper review, I am not done the book.  In fact, it’s one of those book I will probably never read entirely front to back.  Instead I jump in to the areas I need, unless of course I struggle with the concepts being taught, then I tend to read the entire chapter until I’ve gotten the subject down.  Of course, I read chapters from time to time just for something to do.


That’s another great part of this book.  I am no math wiz, I have forgotten far too much, so with many pure math texts I struggle.  This is why this book is very good.  It’s not simple by any means, but it doesn’t just throw an equation at you and leave you scratching your head.  Things are introduced in escalating difficulty, but if you have a late high school or first year university math education, you should be OK.


The math is fully explained over the course of the book.  If you have trouble parsing out equations, they are explained fairly well in the book including how to decipher them.   The book doesn’t magically make math easy, but it does do an effective job of explaining it, so that even a non-genius can make sense of things.  Here for example is the excerpt on Euler Angles, and is typical of how things are explained:


Example taken from book:


11.2.2. Euler Angles

Euler angles are a mechanism for creating a rotation through a sequence of three simpler rotations (called roll, pitch, and yaw). This decomposition into three simpler rotations can be done in several ways (yaw first, roll first, etc.); unfortunately, just about every possible way is used in some discipline. You’ll need to get used to the idea that there’s no single correct definition of Euler angles.

The most commonly used definition in graphics describes a rotation by Euler angles (φ, θ, ψ) as a product of three rotations. The matrix M for the rotation is therefore a product of three others:


Thus, objects are first rotated by angle φ in the xy-plane, then by angle θ in the zx-plane, and then by angle ψ in the yz-plane. The number φ is called pitch, θ is called yaw, and ψ is called roll. If you imagine yourself flying in an airplane (see Figure 11.1) along the x-axis (with the y-axis pointing upward) there are three direction changes you can make: Turning left or right is called yawing,pointing up or down is called pitching, and rotating about the direction of travel is called rolling.These three are independent in the sense that you can apply any one without the others. You can, of course, also apply them in sequence.



Figure 11.1: An airplane that flies along the x-axis can change direction by turning to the left or right (yawing), pointing up or down (pitching), or simply spinning about its axis (rolling).

Writing this out in matrices, we have



With the proper choice of φ, θ, and ψ, such products represent all possible rotations. To see this, we’ll show how to find φ, θ, and ψ from a rotation matrix M. In other words, having shown how to convert a (φ, θ, ψ) triple to a matrix, we’ll show how to convert a matrix M to a triple (φ′, θ′, ψ′), a triple with the property that if we convert it to a matrix, we’ll get M.

The (1, 3) entry of M, according to Equation 11.14, must be sin θ, so θ is just the arcsine of this entry; the number thus computed will have a non-negative cosine. When cos θ ≠ = 0, the (1, 1) and (1, 2) entries of M are positive multiples of cos φ and – sin φ by the same multiplier; that means φ = atan2(–m21, m11). We can similarly compute ψ from the last entries in the second and third rows. In the case where cos θ = 0, the angles φ and ψ are not unique (much as the longitude of the North Pole is not unique). But if we pick φ = 0, we can use the lower-left corner and atan2 to compute a value for ψ. The code is given in Listing 11.1, where we are assuming the existence of a 3 × 3 matrix class, Mat33, which uses zero-based indexing. The angles returned are in radians, not degrees.

Listing 11.1: Code to convert a rotation matrix to a set of Euler angles.

  1  void EulerFromRot(Mat33 m, out double psi,
  2                             out double theta,
  3                             out double phi)
  4   {
  5    theta = Math.asin(m[0,2]) 
//using C# 0-based indexing!
  6    double costheta = Math.cos(th);
  7    if (Math.abs(costheta) == 0){
  8       phi = 0;
  9       psi = Math.atan2(m[2,1], m[1,1]);
10    }
11    else
12    {
13       phi = atan2(-m[0,1], m[0,0]);
14       psi = atan2(-m[1,2], m[2,2]);
15    }

It remains to verify that the values of θ, φ, and ψ determined produce matrices which, when multiplied together, really do produce the given rotation matrix M, but this is a straightforward computation.

Inline Exercise 11.3:

Write a short program that creates a rotation matrix from Rodrigues’ formula (Equation 11.17 below) and computes from it the three Euler angles. Then use Equation 11.14 to build a matrix from these three angles, and confirm that it is, in fact, your original matrix. Use a random unit direction vector and rotation amount in Rodrigues’ formula.

Aside from the special case where cos θ = 0 in the code above, we have a one-to-one mapping from rotations to (θ, φ, ψ) triples with –π/2 < θ ≤ π/2 and –π < φ, ψ ≤ π. Thus, the set of rotations in 3-space is three-dimensional.

In general, you can imagine controlling the attitude of an object by specifying a rotation using θ, φ, and ψ. If you change any one of them, the rotation matrix changes a little, so you have a way of maneuvering around in SO(3). The cos θ = 0 situation is tricky, though. If θ = π/2, for instance, we find that multiple (φ, ψ) pairs give the same result; varying φ and ψ turns out to not produce independent changes in the attitude of the object. This phenomenon, in various forms, is called gimbal lock, and is one reason that Euler angles are not considered an ideal way to characterize rotations.


If you can make sense of the above, you will be good with this book.  This sample is pretty typical of how things in this book are covered.  So if you are looking for a text for learning or brushing up on computer graphics Computer Graphics: Principles and Practices is probably one of the best.  With the exception of Physics, and library specific instructions, this book has pretty much everything you might need to know.

General Programming

30. June 2013


Some time back I purchased Codea for my iPad.  Codea is a Lua based game programming kit for creating iOS games on the iPad and frankly it’s really kinda cool.  That said, actually typing code on the device is a bit of a pain, so I looked coming up with an alternative.  It worked, but it certainly wasn’t ideal.  Today I was on the AppStore and I noticed Codea had an update and added something called Air Code, which allows you to connect to Codea using your web browser.


Using Air Code is really easy, in Codea on your iPad, open the side menu and select AirCode:



Then it will tell you the address to open in your browser.  Your computer and iPad need to be on the same network for this to work:



Open that address in your desktop browser and a list of your available projects will be displayed:



You then select the code file to edit and the editor appears:



As you code in the browser, it updates live on the iPad:



That is very very very cool.

Right now the editing functionality in the browser is quite limited.  It’s basically a text editor only now.  Hopefully in the future they add intellisense support and possibly debugging.  This is a very nice start though, and easily gets around the lack of keyboard support.  Nicely, this process doesn’t require a Mac either, any web browser should work fine.  Coding on one screen and seeing the changes reflect live on the other is actually a very intuitive way to code.

I did run into a small bug, in that focusing away from Codea to check email, when returning I could no longer connect via browser.  Shutting down and restarted Codea fixed the problem.

So, if you have an iPad and another PC and want to create games, Codea is a very cool product and worth checking out!

Programming News

28. June 2013

I have been following the Loom Engine since it was first publicly released.  I even did a five part guided tour of Loom Engine functionality, so this is one that I've been keeping an eye on.  One of the major aspects of Loom was it was layered over top of Cocos2D-x, for better or worse.

(Sadly, not that Loom)


In this release, that has has changed.


Loom Engine

The Loom Engine saw a huge amount of work this sprint. You will notice substantial gains in performance and stability.

We shifted to the new bgfx-based renderer this sprint, improving Loom2D performance substantially and setting the stage to support DirectX and other graphics APIs. Cocos2DX is now unsupported.

We have extended Loom2D with some new features and filled in some missing features: 
* You can specify z-sorting mode to have C++ sort large numbers of sprites for you. This is demonstrated in IsoVille.
center() method on DisplayObject to set the pivot point to the center of the DO.
* Keyboard input now works.
* Touch handling is much better.
* TMX loading/rendering works (now implemented in LS).
loom2d.animation package is ported.
* Text rendering/text input works!
* Hierarchical alpha works.

All package names are lower case now. If you run a sprint27 project under sprint28 you will see a lot of errors due to this; we recommend doing a replace-in-files to replace all your import Loom2D.Display. with import loom2d.display. and so on - this will get you up and running within minutes. Don't do it by hand unless you like menial labor! :)

Loom projects now inherit from loom.Application and do not require a any longer. Cocos2DApplication and Cocos2DGame and Application are all combined now.

Feathers is now a standard Loom library and available to use in your projects!

The profiler works, and also reports a lot of object allocation statistics. Use profilerEnable and profilerDump in the Loom console to start it and have it report results.

Porting Feathers (50,000 lines of AS3 code) drove major improvements to LoomScript. Wins include:
is/as/instanceof now are compliant with AS3/JS standards.
* Allow {foo: "bar"} style Dictionary literals.
* Added NaN and isNaN, and some useful constants on System.Number.
* Convenience for porting: try/catch/finally parse, but the catch/finally blocks are never run. throw triggers a Debug.assert. Vararg type specification is now allowed (but does nothing). new <String>[] syntax is now supported for initializing Vectors.
Array is now an alias for Vector.<Object>.
* Fixed crashes related to printing too-long strings with trace().
Vector.push() is now much more efficient for pushing a single item.
* You may reference properties via super, ie, super.x.
trim/split work properly now, and are much faster.
* Added Number.fromString.
* Added a Base64 utility class.
* ByteArray gains uncompress and the position property.
Stage gains a method to dump the DisplayObject hierarchy; it also has a bunch of nice new methods for dealing with scaling/native size.

Loom CLI

Loom CLI's loom new template was updated to use the new Loom2D APIs as well as package naming convention. Also the default Curse Font color was changed to Blue, as the white font tended to disappear on the default background.

We added new commands:
loom gdb Launches the current Loom project under gdb to help debug runtime crashes.
loom gdb compile Compiles the current Loom project under gdb to help debug compiler crashes.
loom android release Prepares a release-ready APK! It has options to set the keystore and signing settings.
loom init Set up the current directory to be a Loom project. Mostly useful for tool developers.
loom build android --unsigned was removed

You can add --verbose to any CLI command to get more log output.

CLI now explains why it asking for your system password to update on OSX.

So, Cocos2D is out and a custom C++ renderer is in.  Additionally they added support for the feathers UI library as well as TMX loading/rendering.  There are other changes as well as numerous bug fixes, mentioned in the release post.  Loom is no longer completely free, although they offer a free option and quite reasonable pricing.  Of course, if you signed up when I first linked it, it's still free for you.

News Programming

17. June 2013

Dreemchest, the Lua based cross platform 2D game engine (and GFS sponsor!) have just released RC147.  The biggest new feature has to be the ability to publish your game to the Flash player.  That said, there were a number of additional improvements including support for ads and in-app purchases, two features that are basically a game engine must have these days.  The complete list of announced new features is:

  • Composer preferences dialog
  • Built-in updater
  • Properties of type StageObject
  • Exporting iOS apps to IPA
  • iOS small icon inside project settings
  • InApp purchases
  • iAds advertisements
  • GameCenter
  • Cryptography
  • HTTP requests
  • Samples for Ads, GameNetwork, InAppStore, Swipe
  • Compressed bundle option for command line packager
  • Asset browser filters
  • OTF font extension
  • Breakout sample game
  • URLRequest sample project
  • Crypto sample project

Dreemchest is currently available as a free download for MacOS and Windows.  You can download RC147 right here.


11. June 2013

One man game development studios are becoming more and more common these days and plenty of them are having success.  That said, what do you do when that one man doesn't happen to be an artist?  This post looks at some of the options the Indie game developer has for creating or acquiring art for their game.


Pixel Art


Big chunky pixels that look like they jumped out of the 1980s are becoming more and more common and there is a good reason for it.  Creating Pixel art is easy, at least relative to other art styles.  Don't get me wrong, it still requires some artistic talent…  representing a complex object with a few blobs is certainly a skill.  That said, you can churn out a ton of pixel art in a very short period of time.  The downside to pixel art, if you don't like the aesthetic ( like me ), you are greatly limiting the appeal of your game.  


Pixel Art Example:


Realm of the Mad God

ROTMG Screenshot Combat


Realm of the Mad God is probably one of the most successful pixel art titles.  As you can see, it has a very simple aesthetic, harking back to games from the NES era… and possibly earlier.

If I am honest, far too many Indie titles are pixel art based… because it is probably the most accessible art style.  As a result, I am overwhelmingly sick of it.  It takes a hell of a lot of buzz to get me to even look at a game using this art style now.  Of course, that's just me… plenty of people still love pixel art, so you will have an audience.


Pixel Art Tools

At the end of the day, any image manipulation tool that supports a "fat grid" can be used.  A fat grid is a zoomed in view that shows each individual pixel extremely scaled up, as well as a view of the image at it's regular size.  This means your traditional raster graphic packages such as Photoshop, The GIMP and Paint.NET can all be used.  Of course, a great many (insane???) people just use Paint that comes with Windows!

Additionally a number of Pixel Art focused tools have been developed over the years as well.

Pyxel Edit -- in beta, written in Air

aseprite -- Allegro Sprite Editor.  In pixel art style itself

Pixelmator -- MacOS only raster graphics application.  A vastly cheaper alternative to Photoshop with pixel friendly tools

Grafx2 -- a free pixel art oriented graphic application inspired by Deluxe Paint.  Open source too if that's your thing

GraphicsGale -- available as shareware, another pixel art focused application

ProMotion -- another pixel oriented editor, this one is commercial and has been used to create several commercial games. Not sure about it's development status.

PD Pro -- commercial software.  A Photoshop alternative that is vastly cheaper than photoshop

UltimatePaint -- another Deluxe Paint derived painting app

Pixen -- another Mac only pixel editing app.  Beta is available free, otherwise its $15.


Frankly at the end of the day, any pixel based image editing tool will do.  Some of the above programs do make more complicated tasks like animating or lighting a great deal easier than just using Paint, so looking into a dedicated app is certainly worthwhile.  Oh, and if you are under 30, you may be wondering WTF Deluxe Paint is?  Simply put, it was THE 2D game art package for the Amiga.  I think it's safe to say that most games in the early 90s had their art drawn in Deluxe Paint!  Since those days, its become the benchmark of sorts for game art packages.




YouTube Video on pixel Art using GIMP

Pixel Art for games ( using Photoshop )

PixelJoint -- The sites all about pixel art and hosts a series of tutorials.

FinalBossBlues -- Another series of pixel art tutorials


My personal opinion… Pixel art is way overdone, I am sick of it and have to imagine many other people are as well.  That said, its the easiest art form for a non-artist to crank out.



Voxels are the pixel art of the 3D world.  Voxel is an amalgamation of the worlds VOLUME + Pixel.  So, basically they are a pixel with depth, which in every day parlance is what we call a cube.  Voxel worlds are made up of thousands and thousands of cubes… like a gigantic lego set.  Minecraft wasn't the first voxel game, not by a long shot ( there was a company called Novalogic that was obsessed with Voxels ), but it was easily the most popular.


Voxel Example:


Minecraft snapshot

Comanche Maximum Overkill ( 1992! )

Comanche92or 2


Voxel Tools

There are a number of tools available for editing voxels, some free, some not so free.

Voxel -- create Voxels on your iPad or iPhone.  Export in OBJ/MTL format or in Minecraft's .binvox format. Free

Sproxel -- free voxel editor.  Seems to have been abandoned in 2012.  Last version was Windows only, prior version available for MacOS. Free

Q-Block -- free, online, simple Voxel editor

Paint3D -- $20.  Windows application for editing voxels.

Zoxel -- I think its free.  Available for Linux and Windows, can export in OBJ.

Voxelogic Acropora -- Much higher end product than the above, for creating ultra high resolution landscapes.  Commercial, $90, with demo available

Cubicle Constructor -- Probably the most polished looking app of the above. Prices range from free to $80.


Personally, and this is just me, I've always hated voxels.  These days, a voxel game is going to look like a Minecraft clone as there were SOOOOO many Minecraft clones out there.  That said, Voxels work a lot like lego, so if you can create something visually impressive in lego, you can do the same in Voxels.


Vector Graphics

Vector graphics are increasingly common, as you can support multiple resolutions using a single art asset.  Since files are stored as a series of vectors, the image stays sharp regardless to how large or small it is scaled.  This can be a huge boon when supporting multiple resolutions especially with mobile devices.  In many ways, constructing an image using vector graphics is similar to working with construction paper.  You essentially layer shapes on top of other shapes to make more complex objects.  Working with vector graphics is a great deal more difficult than pixel art, but isn't outrageously difficult.


Vector Graphics Example:

Castle Crashers

Castle crashers 20100902050138751 001


Vector Graphic Tools

There are less vector graphic applications and some clear favourites when it comes to game creation.

Adobe Illustrator -- This is the Photoshop of vector graphics.  It's also got a LOT of stuff in their that you don't need, as the package was originally made for doing page layout in the print world.  Still probably the most used professional tool. Expensive! Only available by subscription now.

Adobe Flash -- Increasingly Flash is becoming more and more about game creation.  Flash Professional can be used to create and animate vector graphics, and commonly is!  Also expensive. Only available by subscription now.

Inkscape -- FREE!  Great free vector graphic package.  Very commonly used by those on a budget.

Corel Draw -- another commercial vector graphic package.  Targeted at the same market as Illustrator. Also expensive ( $500 )

iDraw -- Mac/iPad only, quite cheap ( 10$ iPad, 30$ Mac ).  I personally use this program.  More intuitive than Inkscape, simpler than Flash/Illustrator.  No timeline for animation though.


There are a couple 2D animation systems available as well.  You can draw your character once, cut them into pieces and let the software handle the animations.  Note that these tools work with regular bitmap graphics, not just vectors

2D IK animation tools

Spine -- 2D skeletal animation

Spriter -- another 2D animation tool


Vector Graphic Tutorials

2dgameartforprogrammers -- Has a ton of great vector graphic tutorials.  Be sure to check out the Apache Helicopter tutorial.

Gamasutra tutorial -- Same guy as above, great series.

Inkscape Tutorials -- A series of, you guessed it!  Inkscape tutorials.  Not necessarily game related, but techniques still apply


3D Art

I've been a hobbyist at 3D graphics for about as long as there has been an industry and even still, I can only JUST make art good enough for a game and even then I probably take 3x longer than an actual artist, and generate much lower quality work.  Don't kid yourself, 3D is as much a profession as programming.  It will take you years to learn to the point your results don't look like crap.  Don't worry, I wouldn't mention it if there weren't options for the less… talented.  I will discuss those in a second.


If you are interested in pursuing 3D, you can find a list of the most commonly used 3D applications right here.  Many of these applications have a price tag in the $5000 range.  However there is the freely available Blender package which is an incredibly capable 3D program for modelling, animating and texturing.  On the other hand, it isn't an easy application to get started with.  That is why I created this five part series, Blender for Programmers.  If you are interested in 3D, it is a good place to start.


3D for the less talented!

There are plenty of tools available with a much lower learning curve if you want to work in 3D.  This section mentions a few of them.

Poser -- Use existing character models.  Dress them up, animate and render or exports.  You can easily create animated characters using this application, and can buy a number of pre made assets if the existing content isn't enough for you.  Poser costs between $200 and $400, although it is quite commonly on sale.

Daz Studio Pro -- This program is a lot like Poser.  However it is free but comes with a lot less assets.  I did a tutorial on creating a sprite sheet with Daz and The GIMP if you want an idea what it is like.  That said, although Daz is free, they will spam you A LOT.  I still get two or three emails a week from them and it's not trivial getting yourself removed from the mailing list!

Make Human -- Create fully boned photorealistic humans with ease.  Oh, and it's free!  Used to be a Blender plugin, but now it's free.

Bryce -- Create stunning landscapes with basically zero effort or talent.  It's rather amazing the results you can get from this guy!

Sketchup -- Previously a google application for making 3D models for use in Google Earth.  There is a gigantic repository of models available for free.  If you need to create levels or cityscapes, this is a GREAT place to start.  There was a recent article on Gamasutra on exactly this.  Be careful with licensing issues though!


Sculpting Applications:

These applications are like working with 3D clay.  Even with little skill, you can make some remarkably awesome results.

Sculptris -- Free!  Baby brother of ZBrush.  Try it out, it's free.

ZBrush -- THE 3D sculpting application.  $700.

3D Coat -- In between Sculptris and ZBrush.  $350.  Often on sale on Steam, keep an eye. 

Mudbox -- Autodesk's sculpting application.  Most expensive in the list, $800.


Use existing assets

There are a HUGE number of assets available that you can buy or simply download online.  You should be able to source a ton of your assets this way.  The maxim You Get Way You Pay For isn't always true, but it often is!  On the other hand, simply because you paid for something doesn't make it good!  Working from many of these assets is tricky because they may not be suitable for games, may not be legally licensable, etc.  

 OpenGameArt -- a huge repository of game focused 2D and 3D art assets.

Blend Swap -- 8000+ freely available Blender Blend files.

Blender-Models -- Another Blender model resource

Mixamo -- 3d character model and animation on a pay per use basis.  Much like Bryce and Daz but online.  Upload your own model for animating, or buy one of theirs.

Content Paradise -- (paid) content for Poser.

Daz3D models -- (paid) content for Daz3D

Unity Asset Store -- if you use the Unity 3D package, there is a huge asset store of ready to drop in assets and scripts

Turbo Squid -- the biggest 3D object store.  Huge variety of content, quality and prices.

CGTrader -- buy and sell 3D assets.

GameTextures -- high quality game ready texture maps for sale.

There are a number of other asset stores available, this is just a small selection of the more common resources. 


Programmatic Art

Of course, you always have the option of creating a game that uses strictly programmatic art.  This is, art that is generated by an algorithm instead of an artist.


Programmatic Art Example


Rez ingame


Geometry Wars

Geometry wars galaxies 20070629054423884


Basically if you go this route, your art is in mathematic form.  On the one hand generating your game art algorithmically has the advantage of minimizing the need for artists.  On the other hand, it requires a completely different set of skills, especially when it comes to writing shaders!  Fortunately there are a few tools out there that help you create shaders visually.


Hire an Artist

Of course you may also decide at the end of the day you need an artist!  Obviously adding another person to your team can have a number of downsides…  you will lose a certain amount of creative control ( and should by the way!  Why are you working with an artist if you don't trust their artistic direction? ) over your baby.  Of course there is also a loss in either ownership or a cost involved.


Paying an artist, how?

This part is always tricky… how much does an artist cost?  Do you get what you pay for?  Will they work for free?  Will they work for a percentage?  How much of a percentage should I give?  What should I expect from an artist?  What should an artist expect from me?


To answer all of those questions, it depends.  It depends on so many things you can't give a simple answer.  Some games have much higher art requirements than others.  Some people have a budget and can pay for contract work, others do not.


The easiest and most likely most successful option is collaborating with an artist you know in real life.  Of course, this isn't always an option and can still lead to massive friction once things become about real money.  Make sure you establish the revenue split up front, and make sure fixed costs are accounted for before you start splitting up the pie.  Also be realistic that the pie may never actually arrive!

Contracting out pieces is a bit trickier.  Probably the simplest is to pay X amount per assets.  For example, pay 25$ for a textured tree model.  Working on bid work is by far the most straight forward, but you need to be very specific in what you need from the artist.  The more detail you can give, the better your relationship with go.  Instead of saying " I need a textured tree", say "I need a textured tree, under 300 polygons, a single texture no larger than 512x512 using a power of 2 resolution".  As to determining the cost X… well that is an art form in and off itself!

There is a good chance you have no money, and are willing to offer a percentage of future profits in return for labour.  If this is the route you are going, be VERY upfront about this, and don't pester people that aren't interested in such a work example.  The further along you are in the project, the more likely you will be to acquire a good artist.  If you can hand a game to someone with programmer art stand ins that the artist needs to replace, things will go a lot smoother.  If you've got an idea only… get further along before recruiting, unless you know an artist personally.  If you got an idea only… and that's all you've got ( no programming skills ) I would generally suggest not wasting anyones time.  In this day and age, amazingly enough, the idea is the LEAST important part of the process.  Everybody has the next killer game idea!  The reality is, its generally execution that makes a game great, not the idea.  Exceptions exist, but they are exactly that, exceptions.


Where to recruit artists?

Real life is obviously a great place, but not always or even often, an option.  Otherwise there are a number of places you can look for artists, often depending on the type of contract you are offering. -- They have a series of recruiting forums, for paid and unpaid work. -- Post your jobs, make sure to note paid/unpaid status.  Browse for artists looking for work -- job boards, contract board and hobby recruiting listings. -- Concept artists, not game artists, but theres an amazing amount of talent here. -- You get a WIIIIIDDDDDEEEE gamut of talent on this forum, many without game experience, but it is certainly another place to look, if even just to figure out payment amounts.  Forums are for paid work only! -- Game art focused forums, have sub forums for all kinds of hiring.



At the end of the day, relationships are CRITICAL.  The network of contacts you make will be one of the most valuable assets you can acquire.  Deal fairly with people, don't misrepresent yourself or your project and act professionally.  Even if you aren't paying, act professionally.  It will pay off massively in the long run.  Also keep in mind, every relationship is a two way street.  If you don't like working with an artist you contact walk away ( … if not in breach of contract! ), you will both benefit in the end.


Make as much clear up front as possible… revenue split, paid/unpaid, detailed specs, etc… the less ambiguity, the smoother things will go.  Oh, and never pay 100% up front, EVER!


This post on scratches the surface of what is out there.  As you can see, even if you don't have artistic talent, there are tons of options out there for you!  If I missed something you feel I should have included, let me know!



Art Design Programming

GFS On YouTube

See More Tutorials on!

Month List