Author Archives: Catalin Niculescu



This Nuke plugin will help you pinpoint color values
outside or inside the defined boundaries.

Knobs description:
Lower: Lower boundary value
Upper: Upper boundary value
InsideBoundaries: Displays the color range between Lower and Upper
LowerColor: Color to use for everything below Lower
UpperColor: Color to use for everything above Upper
InsideBoundariesColor: Color to use for everything between Lower and Upper

Source code included.
Compiled for Nuke7.0.5->linux64

Enjoy and drop me a line if you have any questions.




Given a list of mesh components (as a valid selection or by
using the components argument), this class will return and/or
select the mirror components.

components = poly verts, faces or edges (I will expand to nurbs soon)
tolerance = error threshold for the search mechanism. The lower this value, the more precise the results,
but also the more prone to error in the case the mesh is not perfectly symmetrical
axis = 0 for x, 1 for y and 2 for z. No need to specify positive or negative
absolute = if True, the search will occur in world space
doSelect = should we select what we find? You may not always want this…
addToSelection = if True, the class returns a list of both initial components and mirroredComponents

#copy this file to your PYTHONPATH
from n_mirrorComponents import n_mirrorComponents

#Just return the results
#create a poly sphere and select a few verts, then run
mc = n_mirrorComponents()
print mc.mirroredComponents

#Select and return the results,
#specify some arguments
mc = n_mirrorComponents(axis = 0, doSelect = 1, addToSelection = 1)

#use a predefined components list instead of a selection
myList = ["pSphere1.vtx[258]", "pSphere1.vtx[238]"]
mc = n_mirrorComponents(components = myList, doSelect = 1)

NOTE1: Currently only poly meshes are supported (maybe I’ll
extend to nurbs too at some point)
NOTE2: Internally the search mechanism needs verts.
If the components are faces, edges or uvs, I am converting to verts,
do the work and then convert back to your initial components or selection,
based on the type of the first component. I may extend this functionality at some point if need be.



Simple Nuke contrast node that doesn’t crush the blacks.

Source code included.
Compiled for Nuke7.0.5->linux64

Enjoy and drop me a line if you have any questions.

Perlin Gain


This Nuke plugin is a compiled version of Bryan Dunkley’s implementation
of Ken Perlin’s Gain function.

Knobs description:
Gain: 0-1 amount, with 0.5 having no effect.

Source code included.
Compiled for Nuke7.0.5->linux64

Enjoy and drop me a line if you have any questions.



This python script allows you to talk to Maya
through a commandPort.
It works with both MEL and python and can be used in conjunction with
any script editors that can execute external commands and can provide
variables for the current scripts and the current selection.

1. Copy to your PYTHONPATH
2. Setup your script editor
3. In Maya open port 6001

Eclipse->External Tools Configurations:
Location: c:\Python26\python.exe
Arguments: *pathTo\ "${resource_loc}" "${selected_text}"

EditPlus->Configure User Tools
Command: python *pathTo\
Argument: "$(FilePath)" "$(CurSel)"

UltraEdit->Tool Configuration
Command Line: *pathTo\python.exe *pathTo\ "%F" "%sel%"

Enjoy and drop me a line if you have any questions.



This Nuke plugin remaps channel values to
fit between a min and a max value.

Knobs description:
oldMin = what is considered to be the lowest value
oldMax = what is considered to be the highest value
newMin = the new values will go down towards this min value
newMax = the new values will go up towards this max value

Source code included.

Compiled for Nuke7.0.5->linux64

Enjoy and drop me a line if you have any questions.



MDD exporter for Maya.

n_mddExport -startFrame 1 -endFrame 10 -folder "d:/tmp/" "myMesh1" "myMesh2";

from maya import cmds
cmds.n_mddExport(["myMesh", "myMesh2"], folder = "d:/tmp/", startFrame = 1, endFrame = 10)

Source code included.
Compiled for maya2011 -> win32 and win64

NOTE: Many thanks to modomotion ( for the idea

Enjoy and drop me a line if you have any questions.



This Nuke plugin mimics good old Shake’s plotScanline.
It basically scans one line and creates a graph representing the RGB values.
The values are mapped to fit within the height of the image.

Knobs description:
Slice: decides which image row to scan
Gain: allows you to change the height of the graph curves
Mix: lowering this value will reveal the processed image

The plugin also displays the slice it’s graphing by two openGL arrows
that sit on the left and the right image edge at the height of the slice.
As opposed to the graph curves, these will not get rendered if you were
to write the result to a file.

Source code included.
Compiled for Nuke7.0.5->linux64

Enjoy and drop me a line if you have any questions.



Design your own locator!

N_loc is a maya locator that does not use predefined shapes.
Instead, using the provided, you can create any shape
using either your own presets, or simply objects (curves and/or meshes)
in your scene.
You can create an n_loc out of any number of curves and/or
meshes. As far as meshes goes though, keep in mind that
only quads and triangles are supported, nGons will be skipped.

Quick start:
1. Copy to your PYTHONPATH
2. Load the plugin (n_loc.mll on windows or on linux)
3. Python-import
4. Draw a nurbsCurve or create a polyCube and make sure they are selected
5. Run:

import nLoc
loc = nLoc.nLoc()

Other usage examples:
Example 1: #tell the class which curves and/or meshes to use
loc = n_loc(curves = ["curve1", "curve2"], meshes = ["pCube1"], name = "locName")

Example 2: #use a preset
loc = nLoc(preset = "solidCube")

Example 3: #use a preset and change the orientation
loc = nLoc(preset = "solidCube", presetOrientation = [0, 90, 0])

NOTE1: Most importantly, because this locator is
not using static, predefined position values I need to store
these into attributes on the node itself, just like a nurbsCurve or
mesh would do.
In order to keep the computation to a minimum, these attributes
are being cached and the only way to refresh an n_loc is by
turning on the update attribute, which will re-compute
all attributes, including the boundingBox.
Don’t forget to turn it back off!!!

You will need to update each time you…:
1. change any of the lines, quads or tris attributes
2. change the localPosition and/or localScale attributes AND the useLocalOffset attribute is true

NOTE2: You can always extend the shape by adding
lines, quads or tris attributes and do an update, but if you need to
remove any of these, you’re better off recreating the node

NOTE3: Constantly reading the localPosition and
localScale attributes slows things down a little bit if you have a large
number of n_locs in the scene, so turn on the useLocalOffset attribute
only if you need it

Package contains:
1. Source code
2. Compiled plugins for Maya 2011 win32, win64 and linux64
3. Creation tools

Enjoy and drop me a line if you have any questions.