Labels

Monday, 28 November 2011

More Character Stuff

Here is some of the concepts I've developed over the last week. First of all, there are some mood boards and visual boards for the environment, the creature and the human character. 

 


Just a little bit on how these three tie together: 

While not entirely based on Earth, the world these characters come from is a much more mythical one, which the people, natures and the creatures are all very closely linked. Our limited story is that of a lone hunter/trader and his mount who roam the natural tundra-esque scapes of their world together. At the moment there is not much more than this - a visual style and a relationship established between the three. While the environment won't be a large part of my project as such, I'll try to incorporate a little of it into the final piece.

So here's the character stuff in it's current iterations. I've been just generating some ideas so I can jump to the next step.




Change of Direction...!

Although I've not been the best at keeping this blog up to date with my most current thoughts and progress on my project, it's appropriate to say that after crit week my project has had a change of direction, but not a complete change of heart. I've managed to channel the questions that intrigued and troubled me the most into a more suitable project.

Worrying about tackling the technical side of a technical artist was a great focus up to now, but I've always wondered - where does the "artist" of technical artist come into play? Why is it more suitable for a person with an artistic background (with a little bit of programming know-how) to be in this role rather than the reverse (a programmer who dabbles in art).

This could easily turn into some psychology project, but I'm going to steer it away less from the person and make it more about the role. What makes a technical artist? Why is it so diverse? Why is it so hard to define? Where can the technical artist express their arty side - the creative side? Is it purely about communication of ideas between groups? Can a technical artist be independent? Is it entirely a group effort role?

Now the characters I design will only be a vessel for showcasing my work, though it doesn't mean that detracts from their artistic integrity!

So watch this space while I update it with thoughts guiding me in my new direction. For now however, I better crack on with the work. Up and away!

Sunday, 20 November 2011

Character Stuff

So, it was suggested that I jump into sketching and sketch out some character concepts.
First of all, I looked at existing media for some inspiration. The idea behind this is that I would take an already imagined and fleshed out concept and adapt it to a style that suited me. I looked at myths, fairy tales and stories, but despite there being a wealth of these ideas out there, I found a lot of the actual characters in these stories to be mostly uninteresting. I watched Suzie Templeton's interpretation of Peter and the Wolf - a stop motion film made in 2006 and liked how she modernised the story slightly, as well as putting twists on it. The visual style was stunning, so I drew a sketch to explore the idea:



Ultimately though, I felt uncomfortable working with an idea that wasn't mine, and felt I might have already biased myself towards her remake - and therefore decided to ditch the idea. Overall, as I feel I have the freedom to do whatever I want creatively, the idea of limiting myself so early felt a bit disappointing, so I decided to ditch the idea altogether.


So my next step was to throw together some pictures of stuff I liked into a "style" board.

My problem was, I couldn't find a whole lot of examples for what I wanted it to look like! My main inspiration was Rango, Uncharted 3 and a showreel of a modeller called Ricardo Bonisoli. So instead of struggling finding what I wanted to achieve, I just set ahead and tried it out myself. What I wanted was something Amy Hennig (Creative Director of Naughty Dog) referred to as "stylised realism" - that is, something that is rendered realistically but can be stylistic in form, shape and all other aspects. Here's my interpretation.



Here I took an eye and tried to render some basic textures around it, like the reflection of the eye, the depth of the eyeball, the bumpiness of the skin, the soft and long wiry hairs around the face and the shiny flesh of the eyeball. I wanted to make it a little grittier than depicted here, but decided I was moderately happy with my result as a test.

Next step was to try and create some characters. After a little more soul-searching, I broke down the project into the things that I wanted to achieve technically and found that if I were to create a character (bipedal) and their mount (at least quadrupedal - if not something else) I could cover a lot of the aspects I wanted to create! Hair, fur, cloth, textures and a lot of nice rigging techniques could be included - as well as there being less of a struggle to establish a relationship between the characters through personality. It should be pretty obvious how they interact through their visual appearance this way, so I could make a set of characters that were consistent and interesting!

I thought about nomads travelling in the desert, and I threw together a little sketch:

Although I know that there is little development behind this sketch other than my thinking, it helped visualise the relationship and characters I was looking for, as well as lead me in a direction that I so badly needed. This should mean there should be less struggling from this point on. Onwards and upwards!

Change of direction

