Tuesday, December 3, 2013

Naming Convention 1.

Simply it is the most important weather you are an artist or technician (so called TD) in the VFX industry. Furthermore it is the most important thing for mankind (or the universe). Naming convention is essential for everything.
Unique projects has unique naming convention. But let's pretend you won't do anything that nobody did before meaning of the process. So there are guidelines.
Naming convention is extremely important but there is another principle. As Richard Williams wrote in his book: "Keep it stupid simple." aka KISS.
Working with computer means you use operation systems like Windows and you create files which could be organized in directories. But you will find out sooner or later there are at least 2 big problem here.

Big problem 1.
One file can only belong to one directory.

Big problem 2.
More data we have that we can simply put into names, filenames for eg.

But these problems raise a lot of other issues. And this blog is more or less about to discuss those issues. Right now I simply use the KISS principle which also means (for me) do it as you can.

So we need a general solution of file naming. Before I tell you the truth I gather some ideas.

1. Importance of the order

Usually files are arranged by their names (alphabetical order).  So by giving names we can describe the order of the files.

2. Parts (tags)

We can of course combine different information usually called tags. So the question is how many tags should be there to collect the most important information?

3. Compressing information

We can say abbreviation but is more than that. Question is how can we compress more and more information into alphanumeric character. So for eg. we can use abbreviations but in that case we should establish a dictionary for those, because BG does not necessarily mean background for everybody.

4. Documentation

If you are a one person studio you might think documentation is not important. But it is. I think it is for every scale of facilities. So the naming convention should be documented. It can change over time from project to project and that means the naming convention document can have versions or can be attached to projects. It could be a simple text file.

4.1 Documentation template

Usual form to template naming convention is:
[tag1][separator][tag2][tag3][separator][tag4]

It can describe a file rules as well.

We can use explicit characters and variable names to be more clear.
[name]_[versionLetter][versionNumber]_[comment]

It could be necessary to explain the rule of the variables. We can call it file rules.
[name] Starts with capital alphabetical character and contains any alphanumeric character
[versionLetter] - Any non-capital alphabetical character

This example above use the "_" (underscore) as a constant character or tag. That means you can't change it. Usually when we describe a file path there are constant directories so they are constants as well:
e:/ Projects / [ProjectID] / 2D / ConceptArt / [AssetID] / 
[AssetID]_[versionLetter][versionNumber]_[comment]

In this example above the "Projects", "2D" and the "ConceptArt" are constant tags.

More complex when we use expressions like "AssetID", because this is not a simple variable but a concept plus and abbreviation (ID = identification). We should describe things like Asset and/or AssetID before we use it. But it is not the part of the naming convention documentation rather a documentation of the pipeline or system we utilize.

5. Character table
It is always recommended not to use special characters. That means file names contain only alphanumeric character, underscore and hyphen. We can express with regular expressions: [A-Za-z0-9_-] (see below)

So this would be my general template for file naming:
[name]_[vatriationLetter]_[versionLetter][versionNumber]_[comment]

And the rule for this pattern:
[name] - Starts with capital alphabetical character and contains any alphanumeric character
[variantLetter] - Only one capital alphabetical character
[versionLetter] - Only one non-capital alphabetical character
[versionNumber] - Two digit starts with 01
[comment] - Any alphanumeric character


Below we can see a series of examples how it looks in practice. So it is more like the explanation of the concept behind this naming convention.
Let's say I'm working on a landscape concept art. So the name part would be "Landscape". I separate the process stages like sketch, details, colors. So the version letters represent these stages (a, b, c). I can also comment where the stage starts to be more clarify.
Usually when we work on something we don't consider at the beginning there might be another variant for the subject. So if we use "A" as a base variant we won't ruin the naming convention later with adding an extra tag.

Landscape_A_a01_Sketch
Landscape_A_a02
Landscape_A_a03_Background
Landscape_A_a04
Landscape_A_a05_FGTrees
Landscape_A_b01_Details
Landscape_A_b02
Landscape_A_b03_BGMountains
Landscape_A_b04
Landscape_A_b05
Landscape_A_c01_Colors
Landscape_A_c01_SkyAndClouds

You might find the "a", "b", "c" a little bit confusion to use for versions. You are not the only one. Most people use a "v" letter like  "v01", "v02", etc. But using only one constant version letter we can't embed more information with that.


Footnotes

Regular Expressions aka Regex

