Labels

Thursday, 17 May 2012

So long and thanks for all the fish!

Well - it's been a long year! This will be the final update to my honours blog. Beyond this, you'll be able to track my progress at

http://sophiebrennan.com

&

http://sophiebrennan.wordpress.com

So, without further ado - let's see what I've done!





And here's a little quick video to show the process. The music is Army of Assholes by Jim Guthrie.

 




So, let's recap:

What have we learned this year?

1. Technical art is still growing, but it's crucial and will always be around in some form.
2. Being a technical artist isn't about the final product at the end of the day - but the process behind how you got there. Most things you will do in this role are going to be new ground that no one has covered before - so it's all about figuring stuff out!
3. Technical artists ARE the interface between artists and programmers, but they mostly work FOR the artist. Remember your audience. Design your tools as such.
4. Technical art is wide and varied in skills - but one thing a technical artist should never do is limit themselves! They should always be learning! While this is true for all other disciplines, technical art has to be on the cutting edge!
5. Despite reading, learning and absorbing so much info about technical art this year - no isolated educational study can compare to the real thing. As Jason Parks of THQ said to me "DOING is technical art"
6. Technical artists seem to have their fingers in all the pies! Contributing to every step of development is an exciting prospect!

More generalist stuff

1. Learned so much - I taught myself (with the help of some others) MELScript, how to think more like a programmer, vital artsitic skills, communication skills and SO MUCH about the industry - I'd have no idea I was where I was today this time last year!
2. Met and talking to some really great people from around the world. The games/vfx/animation industry is full of some wonderfully brilliant and helpful people. I'm grateful for what I'm going to go in to.
3. So much more to learn! Now the doors are wide open and in my spare time I'll endeavour to learn all I can, as well as live a good and healthy life.


Hopefully, the video spoke enough for the process behind what I've done. I know in the last few weeks I've neglected the blog - but I'd rather do the work than write about it!

For the people who have seen my journey throught the eyes of this blog - I hope you enjoyed the journey as much as I did. It's been a wonderful learning experience, but I can say I'm quite glad to be let into the big bad world of work! In little more than 1 weeks time, I'll be moving down to England to start a new job at Blitz Games Studio as technical animator. I can't even begin to say how excited I am!

Also, thanks to all those who have helped me on my journey. To my lecturers at university, the people around me, the city of Dundee and those in the games companies here and those people who I've spoken to all around the world - thank you!

Signing off,

Sophie.

Sunday, 15 April 2012

Update for 16 April



So, my control rig was a little broken, and needed to be fixed. Here is the video update showing the rig in progress with the control rig. The script has been modified to look for anything with the prefix "rig" for the control, tokenise it (break it into strings with "_" ), rebuild the joints, and connect any with similar names after the prefix. This means that I can make severe modifications to the rig, but only need to transfer the bones that will be skinned - i.e. the controller bones (FK/IK/auto dynamics and others will not be included).

The issue so far with my setup is that it does not look for any specific hierarchy to copy to, unlike my previous script - causing issues if there is more than one similar rig in the scene or another rig with any joints named similarly.

Here is the working script:
 <code>

///////////////////////////////////////////////////////////////////////////////////////////////
//    Sophie Brennan - Control Rig Setup
//
//  How to use this script:

//   1. Make sure your group node containing your rig is called "grp_controlRig"
//   2. Make sure each skeleton has the joints named to match with the prefix "rig" and
//    "jnt" for the control and export rig respectively. Also make sure that the joints are
//    in the exact same hierarchy as unwanted translations will occur if the original
//    translations/rotatations are different.
//   3. When running the rig, please specify whether you are breaking or joining
//     connections, i.e. sbControlRig "break"; or sbControlRig "connect";
//
//
/////////////////////////////////////////////////////////////////////////////////////////////////

