Thursday 10 December 2015

Technical Art - VIII

With my script being finished all I needed to do was model skinning: after watching the live demonstration  the lecture and the labs I started skinning my model by using the Smooth Binding first and then refining weights with the Weight Painting Tool.
At first I was confused and I couldn't exactly wrap my head around the concept of skin weights as sometimes painting something over some vertices would undo previous work which I had done, but thanks to the separated meshes and after watching some tutorials (especially this tutorial from Jason Baskin) I started having some nice results.

The end result was quite satisfying, even though some bits of my mesh are not deforming properly (especially around shoulders) I think the overall model looks quite smooth which is what I wanted to achieve by the end of the process.

The problem with the shoulders was probably brought up by the way the model topology was laid out, I think that having a different starting pose would have made easier but by the time I realised that it was too late and there was nothing I could have done, the process of skinning was actually very interesting because it ties up all the "invisible" work done through the rig in a very tangible way.

Now that I have been through the full process of rigging and skinning a model I feel more confident in my ability to judge model topology and predict how the model would deform.

I believe this is a never ending process that is usually refined over time and the only thing that can guide towards the decision of the topology of a model is the experience gained in previous attempts to rig and skin other models.

Friday 27 November 2015

Technical Art - VII

Since I finished working on the model rig I decided to focus more on the scripting side of the module before going back to skinning, as I mentioned few posts ago I am planning to develop an auto model picker tool.

The basic features that I want this tool to have are:
  • Automatic rendering of whatever the user is looking at the moment, so that the user can decide to create pickers for specific parts of the model
  • Possibility to have multiple picker views and being able to swap between them
  • The picker should automatically detect and create a button for each joint and control shape in the scene (discarding those which are not visible in the current view)
  • The user should be able to filter out joints based on name patterns or type

With this in mind, I want to design the tool's code so that it could be expanded in the future to add additional features such as loading/saving picker views and further customization like automatic UI controls to tweak set driven keys and special attributes.

Once I planned the features I started working on the actual UI implementation and this was the final result:


Getting a screenshot from the user view proved to be rather easy: I just needed to use the playblast command and save to a file the results and then subsequently use that image inside the form, transforming each joint from world space to screen space was not as simple but after researching ways to find the view and projection matrices for the current camera I managed to find the screen space position of any object in the scene quite easily.
Once those two matrices are available the screen space position can be easily computed by transforming the world position of an object through the view and projection matrix.

Since one of the long term goals was to have a save and load feature I needed a way to store those two pieces of data within my script, so I made a PickerData class that contains all the information required to transform any object in screen space for that specific user configuration.

The PickerData also contains all the information about spawned buttons and their corresponding object: this is used within the filter function to allow the user to filter out specific joints or control shapes in the scene should that be necessary.


Here's an example of the final script working with my rig:

Friday 20 November 2015

Technical Art - VI

After lots of hours of hard work I finally managed to finish the rig! The most difficult thing I had to think about was creating two separate chains of hierarchy: one for the offset groups and control shapes and one for the actual joints; since those two are blended together as everything has to be controlled by the master controller I struggled in my first steps and managed to break the skeleton hierarchy more than once by wrongly parenting control shapes directly to joints rather than using constraint to control them.
But once I finally understood the whole concept of parenting I feel more confident in building basic human rigs and venturing forward to more complex ones.
The missing piece which I wasn't quite grasping was the concept of constraints, so I did research more tutorials and documentation about them and I found some interesting types of constraints which are not strictly related to rigging but could definitely help during animation: one of the was the normal constraint which enables the user to orient a node to the normal of a surface; this would make animating an object sliding through a curved surface quite easy, which made me realize how powerful some of these tools can be if used properly!

For reference here's a screenshot of my final rig:

Screenshot of completed level


I might still decide to add some small things along the way, for example I haven't explored set driven keys for hands but since they won't affect the skinning process I will consider adding them later on.

Friday 30 October 2015

Technical Art - V

As I mentioned before I focused my attention to rigging in the past weeks and as I've already set my eyes on an ambitious script I have decided to keep the scope reasonable and keep using the practice model I choose to start with during the labs:

Wireframe render of the model

The model topology is quite good and even though the model could lend itself to a very rigid type of deformation I will pretend the model is actually just a placeholder for a human like character (so that further thing could be explored in the future such as animation and skeleton re-targeting). I think this fits nicely my field of specialization since by researching I have seen that some companies actually employ a base model as a template for the most common animations.