Regex is a tool to analyze names. Usually it used to verify and search. If you have a basic idea how regex works you might want to establish naming convention that can be easily handled with regex.
For eg. the naming convention above can be described as regex pattern like this:
[A-Z] [A-Za-z0-9]+_[A-Z]_[a-z][0-9]{2}_[A-Za-z0-9]+

So the regular expression tells to the engine the name:
Starts with one capital alphabetical character [A-Z], followed by alphanumerical character [A-Za-z0-9], it could be one or more +, followed by an underscore _ (constant letter), followed by a capital alphabetical character [A-Z], followed by an underscore, followed by a non-capital alphabetical character [a-z], followed by any number [0-9], it has to be exactly two digit {2}, followed by underscore, followed by any alphanumerical character [A-Za-z0-9] and it could be one or more +.

The real benefit to use regex comes when you or your studio use programming languages or other tools to verify or match paths, file names, or any kind of text, etc.


Monday, November 25, 2013

Maya Discovery - Large distance from origo cause skinWeight problem?!

Achtung, achtung! Alarm, alarm! Riadó, riadó!

I found a very strange behavior of maya. I created a simple rig used smoothBind skin. Everything is fine until I place the character to large distance from the origin, let's say x: 150000, y: 80000, z: -32000 and I turn on subdivision (pressing 3 key) to see a smooth mesh.

Here are the example pictures:










I have the feeling that skinWeight normalization results this, but no idea hot to fix it.

Friday, September 27, 2013

Maya Fluid - Losing color

If we use color method: dynamic grid to emit colored fluid (from a textured surface for eg.) the color of the fluid is getting grayer and grayer during the simulation. So we lose the emitted color sooner or later.

So what is going on in the background:
Since we use dynamic grid on color every voxel get an rgb value. It seems 0.4, 0.4, 0.4 is the default or something like that. We can check it like this: getFluidAttr -at color -xIndex 0 -yIndex 0 -zIndex 0. The simulation emits color with density but the remaining voxels (the empty ones: means no density) still has the default color. So during the simulation the emitted color is mixing with the default color and that means the fluid is turning to this default color gradually. There are two attributes in this context: Content Details / Color / Color Dissipation and Color Diffusion. Unfortunately the default value is 0 for both. So we can only increase the effect of loosing color.
Since there is no option to set no value on each voxel (it's not 0,0,0 bec. it means black) it is necessarily to lose the emitted color.
The only way to avoid gray color is to "overload" fluid color. We can emit color values like r:1 g: 5 b:2. Of course it is not an ultimate solution but works fine.

Tuesday, September 17, 2013

Saturday, August 24, 2013

Maya Fluid - Checking turbulence and fields

I have always had trouble with adjusting frequency of the Turbulence attribute on maya fluidShape or on a turbulence or volumeAxis field.
Then I find the ultimate solution. Because simulation of a 3D container can be really slow I create a 2D container with Base Resolution of 200. I disable any other simulation so it can be quite fast (usually real time). The Velocity Draw option is good to see the length of the velocity vectors but not that useful to see the scale of the turbulence texture.
We can map the color ramp like this:


And choose Speed as a Color Input. Do the same for opacity.


For the sake of the demonstration I set up a turbulence field for to fluid with these settings:


Play the animation and there it is. Almost like a Thomas Ruff picture.


In motion:


So after I adjusted the field I can apply on other fluids. Keep in mind volumeAxis field is a special to utilize built in turbulence because the size of the pattern depends on the size of the container. If you scale a turbuneceField it has no affect on the size of the pattern.

RV Player - Comparing Images

As we all know Tweaksoftware's RV is more than "just" an image sequence viewer. We can compare images with wipes. If we open an image sequence and drop another image sequence on  RV it shows up an option to add as a source to the session or as a layer.


In this case we add as a source. We can find out whats going on the background if we switch to stack mode (X hotkey). Double click on Defaul Stack enables to view the two (or more) image sequences in the same time. Of course they overlap each other so we have to activate wipes by pressing F6.



Now we can grab any part of the frame of the image to crop and see what's going on behind it. Below the Inputs tab we can change the order of the image sequences. That basically means the top sequence in the list is on the top of the screen as well. I put two different image sequence in RV to demonstrate the wipe/crop.


Pressing F7 displays the Info Stirp which is helpful to infidelity the image sequences.

RV is so sophisticated even if the sequences have different start frames it can be corrected by one click (actually it is two). In stack mode on Edit tab there is an option Align Start Frames. If it is turned on all image sequences will start on the same frame.


Thursday, August 22, 2013

Customizing RV player - Sequence From File

As a world famous image viewer and sequence player Tweaksoftware's RV has to be revealed. There are several option usually have to set.

First of all Sequence From File option which can be set on Preferences / Packages is to allow RV to grab an image sequence from a directory rather than a single frame.


The default option to grab sequence is to drop the folder on RV. If the folder contains more than one image sequence RV paste them on the timeline following each other.
If we use another software to view still images (my personal preference is IrfanView) we have to run RV other way. However we don't want to do it every time from the Desktop or Start Menu. It is much easier to put RV icon on the Total Commander toolbar. In this case drag and drop works fine.



Monday, August 5, 2013

Commercial - SOuP

It is important to have paid ads for blog writers. Unfortunately this is an unpaid commercial. But it is worth it.
I have to tell since I know Maya SOuP my life has been changed :)
Around 2005 I switched from 3ds Max to Maya because I felt in 3ds Max had limited capabilities. Since I used Maya I had lot of situation when I felt the same. And of course lot of people talking about Houdini as the final solution for everything. Then I met SOuP and it was a ligth at the end of the tunnel.
So what is SOuP?
Basically this is a set of nodes / tools to extend maya capabilities. The main focus that we usually call procedural workflow.
Here is a website:
http://www.soup-dev.com/