global proc sbControlRig (string $specifyFunc)
{

 if (($specifyFunc != "break") &amp;&amp; ($specifyFunc != "connect"))
 {
  $doWarning = 1;
  warning "Unknown argument. Please specify either break or connect. ie: sbControlRig break; \n";
 } else
 {
  $doWarning = 0;
  print "Function specified - continuing with script. \n";
 }

 string $rigJoints[] = `listRelatives -c -ad -type "joint" "grp_controlRig"`;
 string $buffer[];
 string $expPrefix = "jnt";
 string $expJnt;
 string $delim = "_";
 int $first;



 if ($specifyFunc == "connect")
 {

     for ($obj in $rigJoints)
{
 // split the joint name in this loop by underscores into $buffer variable
 tokenize $obj "_" $buffer;


 //rebuild the string replacing the prefix

 $first = 1;
 for ($str in $buffer)
 {
  if($first) { $expJnt = $expPrefix; }
  else { $expJnt += ($delim + $str); }
  $first = 0;
 }

 //check the object exists and connection attributes if it does

 if ( objExists($expJnt) )
 {
 connectAttr ($obj+".r") ($expJnt+".r");
 connectAttr ($obj+".t") ($expJnt+".t");
 print ("Rig joint " + $obj + " connected to drive " + $expJnt + "\n");
 }
 else
 {
  print ("Export joint does not exist: '"+$expJnt+"'\n");;
 }
}
    }

 else if ($specifyFunc == "break")
 {

    for ($obj in $rigJoints)
{
 // split the joint name in this loop by underscores into $buffer variable
 tokenize $obj "_" $buffer;


 //rebuild the string replacing the prefix

 $first = 1;
 for ($str in $buffer)
 {
  if($first) { $expJnt = $expPrefix; }
  else { $expJnt += ($delim + $str); }
  $first = 0;
 }

 //check the object exists and connection attributes if it does

 if ( objExists($expJnt) )
 {
 disconnectAttr ($obj+".r") ($expJnt+".r");
 disconnectAttr ($obj+".t") ($expJnt+".t");
 print ("Rig joint " + $obj + " disconnected from " + $expJnt + "\n");
 }
 else
 {
  print ("Export joint does not exist: '"+$expJnt+"'\n");;
 }
}

    }

 else
 {
 //Do nothing
 print "Argument not specified - please specify break or connect. /n";
 }
}</code>