Solid render of the model

Friday 23 October 2015

Technical Art - IV

In the past days I've been researching what kind of scripts might be helpful while animating and one of the things which I found more tedious to do is selecting and manipulating joints and control shapes.
While browsing for custom scripts developed by professionals I stumbled upon this picker tool which looks very interesting:  


As stated from the description in the website: abxPicker provides artists, animators, and character TDs with an intuitive drag-and-drop interface for creating and using character control Interfaces. Using drag and drop, you can create, position, resize, and edit buttons to select and animate character controls.
"

This tool enables the user to create their own pickers through a drag and drop interface and then save those interfaces to be reused later on. I believe that the tool proves to be very useful but I want to research this concept further and maybe find a way to automate the picker creation process so that the user will only have to choose which part of the model has to be "captured" and all the information regarding joints and control shapes will be automatically inferred from their position in the world.

Friday 16 October 2015

Technical Art - III

Welcome to the third post in the series Technical Art!

We have been introduced to the concept of scripting in Maya and so far it seems very straightforward.

The thing that fascinates me most is that Maya seems to use its internal language to handle pretty much every action that the user can perform in the tool: this means that scripting has limitless potential to automate any kind of action and can manipulate the scene with a lot of freedom, as it has effectively the same scope of action that a normal user would have.

I have been experimenting with user interface creation scripts and combining those with the tasks that we have been given during the lecture, for example I expanded upon the first "cube army" script to make it configurable through a window.


I am pretty confident that I will be able to create a good user interface now that I know what kind of approach I have to use, and the documentation that Maya provides is very useful and it helped me a lot in finding the functions that I needed to achieve the result I wanted.

I will focus more on rigging in the next weeks as I want to have a more clear idea of the script I will be making for my coursework, but at the moment I still lack knowledge of some steps regarding advanced rigging tools that I think we will be covering in the next weeks, for now I will keep on practising and researching more advanced techniques, so stay tuned for more updates!

Friday 2 October 2015

Technical Art - II

Welcome to the second post in the series Technical Art!

During the past lectures we analysed the differences between rigs for animations and visual effects and rigs for games. As expected, games have more limitations due to the performance requirements, but this also varies in different types of games: mobile games will have more restrictions than a console game; but even within the same game some characters might have more resources allocated to them which means that the artist will be able to build a more complex rig for them (to achieve a more realistic animation).

We've also been introduced to the concept of skinning which is very crucial in determining how the model should be structured in terms of topology to have a visually pleasing deformation.
Since we are required to build a rig as part of our coursework I was researching models that I could use and as I don't have very strong modelling skills I started looking into already rigged characters: this way I can just remove the rig from the model and start from scratch.

I've always been fascinated by animal characters, so I started exploring this model and its topology seems to be very nicely laid out so I will be experimenting with it in the next weeks to see what kind of rig I can build with it.



The model should be reasonably complex for a game rig, it only has 4k triangles in total, the only problem I would see is that it might require too many joints for the head to make it look expressive enough, but one could just assume that if there are no camera close ups on the creature then such detail might not be required.

I will also be exploring more the scripting side of Maya in the next weeks, so stay tuned for more updates!

Saturday 19 September 2015

Technical Art - I


Hi everyone, from today I will be starting a new post series about a module I am currently studying at university: Technical Art Applications.

Since the first lecture the module seems to be very interesting and I've always wanted to have a chance to have a better understanding on how 3D animators work and what the rigging process looks like, so choosing this module was a no brainer!

The most interesting thing about the module so far is that we have been given a lot of freedom on what to do for our coursework, which also means that I will need to do a lot of research on my own to understand what is best for me and to deliver a good piece of coursework by December.

I have decided to explore game rigs rather than animation or visual effects one simply because my main goal is to work for the games industry and I think that knowing more about how rigging works specifically in this field will be very valuable in terms of understanding how the artists work and what kind of technical problems they might have (and how I can help in solving those problems, obviously!).

Maya seems a very powerful tool and from what I've heard it supports either C++, Mel or python for scripting but we will be using python in the module so this will be a good opportunity to refine my Python skills and knowledge of Maya overall.

Even though it might be too early I have decided to put a lot of focus on the scripting side on for my coursework, but at the the moment I am still trying to figure out what kind of steps and processes could be automated and how far I can push the complexity of the script in this regard, so stay tuned for the next posts!