I use SOuP for fun and I had production experiences as well. I'm going to write more about this soon. I just want to draw your attention to this:
Ideas for Maya

If you don't know about this forum you should check it (if you use maya at all). I linked the top ideas and you can see I'm not the only one who excited about SOuP.

Tuesday, July 23, 2013

VFX Films - Pacific Rim

FxGuide has a great interview with Industrial Light & Magic crew members.
For me it was interesting to hear that ILM just started to use Houdini as a major tool for effects like destruction. Also huge that they switched to use Arnold as a primary render solution. I think they had a couple of TD's on board.


Maya Tools - Locator size by scale

In Maya it can cause a problem if we scale objects like camera and lights. For eg. camera imagePlane.depth attribute is affected by scale value. I had a situation when render output was a empty black image because camera (transform node) was scaled. But of course it is much easier to scale than look up the locatorScale attribute on cameraShape for instance.

So here is an easy primitive python script to adjust locatorScale based on transform node scale.

 selectedObject = cmds.ls(sl = 1)[0]  
 scaleVal = cmds.getAttr(selectedObject + ".s")[0][0]  
 cmds.setAttr(selectedObject + ".s", 1, 1, 1)  
 cmds.setAttr(cmds.listRelatives(selectedObject, shapes = 1)[0] + ".locatorScale", scaleVal)  

Okay, it can produce tons of errors if you don't use it properly. I'm going to write a function (a real tool) to check errors. I guess it will be at least 40 lines instead of 4...so the post title was kind of a bluff.
Recently I have been thinking a lot about how to simplify error handling.

Monday, July 22, 2013

Customizing Maya 1. - Overriding default right-click menu

I always wonder why this default right-click menu in Maya. I think developers made an useless function on purpose. "Customize it! Otherwise there is no reason to use."
So how can we customize default right-click menu in Maya?

First of all we have to know almost the whole maya UI is written in MEL (Maya Embedded Language). That means you can modify it extensively. Second, there is a concept of overriding and that means you don't have to actually modify the original .mel scripts just have to have a modified copy of those. I have a post about Maya customizing overview where you can read more detail customizing Maya paths. The default location template (on windows based on the official maya document) to place override scipts is the following:

drive:\Documents and Settings\username\My Documents\maya\version

You can query the actual maya script paths with a simple mel command:
getenv MAYA_SCRIPT_PATH

It returns the maya script paths list (MSPL) which starts with the custom maya script path (CMSP) and there is somewhere the default maya script path (DMSP). The template for DMSP is:
/application folder/scripts/

Overriding basically means copy the .mel file what you want to modify under the CMSP. Maya will recogzie two .mel script with a same name, and it will read the customized one (because it is the first path in MSPL).
Just have to know which particular .mel script is the one you have to modify to utilize custom default right-click menu.


Because it described in a .mel script which is basically a text file, you can searh for the word or words to find the script file. I this case the right-click menu has a menu item "Complet Tool" and this is enough to find the file.
Personally I use Total Commander to handle the file system so I can search not for the file name but the text.