Sorry blog for not updating you in a while. The reason for this is I've had some feedback after crit that suggested that I change a lot of my direction. I'm still moving ideas and such about for a slightly revised set of aim and objectives, but in the meantime I have been keeping myself busy. Here is a dump of some of the stuff I've done so far:

First of all, I've been learning MELscript. While I've been taking notes and learning a lot of examples from the book, I'll list the examples I've worked on here.

//Create a sphere named "mySphere", catch the return value of the nodes (creation and translate), create arrays for translate, rotate and scale, catch the data and query the values of the translate,
//rotate and scale of the current sphere. Scale cannot be caught when it is absolute.
string $name = "mySphere";
string $names[] = `sphere -n $name -p 0 0 0 -ax 0 1 0 -ssw 0 -esw 360
-r 1 -d 3 -s 8 -nsp 4 -ch 1`;
float $trans[] = `xform -q -t $names[0]`;
float $rots[] = `xform -q -ro $names[0]`;
float $scls[] = `xform -q -s $names[0]`;
//print some of the values caught and queried
print $trans[1];
print $scls[2];
print $rots[0];


vector $vects = <<3.1,7.6,1.008>>;
print ($vects + "\n");
print (($vects.y + "\n");




string $name = "mySphere";
string $names[] = `sphere -n $name -p 0 0 0 -ax 0 1 0 -ssw 0 -esw 360
-r 1 -d 3 -s 8 -nsp 4 -ch 1`;
vector $tranV = `xform -q -t $names[0]`;
vector $rotV = `xform -q -ro $names[0]`;
vector $scalV = `xform -q -s $names[0]`;
string $name3 = "mySphereThree";
string $names[] = `sphere -n $name3 -p 0 0 0 -ax 0 1 0 -ssw 0 -esw 360
-r 1 -d 3 -s 8 -nsp 4 -ch 1`;
xform -ws -t ($tranV.x) ($tranV.y) ($tranV.z) -ro ($rotV.x) ($rotV.y) ($rotV.z)
-s ($scalV.x) ($scalV.y) ($scal.z) $names3[0];


proc cmMyProc ()
{
//These values will be used to translate the sphere:
int $num = 7;
float $dec = 3.267;
float $sum = $num + $dec;
//Declare variables contraining the primitive names
string $ball = "myBall";
string $box = "myBox";
//Create and translate the sphere using xform
string $sphereNodes[] = `sphere -n $ball -p 0 0 0 -ax 0 1 0 -ssw 0 -esw 360
-r 1 -d 3 -s 8 -nsp 4 -ch 1`;
xform -t $num $dec $sum $sphereNodes[0];
//Create and translate the cube by querying the sphere translations
string $cubeNodes[] = `polyCube -n $box -w 2 -h 2 -d 2 -sx 1 -sy 1 -sz 1 -ax 0 10 0 -cuv 4 -ch 1`;
vector $tranV = `xform -q -t $sphereNodes[0]`;
xform -ws -t ($tranV.x) ($tranV.y) ($tranV.z) $cubeNodes[0];
select -cl;
}
//Run the procedure
cmMyProc;


proc string[] cmMyProc (int $num,float $dec,string $ball,string $box)
{
    float $sum = $num + $dec;
   string $sphereNodes[] = `sphere -n $ball -p 0 0 0 -ax 0 1 0 -ssw 0
   -esw 360 -r 1 -d 3 -s 8 -nsp 4 -ch 1`;
   xform -t $num $dec $sum $sphereNodes[0];
   string $cubeNodes[] = `polyCube -n $box -w 2 -h 2 -d 2 -sx 1 -sy 1
   -sz 1 -ax 0 1 0 -cuv 4 -ch 1`;
   vector $tranV = `xform -q -t $sphereNodes[0]`;
   xform -ws -t ($tranV.x)($tranV.y)($tranV.z) $cubeNodes[0];
   select -cl;
   string $names[] = {$sphereNodes[0],$sphereNodes[1],
   $cubeNodes[0],$cubeNodes[1]};
   return $names;
}
string $return[] = cmMyProc (7,3.267,"myBall","myBox");
print $return;


//Global procedure to query xforms of targetm and return xform string
global proc string cmQryXforms (string $target,string $constrain)
{
    //Query all three transforms
    float $cmQueryTrans[] = `xform -q -t $target`;
    float $cmQueryRot[] = `xform -q -ro $target`;
    float $cmQueryScale[] = `xform -q -s -r $target`;
    //Create strings that can be combined in a final xform command
    string $string1 = (" -t " +$cmQueryTrans[0]+ " " + $cmQueryTrans[1] + " " + $cmQueryTrans[2]);
    string $string2 = (" -ro " +$cmQueryRot[0]+ " " + $cmQueryRot[1] + " " + $cmQueryRot[2]);
    string $string3 = (" -s " +$cmQueryScale[0]+ " " + $cmQueryScale[1] + " " + $cmQueryScale[2] + " ");
    //Combine the strings into the final xform command, and return
    string $return = ("xform " + $string1 + $string2 + $string3 + $constrain + ";");
    return $return;
}


//Run the procedure, catch the return, and print final xform command
 string $xformGo = cmQryXforms ("myBall", "myBox");
print ($xformGo + "\n");


//Local procedure to use as xform tool to transform objects to target
proc cmXformTool ()
{
 //List the selected transforms nodes:
 string $selTrans[] = `ls -sl`;
 string $target = $selTrans[0];
 string $constrain = $selTrans[1];
    //Query all three transforms
    float $cmQueryTrans[] = `xform -q -t $target`;
    float $cmQueryRot[] = `xform -q -ro $target`;
    float $cmQueryScale[] = `xform -q -s -r $target`;
 //Create strings that can be combined in a final xform command
    string $string1 = (" -t " +$cmQueryTrans[0]+ " " + $cmQueryTrans[1] + " " + $cmQueryTrans[2]);
    string $string2 = (" -ro " +$cmQueryRot[0]+ " " + $cmQueryRot[1] + " " + $cmQueryRot[2]);
    string $string3 = (" -s " +$cmQueryScale[0]+ " " + $cmQueryScale[1] + " " + $cmQueryScale[2] + " ");
 //Combine the strings into the final xform command, and return
 string $xformGo = ("xform " + $string1 + $string2 + $string3 + $constrain + ";");
 select -cl;
 eval ($xformGo);
}
//Run the procedure
cmXformTool;


//Local procedure to use as xform tool to transform objects to target
proc cmXformTool ()
{
 //List the selected transforms nodes:
 string $selTrans[] = `ls -sl`;
 //Error check for selection
 int $sizeSelect = `size ($selTrans)`;
 if ($sizeSelect != 2)
  error "Select a target object followed by an object to constrain.";
 string $target = $selTrans[0];
 string $constrain = $selTrans[1];
    //Query all three transforms
    float $cmQueryTrans[] = `xform -q -t $target`;
    float $cmQueryRot[] = `xform -q -ro $target`;
    float $cmQueryScale[] = `xform -q -s -r $target`;
 //Create strings that can be combined in a final xform command
    string $string1 = (" -t " +$cmQueryTrans[0]+ " " + $cmQueryTrans[1] + " " + $cmQueryTrans[2]);
    string $string2 = (" -ro " +$cmQueryRot[0]+ " " + $cmQueryRot[1] + " " + $cmQueryRot[2]);
    string $string3 = (" -s " +$cmQueryScale[0]+ " " + $cmQueryScale[1] + " " + $cmQueryScale[2] + " ");
 //Combine the strings into the final xform command, and return
 string $xformGo = ("xform " + $string1 + $string2 + $string3 + $constrain + ";");
 select -cl;
 eval ($xformGo);
}
//Run the procedure
cmXformTool;


/*




BOOLEAN SCRIPTS AHEAD - USE WITH CAUTION




*/


float $A = 7.2;
float $B = 3.5;
if ($A > $B) print "A is greater than B!\n";


//randomises and checks numbers
$A = `rand 0 10`;
$B = `rand 0 10`;
 print ("A is " + $A + "\n");
 print ("B is " + $B + "\n");
if ($A > $B) print "A is greater than B!\n";
else print "A is less than B!\n";


/*Set procedure argument to 1 or 0:
 Note!: Rands #s, 0 = Both 0 */


proc string cmCondition (int $change){
//Use condition to determine values:
float $A;
float $B;
if ($change == 1) {
 $A = `rand 0 10`;
 $B = `rand 0 10`;
}
else {
 $A = 0.0;
 $B = 0.0;
}
//Print values inside variables:
 print ("A is " + $A + "\n");
 print ("B is " + $B + "\n");
//Runs three conditionals to compare values:
 string $return;
 if ($A > $B) $return = "A is greater than B!";
 else if ($A == $B) $return = "A is equal to B!";
 else $return = "A is less than B!";
return $return;


}


//Run procedure:
string $result = cmCondition (0);
print ($result + "\n");


//Change the integer value in the procedure argument:
proc string cmfindNum (int $num) { //Open Procedure...
 //Run warning if numbers are not 5, 10, 15 or 20:
  if (($num != 5) && ($num != 10) && ($num != 15) && ($num != 20));
   warning "Input a multiple of 5 under 25!";
  //Run switch statement to set string return
  string $return;
  switch ($num) {//Open switch...
   case 5:
    $return = "Your number is 5.";
    break;
   case 10:
    $return = "Your number is 10.";
    break;
   case 15:
    $return = "Your number is 15.";
    break;
   case 20:
    $return = "Your number is 20.";
    break;
  } //Close switch
 return $return;
 } //Close procedure.
//Run procedure to catch return and print:
string $result = cmfindNum (1);
print ($result + "\n");




//Change the short primitive name in the procedure argument:
proc string[] cmCreatePrim(string $primitive){ //Open procedure...
//Run warning if numbers are not 5,10,15 or 20.
 if (($primitive != "sph") &&
  ($primitive != "cub") &&
  ($primitive != "con") &&
  ($primitive != "cyl"))
  warning "Use short primitive name (sph, cub, con, or cyl).";
//Switch statement to create prim and set string array return
 string $return[];
 switch ($primitive) {//Open switch...
 case "sph":
  $return = `sphere`;
  break;
 case "cub":
  $return = `polyCube`;
  break;
 case "con":
  $return = `polyCone`;
  break;
 case "cyl":
  $return = `cylinder`;
  break;
 } //Close switch
return $return;
} //Close procedure
//Run procedure to catch return array and print:
string $names[] = cmCreatePrim ("sph");
print ("Nodes created: " + $names[0] + "," + $names[1] + "\n");


//While Loop example creating sphere;
int $i = 0;
while ($i <= 10)
{
 string $name = "mySphere";
 string $names[] = `sphere -n $name -p 0 0 0 -ax 0 1 0 -ssw 0 -esw 360
  -r 1 -d 3 -s 8 -nsp 4 -ch 1`;
 setAttr ($names[0] + ".ty") $i;
 select -cl;
 $i = $i + 2;
} //Close Loop.


//Shift select primitives to delete history and freeze:
string $selObjs[] = `ls -sl`;
for ($obj in $selObjs){ //Open Loop
 delete -ch $obj;
 makeIdentity -apply true -t1 -r 1 -s 1 -n 0 $obj;
} //Close loop.
Other than that I've been writing a bit of my own scripts. Here are two such scripts. The first was written by myself entirely, and the second I got the help from Neil McNaughton of Ruffian to help write the code and talk me through it. :)


//////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
//     This script creates a no-flip knee setup for your bipedal character.
//
//     How to run this script:
//      1.Load the script
//      2. Specify right or left side with "ikNoFlipKnee right" or ikNoFlipKnee left"
//      3. Have Fun!
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////


global proc ikNoFlipKnee(string $legSideLong)
{


 //RECORD ERRORS IN THIS VARIABLE
 int $legWarning = 0;  // 0 = No Errors
       // 1 = Error Found


 // DETERMINE WHETHER LEFT OR RIGHT LEG IS CURRENTLY BEING SETUP
 // CHECK TO ENSURE ARGUMENT IS CORRECT
 string $legSide;
 if (($legSideLong != "left") && ($legSideLong != "right"))
 {
  $legWarning = 1;
  warning "Unkown argument. Please specify either left or right. ie: cgTkSetupLeg left; \n";
 } else
 {
  if ($legSideLong == "left")
  $legSide = "l";
  if ($legSideLong == "right")
  $legSide = "r";
 }


 // CHECK TO ENSURE THAT ALL REQUIRED OBJECTS EXIST IN THE CURRENT SCENE
 if ($legWarning == 0)
 {
  if (!( (`objExists ($legSide + "Hip")`)
   &&  (`objExists ($legSide + "Knee")`)
   &&  (`objExists ($legSide + "Ankle")`)
   &&  (`objExists ($legSide + "Ball")`)
   &&  (`objExists ($legSide + "Toe")`)
   &&  (`objExists ($legSideLong + "FootController")`)))
  {
   $legWarning = 1;
   warning "Unable to find all required objects to setup leg. Please ensure all objects are named properly. \n";
  }
 }


 //IF NO ERRORS ARE ENCOUNTERED, CONTINUE WITH SETUP
 if ($legWarning == 1)
 {
  warning "The leg setup has encountered an error. Check script editor for details. \n";


 } else
 {
  print "All prerequisites were found. Setup will continue. \n";


  }


  //ORIENT THE JOINTS
select -r ($legSide + "Hip");
joint -e  -oj xyz -ch -zso;


//CREATE IK HANDLE


select -r ($legSide + "Hip");
select -tgl ($legSide + "Ankle");
ikHandle -n ($legSide + "KneeIK") -sol ikRPsolver -s 0;


//ADJUST POLE VECTOR


select -r ($legSide + "KneeIK");
setAttr ($legSide + "KneeIK.poleVectorX") 0.1;
setAttr ($legSide + "KneeIK.poleVectorY") 0;
setAttr ($legSide + "KneeIK.poleVectorZ") 0;
setAttr ($legSide + "KneeIK.twist") 90;


//MOVE FOOT CONTROLLER TO POSITION


//ADD ATTRIBUTES TO FOOT CONTROLLER (including offset)
select -r {$legSideLong + "FootController"};
addAttr -ln Knee -at "float" -k 1 -r 1 -w 1;
addAttr -ln Offset -at "float" -k 1 -r 1 -w 1;


//FREEZE TRANSFORMS AND DELETE HISTORY OF FOOTCONTROL


//select -r ($legSideLong + "FootController");
FreezeTransformations;
DeleteHistory;


//CREATE PLUS MINUS AVERAGE NODE


shadingNode -asUtility plusMinusAverage -n ($legSide + "LegIKPlusMinus");


//CONNECT NODES UP


connectAttr -force ($legSideLong + "FootController.Knee") ($legSide + "LegIKPlusMinus.input1D[0]");
connectAttr -force ($legSideLong + "FootController.Offset") ($legSide + "LegIKPlusMinus.input1D[1]");
connectAttr -force ($legSide + "LegIKPlusMinus.output1D") ($legSide + "KneeIK.twist");


//SET, LOCK AND HIDE OFFSET


select -r ($legSideLong + "FootController");
setAttr ($legSideLong + "FootController.Offset") 90;
setAttr -lock true -keyable false -channelBox false ($legSideLong + "FootController.sx");
setAttr -lock true -keyable false -channelBox false ($legSideLong + "FootController.sy");
setAttr -lock true -keyable false -channelBox false ($legSideLong + "FootController.sz");
setAttr -lock true -keyable false -channelBox false ($legSideLong + "FootController.v");
setAttr -lock true -keyable false -channelBox false ($legSideLong + "FootController.Offset");


//CREATE IKS FOR REST OF FOOT


select -r ($legSide + "Ankle");
select -tgl ($legSide + "Ball");
ikHandle -n ($legSide + "AnkleIK") -sol ikSCsolver -s "sticky";


select -r ($legSide + "Ball");
select -tgl ($legSide + "Toe");
ikHandle -n ($legSide + "FootIK") -sol ikSCsolver -s "sticky";


//ATTACH FOOT CONTROLLER


parent ($legSide + "KneeIK") ($legSideLong + "FootController");
parent ($legSide +  "AnkleIK") ($legSideLong + "FootController");
parent ($legSide + "FootIK") ($legSideLong + "FootController");


select -r ($legSideLong + "FootController");


//LET USER KNOW SCRIPT HAS BEEN RUN


print ("The " + $legSideLong + " no-flip knee has been created.");

And the second script:


// generate a random set of transform data  
float $tMin = 1.0;
float $tMax = 12.0;
float $tRand[] = {rand($tMin, $tMax), rand($tMin, $tMax), rand($tMin, $tMax)};
float $rMin = 1.0;
float $rMax = 359.0;
float $rRand[] = {rand($rMin, $rMax), rand($rMin, $rMax), rand($rMin, $rMax)};
float $sMin = 0.4;
float $sMax = 2.0;
float $sRand[] = {rand($sMin, $sMax), rand($sMin, $sMax), rand($sMin, $sMax)};


// make a sphere
string $buffer[] = `sphere`;
string $randomSphere = $buffer[0];


// set the random values into the sphere's transform
xform -ws -t $tRand[0] $tRand[1] $tRand[2] -ro $rRand[0] $rRand[1] $rRand[2] -s $sRand[0] $sRand[1] $sRand[2] $randomSphere;
 
// create a new default sphere that we can use to snap to the random one
string $buffer[] = `polySphere -n "copyCatObject"`;
string $copyCatObject = $buffer[0];


// query the position/rotation/scale of the random sphere and store values
float $trans[] = `xform -q -t $randomSphere`;
float $rots[] = `xform -q -ro $randomSphere`;
float $scls[] = `xform -q -s $randomSphere`;


// set the position/rotation/scale of the copyCatSphere to match the random sphere
xform -ws -t $trans[0] $trans[1] $trans[2] -ro $rots[0] $rots[1] $rots[2] -s $scls[0] $scls[1] $scls[2] $copyCatObject;
}


I've also been doing some character stuff and rigging trials. Might record these in action and post them up later.

Wednesday, 9 November 2011

Although I've not been the best at keeping this blog up to date with my most current thoughts and progress on my project, it's appropriate to say that after crit week my project has had a change of direction, but not a complete change of heart. I've managed to channel the questions that intrigued and troubled me the most into a more suitable project.

Worrying about tackling the technical side of a technical artist was a great focus up to now, but I've always wondered - where does the "artist" of technical artist come into play? Why is it more suitable for a person with an artistic background (with a little bit of programming know-how) to be in this role rather than the reverse (a programmer who dabbles in art).

This could easily turn into some psychology project, but I'm going to steer it away less from the person and make it more about the role. What makes a technical artist? Why is it so diverse? Why is it so hard to define? Where can the technical artist express their arty side - the creative side? Is it purely about communication of ideas between groups? Can a technical artist be independent? Is it entirely a group effort role?

Now the characters I design will only be a vessel for showcasing my work, though it doesn't mean that detracts from their artistic integrity!

So watch this space while I update it with thoughts guiding me in my new direction. For now however, I better crack on with the work. Up and away!

Tuesday, 8 November 2011

Project Proposal

Although it may look like I've been doing very little for the last week or so, I've actually been writing up the proposal (for module AG1064A) for my project, which will hopefully share a lot in common with the proposal that is being produced for AG1086A.

While the proposal for AG1064A is currently being drafted, I thought I might upload a version of it to show the general direction of my project. Though this is subject to change, it is a good way of seeing how my project has developed over time and how feedback given has been addressed.

The documents can be seen by clicking on the links listed below:


Project Proposal
Learning Contract
Project Gantt Chart

Crit Sessions

I know I've not posted in my blog for a while, but there is more to come - I promise! For now, I'm just going to cover the crit sessions I supervised today and my thoughts and feelings on how it went:

Once again, it was the same setup as last time. There were six students in total to go through in a two hour period and the session was supervised by myself and another fourth year student.

Compared to the previous pitch session, I felt I had more control and was more confident speaking to students about their work. I felt it was easier to offer critique this time, perhaps because the students had further developed their ideas and had work to go along with it. I tried as best I could to keep a student on track with what is required of their unit at the end of the day. The advice that was offered tended to be a lot more generalist rather than focus on singular modules and problems within them (though any serious issues were addressed when possible). I made sure to inform students where I thought they were doing well, but also give them advice and tasks to work towards. I also noticed that students tended to be stuck on small details rather than seeing the bigger picture or were struggling with technical issues rather than artistic ones. While it is equally important to understand technique and trying to learn key skills, it is crucial to develop artistic skills too.

For the pitch session, I watched the time and made sure that each student did not exceed their 20 minute slots but in the end there was half an hour to spare. I felt that I cut the students short so on this session I was more liberal when it came to watching the time, as I had hoped that it would work out better. Unfortunately, it turned out that we ran about 30 minutes over the limit, so next time I will endeavour to make sure that the students have a 20 minute slot and must manage their time accordingly.

Another issue I experienced was understanding the student's distinct modules and their deliverables. It would have helped if they were to prepare a powerpoint covering their modules, what they have to deliver and any previously covered content summarised, as not to waste time going over concepts which we already know (unless things have changed). This also might have fixed the issue of a lot of the work being viewable on the current computers. I advised the students to take screenshots of their work in progress so critique and advice can be given. Next time, the students should be more prepared with backups and work saved in common file formats which can be viewed on any computer.

Overall, I felt a lot more confident this time giving advice and guidance to the students both for general work and specific problems. I also felt that I offered them reasonable solutions, told them to scale back or return to an idea when they should or encourage them to work in a particular direction appropriately. However, I did make sure that the advice given to them was not concrete, and any major changes, decisions or problems in their work should be discussed with their module or personal tutor first. I also offered them help with Maya in particular in the Maya software clinics, so that I could help them out 1:1 with any technical issues they may have in their work.

Sunday, 30 October 2011

Gnomon Workshop & Other Learning DVDs

To supplement the books and papers, I'm going to also look at and reference Gnomon Workshop and Digital Tutor DVDs to develop my practical knowledge and skills, such as:


  • MEL 101: Fundamentals: MEL Programming Techniques with Kevin Mannens
  • Character Design Pipeline: Production Art & Research Techniques with BARONTiERi
  • Character Rigging: The Puppet Rig - Maya Rigging Techniques with Carlo Sansonetti
  • Maya Cloth 101: Fundamentals: Cloth Techniques with Mark E.A. de Sousa
  • The Skinned Character Rig: Skinning and Deformations with Carlo Sansonetti
  • Stylized Character Modeling for Production with Alessandro Baldasseroni
  • Character Modeling for Production: Character Modeling Techniques with Ian Joyner
  • Character Texturing for Production: Texturing techniques with Ben Neall (if I can get it)
  • Creature Texturing and Rendering for Production: Texturing Techniques with Laurent Pierlot

Books & such

While not so much a reference list and more of a bibliography, here is a few books that I own that will hopefully provide some information through my proposed project:

"Body Language: Advanced 3D Character Rigging" by Eric Allen and Kelly L. Murdock

"Art of Toy Story 3" by Charles Solomon and John Lasseter

"The Ballad of Rango: The Art & Making of an Outlaw Film" by David S Cohen and Gore Verbinski

"The Cinematic Art of World of Warcraft: Wrath of the Lich King" by Blizzard Entertainment

"ZBrush Character Creation: Advanced Digital Sculpting" by Scott Spencer

I also hope to gain some up-to-date and current knowledge from watching the making-of sections of DVDs like
How to Train A Dragon
Up
Despicable Me
Toy Story 3
Rango
Alice in Wonderland
Narnia: The Witch and the Wardrobe
etc...

A mix of animated features and CGI/live action films will hopefully give me a decent understanding of what happens underwear the bonnet at many animation/CGI graphics studios.

I also have a subscription to Game Develop Magazine and ImagineFX, which should be a great source of information and help throughout the year.





This is just a start to the resources I have on hand. I hope to frequently update this blog with a list of suitable media throughout my project.

Some work

While I've been researching for my proposal, I've been trying to brush up on my practical skills. I recently got a book titled "MEL Scripting a Character Rig in Maya" by Chris Maraffi.



As I'm learning a brand new skill, I've only been following the examples in the book. The code I've written is the code found within the first chapters, but I have annotated it with comments to help me understand it better. I've also written a supplementary "cheat sheet" of commands and more general advice. Here's what I've done so far:


/*
Defining, Querying and Editing Variables
*/
//defined variables
int $num = 7;
float $dec = 3.267;
string $name = "mySphere";
int $nums[];
float $decs[5] = {7.23,1.0,20.7,0.567,12.0};
string $names[] = {"One", "Two", "Three"};
sphere -n $name -p 0 0 0 -ax 0 1 0 -ssw 0 -esw 360 -r 1 -d 3
-s 8 -nsp 4 -ch 1;
string $names[] = `sphere -n $name -p 0 0 0 -ax 0 1 0 -ssw 0
-esw 360 -r 1 -d 3 -s 8 -nsp 4 -ch 1`;
//print nodes
print $names;
//defining queryable variables
int $spans = `sphere -q -nsp $names[1]`;
int $radius = `sphere -q -r $names[1]`;
//query and print number of spans in sphere and the radius through the
//command node
print ("Number of spans: " + $spans + "\n");
print ("Radius: " + $radius + "\n");
//looks at sphere command and edits the radius to match the number of spans
sphere -e -r $spans $names[1];


/*
Defining the Selected Node and making it a variable
*/
string $selNodes[] = `ls -sl`;
print $selNodes;
/*
Selecting multiple nodes
*/
string $names[] = `sphere -n $name -p 0 0 0 -ax 0 1 0 -ssw 0
-esw 360 -r 1 -d 3 -s 8 -nsp 4 -ch 1`;
select -tgl $names[1];
string $selNodes[] = `ls -sl`;
print $selNodes;
/*
Change Get Value of X scale and set it as Y translate
*/
string $names[] = `sphere -n $name -p 0 0 0 -ax 0 1 0 -ssw 0
-esw 360 -r 1 -d 3 -s 8 -nsp 4 -ch 1`;
getAttr ($names[0] + ".sx");
setAttr ($names[0] + ".ty") 5;
/*
Catch sections attribute and set spans attirbute to match
*/
string $names[] = `sphere -n $name -p 0 0 0 -ax 0 1 0 -ssw 0
-esw 360 -r 1 -d 3 -s 8 -nsp 4 -ch 1`;
int $sections = `getAttr ($names[1] + ".s")`;
setAttr ($names[1] + ".nsp") $sections;
//Creates a new attribute that has a long name, short name and nice name, with a floating value
//that is keyable, minumum value of -10, maximum value of 10, default value of 0, readable and writeable
//affecting the tranform node of $names, i.e. Sphere.
addAttr -ln "myAttr" -sn "ma" -nn "My Attribute" -at "float"
-min -10 -max 10 -dv 0 -k 1 -r 1 -w 1 $names[0];

Cheat Sheet:


List of Useful MELScript Commands:
` = catches a return value
select -cl; = clears selection
select -r; = select node
select -tgl; = toggles a node
listAttr; = list all attributes on a node
getAttr; = query or get information on an attribute
setAttr; = edit or set information on an attribute
".sx" = define attribute (note flag here is short name for scale x)
EXAMPLE
getAttr ($names[0] + ".sx");
-k/-keyable =
EXAMPLE
//lists all keyables attributes on the transform node of the object
listAttr -k $names[0]
help = synopsis of the command
whatIs = tells if command is a procedure found in the MELscript folder when loaded
float = decimal number, may be also referred to as length/double
int = integer
string = text
vector/matrix = groups of numbers
"on"|"off" = "true"|"false". 1|0
rename = gives object new name
"/n" = new line
/* |
Hello World |= Block comment
*/ |
//Hello World = single line comment
[define type of flag] [variable name] = [result]
EXAMPLE:
int $num = 7;
OR
string $selNodes[] =  `ls -sl`;
xform = consolidate multiple types of transforms with one command

Wednesday, 26 October 2011

Outside inspiration

Outside of art, my inspiration comes from many things, such as ancient culture, architecture, myths & legends, sculpture, etc... Here is an example of some of my general inspirations...

 Ancient Culture & History

Ancient dead civilisations like the aztecs, the egyptians, the mayans, greek, romans, etc... are wonderful examples of the development of humanity over time, either through art, architecture and/or culture. They are brilliant sources of inspiration, for creating stories and art. Often, these cultures are closely linked with myth and legends - the source of all modern storytelling. Because of this, I often draw inspiration from these, though sometimes it may only be aethestic. Often myths were inspired from things the cultures did not understand (such as the day/night cycle or natural phenomenoms like extreme weather) and this primal need to tell a story round anything is what draws me to their stories...






Nature & the Natural World

A lot of my fascination is drawn from the living world around me, from plants to animal life. While this may seem a little generic or open, there is not a single source of inspiration I can point to for this. The way things move, the habits of creatures, the natural beauty of the world, geography, geology, etc...are all inspiring.
In particular, I am drawn to other forms of life, such as animals, reptiles & birds. A lot of my previous work draws from these sources.








Ancient Storytelling & Myth

As mentioned above, stories were humanity's way of trying to understand nature. All across the world, there are myths and legends to help explain the unknown. These stories are great fuel for inspiration, and a lot of great storytelling started here from the Greek myths to modern traditions such as the Mexican Day of the Dead.


Modern History & the Future of Humanity (speculation)

The source of inspiration for any sci-fi setting - modern history and the future is a topic of great interest for me. With the rise of technology and access to mass communication such as the world wide web, there is a lot of speculation as to what the future holds. It is generally inspiring for me to look at what the world was like 30 years ago, and see what my future might be. 

Traditional Art

Lucian Freud

A true master of observational art, Lucian Freud has a certain way of capturing the ugly side of people without humiliating or ridiculing them. His paintings are always very gritty and textural, but often depict softer emotions in people despite their initial appearance. I prefer his newer art to his older pieces, finding them more truthful to the subject matter, but still keeping the essence of the person's emotional state intact.



Leonardo Da Vinci

Leonardo is a great inspiration for any modern artist who follows the classic principles. Not only was one of the great minds of the millennium, but he and the other renaissance artists made it so that modern day art is underpinned by an understanding of science. With formulae such as the golden ratio and the Vitruvian man, we now can construct art from our knowledge. This in particular appeals to me - someone who treads on the line between art and technology - creativity and science.