The problem with this system however, might prove making an independent hip controller difficult. SDK on things like the hands have not been done yet (though to save time they will be done via a script I will write - which should be fairly easy to do, as I've been writing scripts to set up IK/FK joints and other tedious tasks) as I finalise and import all the various pieces of the character's mesh.

The main problem with my scripts at the moment is that they are only useful for 1. my use and 2. use with the rig setup shown. While this speeds up my process, it would be almost useless for a studio, which needs adaptable and non-specific scripts for studio-wide use.

For the auto-hood system used, I have driven the hair curve with controllers, where the joints are affected by dynamics. While this produces some really nice secondary motion - collision is a huge issue. I tried to set up rigid bodies for collisions, but because the meshes intersect they are not able to have these dynamics applied. Overall, FK animation may be more efficient but it was a nice experiment and is still available in-case the animator might wish to use it. The method used was observed and de-constructed from Harry Gladwin-Geoghegan's freely available dino rig online, where it was adapted to the needs of my rig.

Things to be done

- fix the hip joint
- find way of attaching the bag
- SDK/various other controllers


Playing with a skin shader and SSS. (subsurface scattering)

Sunday, 18 March 2012

Update on Project

Hey I haven't actually put up my progress on my art in a while, so I'll throw up what I've got at the moment and explain it.

First of all, I'm still sculpting and detailing my human character, though I have the base shape all blocked in and sloidifie






 ///////////////////////////////////////////////////////////////////////////////////////////////
//                Sophie Brennan - Control Rig Setup
//
//        How to use this script:
//            1. Make sure your group node containing your joints for exportation is called
//                "grp_exportSkeleton"
//            2. Then make sure your group node containing your rig is called "grp_controlRig"
//            3. Make sure each skeleton has the same number of joints in the exact same place.
//            4. When running the rig, please specify whether you are breaking or joining
//                 connections, i.e. sbControlRig break; or sbControlRig connect;
//
//
/////////////////////////////////////////////////////////////////////////////////////////////////

global proc sbControlRig (string $specifyFunc)
{

    string $legSide;
    if (($specifyFunc != "break") && ($specifyFunc != "connect"))
    {
        $doWarning = 1;
        warning "Unknown argument. Please specify either break or connect. ie: sbControlRig break; \n";
    } else
    {
        $doWarning = 0;
        print "Function specified - continuing with script. \n";
    }
  
    string $bones[] = `listRelatives -c -ad -type "joint" "grp_exportSkeleton"`;
    string $joints[] = `listRelatives -c -ad -type "joint" "grp_controlRig"`;
    int $bonesLength = `size $bones`;
    int $jointsLength = `size $joints`;
    int $i;
  
  
    if ($specifyFunc == "connect")
    {
  
        for ($i = 0 ; $i < $bonesLength ; $i++ )
        {
        connectAttr ($joints[$i]+".r") ($bones[$i]+".r");
        connectAttr ($joints[$i]+".t") ($bones[$i]+".t");
        }
    }

    else if ($specifyFunc == "break")
    {

        for ($i = 0 ; $i < $bonesLength ; $i++ )
        {
        disconnectAttr ($joints[$i]+".r") ($bones[$i]+".r");
        disconnectAttr ($joints[$i]+".t") ($bones[$i]+".t");
        }
  
    }
  
    else
    {
    //Do nothing
    print "Argument not specified - please specify break or connect. /n";
    }
}

Friday, 9 March 2012

Crit Sessions Semester Two

Yesterday was crit day, in which myself and another fourth year student took a group of around 8 other students (from the years below) and offered advice and critique on their work.

Incase you're wondering where is my pitch session - I was unable to attend it due to being at Animex 2012 - the session was never resceduled.

First of all, we had a different group of students than in the first semester, so a vast majority of the work was new to me. Due to some problems beforehand, where students would interupt and talk out of turn, we informed the group that we would adhere to the strict timing of a 5 minutes presentation and 5 minute question session, and that students would wait their turn beforefore they could ask questions. Me and my other supervising 4th year would then offer feedback and open the group to discussion of their work. This enabled us to keep our group and presentations structured, and that each student would have equal oppertunity to present. Luckily, this rule was adhered to, as the students were serious and respectful of their own and their peer's presentation.

We also decided that we would allow the first year students to present first, and go chronologically from that, to save on unnesscary repitition (i.e. this is x module with y hand-ins), and would give each student more time to talk about their own progress and work, rather than the course.

With the student's feedback, I endeavoured to keep the critique useful - by pointing out their weaknesses, but offering them advice in what is the best way to approach them and improve their work. A lot of the students had worked hard on their project, though it was obvious when a few were behind. We made our best effort to make this clear to them without discouraging them. Once again, because I did not do first and second year at Abertay University, it was harder to know what was expected of the students, and what they were graded on - it would have helped to have looked at their briefs beforehand to get an idea of what might be expected and when.

Overall, the prensetations went quite well, were on time and we were able to offer feedback that was relevent and encouraging. Issues noted were possibly being a little too easy or lax on students who were falling behind, and care must be taken to make them aware of this without discouraging them. Group discussion beyond our feedback was lacking too, and the pitch session might have benefited more if we encouraged feedback from other students - though the 5 minutes question time was often utilised to its fullest. As there are no more crit and pitch sessions, it is worth reflecting on the whole experience, from the three sessions I monitored.

Firstly, I think I have developed group management skills, and am able to speak with authority amoung my peers. My awareness of time management and the importance of it has also improved greatly from the first pitch session in week four. Feedback given is a lot more relevent and though I often drifted towards technical solutions, my fourth year project has helped me understand all elements of a project and address them appropriately.

One final good thing to note is that I offered direct help to the students by inviting them along to my Maya Clinic, where I can help them further. This has proved useful not only for them (as I teach them), but for me as it allows me to develop my comminication and teaching skills - also very important in the field of technical art.

Wednesday, 22 February 2012

Videos

I promised some videos and here they are:

First of all - a video showcasing the soft-eyes rig. Obviously looking at it, it immediately needs a lot of tweaking to look right - but the principle it there. It is driven by a combination of blendshapes (corrective ones too), expressions (linking the blendshapes and connecting the controllers) and SDK to drive the motion of the eyelids with the rotational value of the joint. There is 3 joints in the eye, one of each eyelid and one for the eyeball itself. Doing this excersise let me get to grips with a lot of facial workaround as well as linking up blendshapes to be driven by controllers. When it comes to producing the character, I'd like a rather strong joint-based controlled system, as blendshapes can't give you complete control over the character (especially in this case as our creature has a rather long snout).


Secondly, we have a really quick turntable of the rough human sculpt I'm working on. This helps me imagine the form a lot better as I lay the clothes on top of him. I'd like to spend more time detailing this, but as I don't really need to it's more effecient to move on now that I have the shape correct.

Thursday, 16 February 2012

Animex 2012

Hey blog!



The lack of activity lately is due to the fact that for the entire of last week I attended Animex, a festival for games and animation/film held down in Teeside University, Middlesbourgh. I originally intended to do work down here, bringing my laptop along - but upon arrivial I discovered that there was too much to do that was not to be missed out on. I attended talks by Valve, Naughty Dog and Epic, as well as talks by Framestore, MPC and Double Negative - visual effects companies. I also attended a workshop that was relevant to my dissertation - titled "Engage your left brain - practical maths and physics for digital artists". Overall, the festival was a very enjoyable experience, and although I did not managed to do a lot in terms of my university dissertation I learnt a lot about the realities of work and also a lot of interesting tips, tricks and solutions for specific problems encountered in these fields. Finally, I learnt that my portfolio is rather weak, and it really needs to be beefed up upon graduation - something my project will help me achieve.

I could write a whole entry on my experience at Animex, but this is not really the place to do it - as although it wasn't entirely helpful to my degree at hand - it was certainly extraordinarily eye-opening in terms of what I can expect due the summer - when I'm dropped into the big bad world of work. 

In the meantime, I have done some quick rigging tests with corrective blendshapes and a soft eye rig (driven by a combination of joints, expression and blendshapes). I will post this test up here.

In the coming week I hope to complete my human character's sculpt and begin rigging and texturing - a very time-consuming part of the process. 

Saturday, 4 February 2012

Week 18+

Start of a new semester!

Okay, so since submission I've done the following:

  • Character development has advanced again, this will be detailed below and goals will be made
  • The project, and specifically objective 2.0 has been modified to suit the aim a lot more appropriately - clarified down there a little
  • The beginnings of the judgement criteria questionnaire has been written up
  • Expert candidates have been contacted
  • Have began learning about shaders, also detailed further in the post
  • Feedback has been received on my initial proposal
  • Feedback has been received on second proposal
Character work since then:

First of all, some quick modelling was done to get the composition of the scene set out. Here is the character in relation to the creation and the corresponding layout of the final scene below. 




The creature was explored some more, this was more along the lines of something I wanted, but it's still needing finalised at this point.
I also created some quick thumbnails to explore character costumes before taking it on to the final stage of the finalised model sheet.

Character clothes thumbnails to rough out design
 
 When deciding upon the character as it finally stood, I had to consider how I might construct and build the character, as well as material types. No colour tests were done as I'm currently hoping to get my monitor colours calibrated. I found when drawing that neither of my monitors currently represent true monitor colours, and thus they need calibrated. Luckily, a friend of mine is willing to lend me theirs so I can continue on with my project accurately.

Final Model Sheets
Zbrush Front

Zbrush Side
As mentioned before, I had to take the character into considering when bringing it into Zbrush. I decided the only sensible part of his outfit to be cloth simulation was his robe, as I hope to drive the hood with a hair system within maya (allowing automatic overlapping animation and collisions to save time. I then took the model planes into ZBrush and laid out zspheres to map the shapes.





Now it's completely on to sculpting and building out the model, while using subtools to create the cloth. I will create the skull separately and import it into the final model to be attached via the rig. The horns, clothes, and other details will be added as subtools, then retopologised.

The character is currently being sculpted, but I do not feel comfortable showing it as it currently is in the blog, when the sculpt is more complete, it'll update it with a progress shot.

Learned about shaders:

A friend has been giving me introductions into shader language for games - specifically HLSL (high level shader language) and render monkey. In the meantime, I've been picking up linear algebra to improve my 3D math, which will hopefully aid me in my scripts as well.

I now understand the difference between pixel and vertex shaders, as well as the various elements within those shaders that are required to render a frame. While this learning is ongoing, I don't know how applicable these skills will be in the final project, but they are certainly helping me with my general understanding of 3D.

(Discovering that XYZ was linked to RGB was a satisfying breakthrough! No more guessing which means which in 3D space!)

The project and the new method of evaluation!

An initial version of the judgement criteria has been drafted. I have a lot of thoughts on this to write down, mostly in consideration of art, tech and the delicate balances that have to be considered when judging art. I hope to write a fuller post on the conclusion of this later on, in a more general post. Needless to say, it's not easy to put technical art in a box. I've been trying to ask around within the community for opinions, but it's something I must also discover for myself!

As always, onwards and upwards - here we go!