You are going to find the buildObjectMenuItemsNow.res.mel. But! Maya .mel files often have a .res.mel version. Those file basically collect the texts which are displayed on the maya UI. It is managed by the uiRes mel function.
For us right now the important thing is we have to copy buildObjectMenuItemsNow.mel file under the CMSP because this is the file we want to modify.
This .mel file has a part which is exactly like a marking menu .mel file. I don't want to talk to much about managing marking menus but ask if something not clear.
The main issue with buildObjectMenuItemsNow.mel to replace the current menu items and/or add more.
So the important part of the code originally look like this:

 setParent -menu $parentName;  
   
 menuItem  
     -label (uiRes("m_buildObjectMenuItemsNow.kSelectAll"))  
     -radialPosition "S"  
     -command ("SelectAll");  
   
 menuItem  
     -label (uiRes("m_buildObjectMenuItemsNow.kCompleteTool"))  
     -radialPosition "N"  
     -command ("CompleteCurrentTool");  
   
 setParent ..;  
   

And we can replace menuItems like this:

 menuItem  
     -label "Outliner"  
     -radialPosition "N"  
     -command "OutlinerWindow";  
       
 menuItem  
     -label "Graph Editor"   
     -radialPosition "E"  
     -command "GraphEditor";  
       
 menuItem  
     -label "NodeEditor"   
     -radialPosition "S"  
     -command "NodeEditorWindow";  
       
 menuItem  
     -label "Set Editor"  
     -command "setMembershipEditor"   
     -radialPosition "W";  

Personally I prefer to arrange menuItems clockwise. That is why -radialPosition starts with "N" (north) and after "E" (east) and so on.




Footnote:
Usually there is an easier way to find a .mel script based on the procedure name. Turn on Echo All Command in Script Editor below History menu or push the button on the toolbar.

Now if you try default right-click menu it will return in the script editor history panel something like this:
buildObjectMenuItemsNow "MayaWindow|formLayout1|viewPanes|modelPanel4|...|modelPanel4ObjectPop";
We can use whatIs xyz.mel statement to check a mel procedure source. If you type:
whatIs buildObjectMenuItemsNow;
And the result would be something like this:
// Result: Mel procedure found in: C:/Program Files/Autodesk/Maya2012/scripts/others/buildObjectMenuItemsNow.mel //
You will notice Echo All Command can produce tons of code lines in the history panel depending on what you are doing. So if you are confused you can use the method described earlier.

We can use buildObjectMenuItemsNow.res.mel file to manage -label names of course. For this case I would not recommend that.
To find out more about Marking Menus just search for it on the internet. There could be sub-menus if you use -subMenu flag. To close the sub-menu you have to use setParent -m ..;. It is clever to indent the code to visualize where the sub-menu start.

 menuItem  
     -label "Editor Windows"  
     -subMenu 1  
     -radialPosition "N";  
                       
     menuItem  
         -label "Outliner"  
         -radialPosition "N"  
         -command "OutlinerWindow";  
       
     menuItem  
         -label "Graph Editor"   
         -radialPosition "E"  
         -command "GraphEditor";  
           
     menuItem  
         -label "NodeEditor"   
         -radialPosition "S"  
         -command "NodeEditorWindow";  
           
     menuItem  
         -label "Set Editor"  
         -command "setMembershipEditor"   
         -radialPosition "W";  
       
     setParent -m ..;  


For bored Maya TD's 1.

We all know if we create a curve and place an object on it using motionPath there will be two positionMarker node to indicate the first and last frame of the animation.


I just recognized these nodes are called something like this:

curveShape1->positionMarkerShape1
curveShape1->positionMarkerShape1

And guess what: you can select them like this:

select -r curveShape1->positionMarkerShape2;

or like this as well:

select -r positionMarkerShape2;

And if it is not enough: the time attribute of the positionMarker adjust the animation length as well. I've never used it before.

For me it was an interesting because I tested a python script which called IsShape and I wanted to check whether it produces an error with positionMarkers. More about about this here.

This positionMarker / motionPath setup rised another question. Is it possible to place only a positionMarker on a curve manually? As we can see if we use the menu function "Attach to MotionPath" it calls a mel command pathAnimation. Because it is not a .mel script I can't find out what it does exactly
I tried like this:
createNode positionMarker;
connectAttr -f positionMarkerShape1.time motionPath1.positionMarkerTime[0];
We can say this setup is close but not enough :)

Can somebody reproduce what "Attach to MotionPath" menu command do with positionMarkers mannually?

Thursday, July 18, 2013

For Maya TD's - IsShape

