What I’ve still been working on - trailer 2
Technorati Tags: puppy
A year ago, Polycount and CGChat had a game art competition to build a futuristic War General - The Dominance War. One year on, and the sequel is here.
I’ve not decided if I’ll enter yet. Hmm.
Inspired by a thread on Polycount about being an organised artist, I decided to post my tips there and here.
If you have any other suggestions on how I could become more organized and efficient in producing cg work, I would be much obliged.
Some general art tips:
A few other computer workflow tips:
Whilst browsing Polycount, dishing out advice with my uncalibrated moral compass, I stumbled upon a link to 3dCreature. You should pop along to it for a good look.
This website is aimed at being a quick stop-over for digital artists to check out cool art and update themselves on news that matter. The content on this site is mostly tailored towards character art. You can also find news about the games and film industry. Let’s just say that the content has been filtered and streamlined so you can surf more in less time.
Eric Elwell has a new tutorial online covering basic game lighting. It shows how a model is affected by the deafult and advanced lights in the Torque engine, and will be followed by a texturing tutorial to take advantage of this knowledge.
I think a lot of 3D artists overlook the power that scripting with their 3D application provides them.
“I’m an artist - so why do I care about scripting?” I hear you cry. Scripts are great for automating repetitive tasks, and you don’t need to be a superb programmer to take advantage of them. That being said, if you understand a few of the basic aspects of programming like loops and variables then scripting becomes even more powerful.
I predominantly use 3d Studio Max at work (along with Silo for modelling), and I’ve found that maxscript is relatively easy to learn. I’m not a Maya user, but I understand that it’s scripting language, Mel, is fantastic.
How about some examples of where scripting is useful?
I know that all the characters I build in my current project have the same bones, so rather than creating them from scratch each time, I have a script that loads them from an external file. After the bones are loaded, it creates 2 selection sets - 1 for all the bones (but no nubs), and another set with a drastically reduced bone list for the LOD model (no fingers, toes, helper bones or face bones for example). The script finds all the components that need a skin modifier applied, applies it and assigns the correct bone set (thats the benefit of a sensible naming convention for you).
I like all my renders to look the same, so I’ve written a render script - it loads a scene with my preferred lights, floor and camera, sets the background colour of the scene to be neutral and changes the lighting tint. It selects the camera, sets the output size, grabs the name of the model from the max filename so that it can name the image, then renders and saves the image to the same folder as the model. It also renders Front, Back and 3/4 views.
Sound useful? How about a batch script? It loads a list of models in turn and executes another script. So if I need to render out all my work, I just point my batch script at my models and tell it to execute my render script - then I can bugger off for a coffee, or leave it running overnight.
Setting up all your shaders? Press a button and maxscript converts all my max materials to shaders, with all the shader values set to our correct defaults.
So where do you start?
The best thing to do is to pick a simple task and try to script it. I learned to script not by doing abstract examples, but by just grabbing the bull by the horns and trying to write something useful. But where can I START? The first step?
3DSMax has a tool called the Maxscript Listener, which records almost everything you do in max. This is usually my first step - I open the listener, then I perform the entire task manually. The listener records all the steps (usually, sometimes the listener has selective hearing), and I can simply copy and paste them to a new script document where I can then edit until I’m content.
It’s worth mentioning that not just 3d applications that can have their workflow improved by scripts - Photoshop is a good example of a 2d package that allows you to create actions to automate repetitive actions - such as resizing and sharpening an entire folder of textures.
Resources:
These are a few things I could think of to help you along the way.
This tutorial is aimed at newcomers to modelling. It partially discusses a problem that I call “square modeling”. This is where a significant number of the polygons in a model are (nearly) perfect squares. I’m not taking about quads - they have 4 sides and 4 corners, but this doesn’t mean they are square.
Often when you start modeling you end up using more polygons than you need to define a shape, and you keep a lot of square edges. The most common mistakes that newcomers make is to create another row of edges (known as a loop) just to define a corner on one area of a mesh. The other new vertices and egdes that were created are not used to define the shape of the model, so in effect they are being wasted.
I must stress that sometimes leaving these extra polygons is a good idea - either for better use of textures when UV mapping, or for better lighting results. However, in most cases this extra geometry can be removed, or used to define more shape.
If its there, use it.
This is a very short and simple tutorial showing how I often see shape definition being done inefficiently, and describes a more elegant method. It deals SOLELY with shaping without excess geometry.
This tutorial is also aimed SOLELY at static parts of a model, not areas with joints that should deform. Joints are a case when keeping or adding geometry is very useful.
Firstly, lets get a simple shape with some angles on it. I’ve drawn a very simple pipe that has a slight kink in it, and a then surrounded it with a cube to block out the shape.
|
![]() |
| The initial sketch. | The initial sketch with a box surrounding the extents. |
Now that we have the basic box, lets make the shape.
Firstly, here is the way I often see it being done - the modeller looks at each angle individually, without considering the shape as a whole. Since they consider each angle individually, they construct each angle individually.
![]() |
![]() |
| The modeler creates a new row of edges for every angle on the object. There are 2 angles at each side (2 sides shown), making 4 new rows of edges. | Once the loops are created the vertices are pulled into shape. |
The model looks correct, and works perfectly. However, there are more polygons there than need to be. Only part of the geometry is used to define the overall shape, and some parts simply do nothing - the look like big squares. This is “square modeling”.
If you look at bottom left section of the second image above, you can see 4 vertices in a perfect vertical line. The middle 2 are serving no purpose. These are wasted. Where edges meet at 180 degrees, the connecting vert is often unnecessary - either give it a purpose of defining some shape, or simply remove it.
Lets have a look at another method to build the same shape, this time considering the shape as a whole, looking at volumes of mass.
![]() |
![]() |
| I create a new loop for every PAIR OF ADJACENT angles on the object. There are 2 angles at each side, so that is 2 new rows of edges, not 4 as before. | Once the new rows of edges are created the vertices are pulled into shape. |
The first thing to note is that the model also looks correct - it is exactly the same shape as before. However, there are less polygons than the first method. How many? Lets work it out.
We’ll have to make some assumptions:
In the first method, there were 5 rows, or 5 loops of quads. The pipe has 4 sides.
4 sides * 5 sections of quads * 2 (to convert quads to triangles) = 40 triangles/polygons.
In the second method, there were 3 sections, or 3 loops of quads.
4 sides * 3 sections of quads * 2 (to convert quads to triangles) = 24 triangles/polygons.
Method 2 uses almost HALF the number of polygons that method 1 uses.
This was a very simple tutorial based on a simple feature - a pipe - yet the same method works perfectly well on characters. With characters it can provoke a more organic flow.
As mentioned at the start, this tutorial is aimed SOLELY at static parts of model, not areas with joints that should deform. When you have a join, such as an elbow or a knee, you need to have those extra rows (loops). If you don’t have them, the model will collapse horribly during animation.
With some models, adding the extra geometry used in the first method will make the model much easier to UVmap, and may improve lighting - squares provide a better generic surface to calculate light and shadow over as they are based on 2 identical triangles.