This thread has some good advice about how to work with clean and organized scenes. Basically, it boils down to dividing your shot into multiple scenes, and then combining the rendered passes in compositing (among other things).
Wednesday, December 19, 2007
Saturday, November 10, 2007
L-Systems, part II
In the last post, we looked at L-Systems and the basic principles of an L-System. This time we will take a quick look at how to use that in computer graphics.
An L-System can based on a string of characters, as seen in the previous post. Now, consider the following statement:
An L-System can based on a string of characters, as seen in the previous post. Now, consider the following statement:
Each letter in this string represents an action.
Lets say that the system consists of three letters, D,R and L. Each of these letters represent an action.
D: Draw a line 1 unit long
R: Turn 90 degrees right. Do nothing else
L: Turn 90 degrees left. Do nothing else
So, the combination DRD would mean "Draw a line, turn right, and then draw another line in the new direction."
DRDRDRD would mean Draw a line, turn right, draw a line, turn right, draw a line, turn right and draw a final line. This would result in a cube.
Now, let's say we use rules to transform a string of these commands.
Example:
Starting string: DRD
Rules: D = D
R = DRDLDRD
L = DLDRDLD
As a small excerscise, draw the shapes DRD and it's "child" DDRDLDRDD.
As you see, small corners are added to each corner. For each generation, more corners are getting "cut out".
This is a simple start on how to use L-Systems for drawing. There are more advanced examples, and we will get back to those in a later post.
Lets say that the system consists of three letters, D,R and L. Each of these letters represent an action.
D: Draw a line 1 unit long
R: Turn 90 degrees right. Do nothing else
L: Turn 90 degrees left. Do nothing else
So, the combination DRD would mean "Draw a line, turn right, and then draw another line in the new direction."
DRDRDRD would mean Draw a line, turn right, draw a line, turn right, draw a line, turn right and draw a final line. This would result in a cube.
Now, let's say we use rules to transform a string of these commands.
Example:
Starting string: DRD
Rules: D = D
R = DRDLDRD
L = DLDRDLD
As a small excerscise, draw the shapes DRD and it's "child" DDRDLDRDD.
As you see, small corners are added to each corner. For each generation, more corners are getting "cut out".
This is a simple start on how to use L-Systems for drawing. There are more advanced examples, and we will get back to those in a later post.
Powered by ScribeFire.
Tuesday, November 06, 2007
L-Systems pt I
L-Systems are commonly used to create complex patterns and constructs.
This and following posts are my attempt to understand these L-Systems more.
First of all, what is an L-System?
An L-system consists of two parts (roughly speaking). A chain (or a text string) and rules.
The chain can consist of any pre-defined components. To demonstrate I will use a chain of letters. The string AABA could be such a chain.
The rules describe how this chain should change. For instance
A = A
B = AB
You let the chain grow or change by running it through the rules, one component at a time. Let's consider the example above:
Chain: AABA
Rules: A=A
B=AB
First run:
First letter: A, becomes an A
Second letter: A, becomes an A
Third letter: B, becomes AB
Fourth letter: A, becomes A
The result is A+A+AB+A = AAABA
Second run:
First letter: A, becomes an A
Second letter: A, becomes an A
Third letter: A, becomes an A
Fourth letter: B, becomes AB
Fifthletter: A, becomes A
The result is A+A+A+AB+A = AAAABA
In this example, the chain was put through the same set of rules twice. In theory an L-System could be run any number of times, applying the rules over and over again.
Which each iteration, the string evolves and changes according to the rules.
There are a couple of basic patterns that is worth mentioning.
The first one is where you add complexity in the middle of the string.
Example:
Chain: ABA
Rules A = AB, B = A
First run: AB+A+AB = ABAAB
Second run: AB+A+AB+AB+A = ABAABABA
Third run: AB+A+AB+AB+A+AB+A+AB = ABAABABAABAAB
and so on. As can be seen, the string grows longer, and more complex all the time.
Consider instead this string, and in this case, I'll use three letters. The basic principle is the same.
Chain ABX
Rules, A=A, B=B, X=ABX
First run A+B+ABX = ABABX
Second run: A+B+A+B+ABX = ABABABX
Third run: A+B+A+B+A+B+ABX = ABABABABX
In this example, the inner structure isn't changed, instead a tail is added to the end for each run. This is accomplished with a tail component that adds a string+the tail component for each run.
These L-systems can use an indefinite number of rules and components. I could have an L-System with all the letters of the alphabet and a multitude of rules, creating something very complex.
So, what can we do with this then?
This and following posts are my attempt to understand these L-Systems more.
First of all, what is an L-System?
An L-system consists of two parts (roughly speaking). A chain (or a text string) and rules.
The chain can consist of any pre-defined components. To demonstrate I will use a chain of letters. The string AABA could be such a chain.
The rules describe how this chain should change. For instance
A = A
B = AB
You let the chain grow or change by running it through the rules, one component at a time. Let's consider the example above:
Chain: AABA
Rules: A=A
B=AB
First run:
First letter: A, becomes an A
Second letter: A, becomes an A
Third letter: B, becomes AB
Fourth letter: A, becomes A
The result is A+A+AB+A = AAABA
Second run:
First letter: A, becomes an A
Second letter: A, becomes an A
Third letter: A, becomes an A
Fourth letter: B, becomes AB
Fifthletter: A, becomes A
The result is A+A+A+AB+A = AAAABA
In this example, the chain was put through the same set of rules twice. In theory an L-System could be run any number of times, applying the rules over and over again.
Which each iteration, the string evolves and changes according to the rules.
There are a couple of basic patterns that is worth mentioning.
The first one is where you add complexity in the middle of the string.
Example:
Chain: ABA
Rules A = AB, B = A
First run: AB+A+AB = ABAAB
Second run: AB+A+AB+AB+A = ABAABABA
Third run: AB+A+AB+AB+A+AB+A+AB = ABAABABAABAAB
and so on. As can be seen, the string grows longer, and more complex all the time.
Consider instead this string, and in this case, I'll use three letters. The basic principle is the same.
Chain ABX
Rules, A=A, B=B, X=ABX
First run A+B+ABX = ABABX
Second run: A+B+A+B+ABX = ABABABX
Third run: A+B+A+B+A+B+ABX = ABABABABX
In this example, the inner structure isn't changed, instead a tail is added to the end for each run. This is accomplished with a tail component that adds a string+the tail component for each run.
These L-systems can use an indefinite number of rules and components. I could have an L-System with all the letters of the alphabet and a multitude of rules, creating something very complex.
So, what can we do with this then?
Sunday, October 21, 2007
Wednesday, August 15, 2007
Interactive Creation in Maya
One of the things Autodesk introduced in Maya was the interactive creation. In it's normal workmode, that means that you click and drag on the grid to place and scale your object. However, there are some extra little details that can be worth remembering.
First of all, remember that planes and cubes are created differently than other primitives. With the first click, the corner is placed and then you drag out the other corner. With the other primitives, you place the center with the first click, and then drag out the radius.
If you press the control-button when creating a cube or a plane, it is placed as above, but when you drag out the height, it grows so that it's center is at the ground plane (as compared to having it's base on the ground plane normally).
If you press the shift-button when dragging (regardless of object) it is created equally large in all directions, and it's base rests on the ground plane.
Finally, Ctrl+Shift makes a cube behave just like the other primitives in that it is created with the same dimensions in all directions, and it's center is on the ground plane.
You can also double-click instead of click-and-drag, and that creates a primitive with size (for cubes and planes) or radius (for spheres and similar) 1 in all directions, with it's center on the ground plane at the spot you double clicked.
Another little nice detail: In the menu Create -> XXXX Primitives there is an option Exit on completion. If this option is unchecked, you don't leave the creation mode when a primitive is created. This way, you can rapidly create a large number of primitives just by clicking and dragging.
From Maya 8.5 there is also a tool option that let's you adjust different parameters after creation. Create -> Polygon Primitives -> Cube (as an example) and click the square to open the options window. There should be a heading After Creation Settings. If you activate Adjust Subdivisions, you can set the number of subdivisions by click and drag when you have created your primitive.
Finally, you can activate the Snapping-funtions to snap your primitives to a grid or a live object, for instance.
First of all, remember that planes and cubes are created differently than other primitives. With the first click, the corner is placed and then you drag out the other corner. With the other primitives, you place the center with the first click, and then drag out the radius.
If you press the control-button when creating a cube or a plane, it is placed as above, but when you drag out the height, it grows so that it's center is at the ground plane (as compared to having it's base on the ground plane normally).
If you press the shift-button when dragging (regardless of object) it is created equally large in all directions, and it's base rests on the ground plane.
Finally, Ctrl+Shift makes a cube behave just like the other primitives in that it is created with the same dimensions in all directions, and it's center is on the ground plane.
You can also double-click instead of click-and-drag, and that creates a primitive with size (for cubes and planes) or radius (for spheres and similar) 1 in all directions, with it's center on the ground plane at the spot you double clicked.
Another little nice detail: In the menu Create -> XXXX Primitives there is an option Exit on completion. If this option is unchecked, you don't leave the creation mode when a primitive is created. This way, you can rapidly create a large number of primitives just by clicking and dragging.
From Maya 8.5 there is also a tool option that let's you adjust different parameters after creation. Create -> Polygon Primitives -> Cube (as an example) and click the square to open the options window. There should be a heading After Creation Settings. If you activate Adjust Subdivisions, you can set the number of subdivisions by click and drag when you have created your primitive.
Finally, you can activate the Snapping-funtions to snap your primitives to a grid or a live object, for instance.
Friday, July 13, 2007
Constraints in Blender
Using constraints in Blender can be a bit of a hassle, but here is a method I have found works quite nicely.
The setup: You have got two objects, A and B. You want B to follow A around, but with the following conditions.
Select object B, that is, the "child" or "slave" object. Snap the 3d cursor to that object (shift-S).
Create an empty object at that place and give it an appropriate name. You may want to set it's rotation to the same as your object B.
Parent the empty object to object A. Finally, constraint B to the empty object (location, and rotation if needed). Voila!
The connection works like a parent-child-relationship, but where you can keyframe the weight. You can alter the offset by simply translating/rotating the empty object. And, since everything was set up at the "connection-point", there should be no sliding whatsoever when keyframing the weight-value.
With this setup it's also possible to make multiple connection, for instance, if you have an object handed over from one hand to another. Just make the setup twice, and keyframe the weight-values of each locRot-constraint-pair.
Easy and quite powerful.
The setup: You have got two objects, A and B. You want B to follow A around, but with the following conditions.
- The connection can be toggled on or off (that is: keyframed)
- The connection should work like a parent-child-relationship. If A rotates, B should rotate with A as it's centre.
- You want control over the offset between A and B
Select object B, that is, the "child" or "slave" object. Snap the 3d cursor to that object (shift-S).
Create an empty object at that place and give it an appropriate name. You may want to set it's rotation to the same as your object B.
Parent the empty object to object A. Finally, constraint B to the empty object (location, and rotation if needed). Voila!
The connection works like a parent-child-relationship, but where you can keyframe the weight. You can alter the offset by simply translating/rotating the empty object. And, since everything was set up at the "connection-point", there should be no sliding whatsoever when keyframing the weight-value.
With this setup it's also possible to make multiple connection, for instance, if you have an object handed over from one hand to another. Just make the setup twice, and keyframe the weight-values of each locRot-constraint-pair.
Easy and quite powerful.
Wednesday, September 13, 2006
Just a short quote I read today..
We should be taught not to wait for inspiration to start a thing. Action always generates inspiration. Inspiration seldom generates action.// Frank Tibolt
This applies to me a lot. I'm not always the most focused or persevering guy, and sometimes I have to reminde myself that real progress is done with hard work through tough times. Not easy always, but that's my aim
/McW
This applies to me a lot. I'm not always the most focused or persevering guy, and sometimes I have to reminde myself that real progress is done with hard work through tough times. Not easy always, but that's my aim
/McW
Tuesday, August 08, 2006
Short tip on "double constraining"
Posted by tfall on cgtalk regarding rigging an object so that two objects can control it independently of each other:
pointConstrain control A to control B. Then connect control C's translateX, translateY, and translateZ to the pointConstraint's offsetX, offsetY, and offsetZ respectively. Control B and control C will have independent control over the position of control A.
pointConstrain control A to control B. Then connect control C's translateX, translateY, and translateZ to the pointConstraint's offsetX, offsetY, and offsetZ respectively. Control B and control C will have independent control over the position of control A.
Tuesday, June 06, 2006
Speed Modelling
A picture I made for a speed modelling session on www.grafisktforum.org.3½ hours. Modelling done in Wings3d, posing and rendering done in Maya.
Thursday, May 25, 2006
Maya and shading
This guy http://www.digitalartform.com/has some interesting thoughts on shading like a painter.
Well worth a read.
Well worth a read.
Sunday, May 21, 2006
Fisherman's head
My latest little work. Modelled in Wings3d and rendered etc in Maya.Bump maps are used for details in the skin. A specularity map is used to make sure that only some parts of the modell is shiny. All maps ar made using the Paint Tool in Maya.
A single Fur Description is used for all hair, with the attributes painted in (Length and Baldness).
The eyes are made with Nurbs spheres with one of the poles pointing forward. The texture is a combination of ramps. The first one is the basic eye structure, going from black to blue, dark blue and then white. The blue part (the iris) is then made into a new ramp that basically is several bands going from darker to lighter blue. This ramp goes in the other direction compared to the first ramp.
Samt goes for the third ramp, which is mostly white with a couple of red/ white-red stripes going from the iris outward. Adding a slight level of noise gives makes for simple veins in the eye.
Tuesday, December 13, 2005
About collaborative work
Another quote, this time from Alchemist101, on the subject of collaborative works over the internet.
I've spent the last year getting involved in as many web based team projects as I can for experience.....
The best web collaboration projects that I have been involved in have all had a solid foundation. There has been someone firmly in charge, with a clear vision, a strong concept commited to paper, and of course, a lot of drive and determination.
The worst ones are always the ones where you get little direction and no concept work to start from. It sounds good if a project leader gives you artistic freedom to design and build a character, but it just doesnt work when you bring all the seperate elements together.
I dont want to sound like an ass here but when you are involved in a collaboration you can tell quite quickly whether its going to last the course or not. I have started models for team projects only to find out that the team leader is a 16 year old in his bedroom who thought it might be cool to do an animated movie - then realise that he had gone off the idea.
I think that if you wish to lead a collaborative project that involves other people then you should have completed an animated short by yourself, so that you know what your getting yourself into
I've spent the last year getting involved in as many web based team projects as I can for experience.....
The best web collaboration projects that I have been involved in have all had a solid foundation. There has been someone firmly in charge, with a clear vision, a strong concept commited to paper, and of course, a lot of drive and determination.
The worst ones are always the ones where you get little direction and no concept work to start from. It sounds good if a project leader gives you artistic freedom to design and build a character, but it just doesnt work when you bring all the seperate elements together.
I dont want to sound like an ass here but when you are involved in a collaboration you can tell quite quickly whether its going to last the course or not. I have started models for team projects only to find out that the team leader is a 16 year old in his bedroom who thought it might be cool to do an animated movie - then realise that he had gone off the idea.
I think that if you wish to lead a collaborative project that involves other people then you should have completed an animated short by yourself, so that you know what your getting yourself into
Some tips about joint orientation
This is a direct quote from seventy6ty on cgtalk.com, where he explains a little about joint orientations. I put it here for reference.
Well, different people have different preferences. The method I've adopted, after seeing the pipeline at R+H and Sony, is to have X pointed down the joint's axis, to be used for the twisting attribute. There is a general method that is even used in physical injury specialists, of having X being the twisting attribute of any joint. Then, using the Z-axis as the most commonly bending axis. So, on a knee, the Z-axis would be the one you use to bend it. On the shoulder, the Z-axis would be used to elevate the arm, etc. Then Y is used as the secondary rotation axis.
So on an abdomin, X would twist, Z would be front to back, and Y would be side to side twisting.
I still have yet to fully understand the xyz rotational axes evaluation. I usually just play with them a bit for each joint until I get it evaluating correctly, with the IK for that joint chain. The way I understand it, it actually goes backward, the z, in this case, being evaluated first, then the y which is it's parent, then the x which is the top parent of all these rotations.
Hope that helps a bit.
Well, different people have different preferences. The method I've adopted, after seeing the pipeline at R+H and Sony, is to have X pointed down the joint's axis, to be used for the twisting attribute. There is a general method that is even used in physical injury specialists, of having X being the twisting attribute of any joint. Then, using the Z-axis as the most commonly bending axis. So, on a knee, the Z-axis would be the one you use to bend it. On the shoulder, the Z-axis would be used to elevate the arm, etc. Then Y is used as the secondary rotation axis.
So on an abdomin, X would twist, Z would be front to back, and Y would be side to side twisting.
I still have yet to fully understand the xyz rotational axes evaluation. I usually just play with them a bit for each joint until I get it evaluating correctly, with the IK for that joint chain. The way I understand it, it actually goes backward, the z, in this case, being evaluated first, then the y which is it's parent, then the x which is the top parent of all these rotations.
Hope that helps a bit.
Thursday, December 01, 2005
Simpler version of the below
Deep colored shader

The goal was to make a shader that looks like something colored is buried within the dark, glossy surface, and this is what I ended up with after a few tries.
Basically it's a phong material with diffusion set low and a very sharp highlight. The out color is made out of the following nodes:
- A surface sampler node. The facing ratio is connected to...
- A ramp shader. It goes from black to green. Of course any color could be used.
- A noise texture is also used.
- The noise textures out-color is multiplied with the ramp shaders out color. The result is connected to the color channel of the phong material
This was just a very short description of how the material above was made, but hopefully it can give some ideas and inspiration on how to make shaders with that deep, multilayered look.
Friday, November 18, 2005
Ray of ice
First post
So, in order to increase my own productivity, and also to help other peopel by sharing what I've learned, I decided to start my own 3d-blog. The first tutorial will be uploaded shortly.
McWolfe
McWolfe
Subscribe to:
Posts (Atom)