How can we know about a node whether it is a shape or not?
The problem is that in maya shape as a node type does not exist.
So I wrote this python script:

 def IsShape(Selection):   
     shapeNodeList = []   
     for node in Selection:   
         if cmds.nodeType(cmds.listRelatives(node, p = 1, path = 1)) == "transform" and cmds.nodeType(node) != "transform":   
             shapeNodeList.append(node)   
     return shapeNodeList  

The idea behind this if a node is not transform but the parent node is, that particular node has to be a shape. I could not produce an error yet (of course there has to be a selection).
Is it correct or somebody has a better idea?

Wednesday, July 10, 2013

Jargon 1. - VFX, SFX, PFX

I find myself use VFX, SFX, PFX in a special meaning. It might be because as a VFX guy I talking a lot about VFX and things like that with other VFX guys and there are some kind of unwritten definitions. But not really sure for eg. how an SFX guy is talking about SFX.

I think VFX usually used as digital visual effects nowadays.
SFX (Special Effect) can be the effect which is not digital, usually fire, smoke, dust, sparks, etc., but basically can be anything (special).
PFX (Practical Effect) can be physically created models that can be driven, moved or something like that. Because the VFX is getting more and more popular we might forget that creating a move is basically make the illusion. And this illusion if it is not digital made physically. I found recently an amazing reel about PFX or so called Animatronics.





I made this video just for fun. I think it is a good explanation of what making the illusion means.




References:
http://en.wikipedia.org/wiki/Vfx
http://en.wikipedia.org/wiki/Practical_effect

Let me know what do you think about these abbreviations.

Monday, July 8, 2013

Art Versus Technology

I was always confused what I was supposed to be rather a technician or an artist. My conclusion it really cannot be separated especially if we are talking about VFX. It is more likely art has a technical or scientific part. That can be analyzed described and taught. The other part...well for me that is more like transcendent. Because VFX stands for visual effect the first question is always, what? What it would be look like or what is the creative goal? That we can describe as an artistic part of the business. The second question is, how? How can we achieve that look or image? That is the technical part.
We can say art has a technical part but we not really say that technology has an artistic part. For example you can't say "art of programming". You might use that expression if you want to sell your book.
As a technician in VFX (so called TD) your role is to support artists. As an artist you have to understand the technical part of the business.

A long time ago I visited an exhibition of Gustav Klimt's drawings. For me it was a proof that great artist has a perfect technical skills.
Here is a drawing from 1879 at his age of 17.





I think he knew everything what can be known about drawing. And the other hand I think this picture is not described as a great artistic achievement.
Here is another picture form 1916.



If you have the skills and the knowledge you are free to create art.
About VFX I have to tell you the bad news. You have to follow the technologies no matter you are an artist or TD. Softwares and workflows rapidly changes. What you know today might be obsolete a year after. Of course in the other hand you might be able to work better and faster.

Wednesday, July 3, 2013

VFX Films

You might read my introduction about VFX. Over the years I had the feeling Hollywood filmmakers went crazy. It might started with Jurassic Park or Godzilla but nowdays the best actor in leading role is VFX. Spectacular visuals were always a requirement for big Hollywood style movies but recently the trends are make it even larger then ever before.
So how big the main evil can be? There were Godzilla (1998) and Cloverfield (we can call it Godzilla II., 2008)  and Clash of the Titans with Kraakan  (2010),  Wrath of the Titans with Kronos (2012). I hope they won't give up here and Pacific Rim can prove it monsters could be even larger. And...oh yes, here they come, Godzilla again (2014). I saw lot of talent sold their soul but I was a bit amazed when I found Juliette Binoche on the Cast list.
I started to thinking about films I have seen and VFX was supporting the story instead of leading that. If we consider VFX could be done not only digitally I have to start my list with Tarkovsky Nostalghia (1983). I'm going to write about jargon of the industry, but right now here is a cutty list about film which have spectacular digital VFX in supporting role:
The Devil's Advocate (1997)
Dark City (1998)
Fear and Loathing in Las Vegas (1998)
Fight Club (1999)
Eternal Sunshine of the Spotless Mind (2004)
Tree of Life (2011)

Tuesday, June 25, 2013

Hello World

I realized I have to write a blog because my knowledge starting to be too much. I can't keep in myself. So if you are interested in visual effects (VFX) it is the right place for you. I've been working in the industry more than 12 years and now I know too much. So I felt I have to change but need money to quit. So everything I post here is because as I mentioned I know too much and I need money. If you are here because you think I'm interested in the wonderful world of visual effects I tell you the true I'm not. Really it is boring. Okay, but right now you can find tons of useful things here if you are visiting often. This blog makes you a better person.