Change shelf height in Maya!

To change the size of your shelf in Maya just use the following mel command:
1. layout -e -height XX ShelfLayout; //replace XX with desired height in pixels

For example, to double the size of the shelf in Maya I had to use:
layout -e -height 100 ShelfLayout;

To make sure the new setting is saved you can:

2. Rightclick on a shelf icon -> Edit,  click Shelves, click Save All Shelves

3. Restart Maya to see the actual result.

increase shelf size maya

After some searching I found the layout command on: , so credit goes there.

Quicktip: Use transparency with Stingray PBS shaders in Maya 2016 ext 2 (Maya 2016.5)

Stingray PBS are the implementation of Physically based real-time shaders in Maya. They are especially useful for previewing game art as it would appear in a modern Engine like Unreal Engine 4 or Unity 5.

To get them to work in a scene, create a new Stingray PBS shader in
Hypershade, or Right click -> Assign New Material
Note: Changing another Material to Stingray PBS via its attributes may cause the Stingray PBS shader to bug out and not initialize properly.

The Stinray PBS shader is fairly straight forward:
The sliders under Attributes change the basic preview values.
To use a texture, assign it under Textures and tick the corresponding box under Attributes. This will override the slider and make the shader use the texture.

If you need transparency:
In Maya 2016 ext2 you can click on the Preset Material drop-down and select preset/Standard_Transparent. This will add a Use Opacity Map tickbox. The shader will use the alpha channel of the color texture when activated.

In earlier versions of Maya, you don’t have this option. But you could add it, because the Stingray PBS shader is actually just a Shader FX network. You can open this network by clicking Open ShaderFX in the material attributes. Click on Make Unique so you don’t edit Maya’s preset, but a unique version of the shader.
Here’s the network for the transparent material:
Shader FX

Nice physically based shader for Houdini 15

Check out PhyShader for Mantra by Roman Saldygashev:

Installation instruction for Windows 10:
Download the ZIP package from git. Unpack the vex, otls and gallery folders to your equivalent of:

The shader should be in your material palette.

Go check it out!

How to create tools that work based on selected points in Python for Houdini

When creating tools for the Houdini shelf you will usually want the tool to work on your selected nodes and or geometry. Here’s an example code on how you can achieve that:

import toolutils

selection = toolutils.sceneViewer().selectGeometry()
node = selection.nodes()[0]

selection = selection.selectionStrings()

#selection is a tupple
print selection
print type(selection)
selection = list(selection)
print selection[0]
print node

list_of_points = node.geometry().globPoints(selection[0])
print list_of_points

Instructions for testing: Create a python shelf tool with the above code, open a python shell and select some geometry. When you execute the shelf tool you should see the output fromt the print statements in the shell.

Modified from original script created by pelos on the advice of graham:

Tiling sculpting in ZBrush

So you want to create current-gen quality tiling meshes (and not just textures)? I give a rundown of a few methods on how you can accomplish this.

Note: Several of these tutorials are used to create tiling textures (and I have a whole other topic on that ), but the methods presented here also create tiling meshes, which might be reduced (and tweaked) one way or another for in-game use. I recommend you read my other post first, if you do not know any methods to create tiling textures in ZBrush.

by Philip Klevestav
This tutorial touches on some general tiling sculpting advice, so I recommend to read this first.
– Make a plane
– Frame view and turn off perspecitve
– It may be beneficial to sculpt on a layer
– Active symmetry for left and right (probably X)
– Sculpt from the left and right edges inward
– Deactivate symmetry for left and right
– Activate symmetry for top and bottom (Y)
– Sculpt from the top and bottom edges inward
– Relatively simple
– Danger of visible symmetry in the final product
– Can cause geometry to deform at the edges (though that may be something you want)

by Nick Zuccarello
Very similar to method 1, but slightly more clever.
– Make a standard ZBrush plane. In Maya (and similar) it must go from -1 to 1 in X and Y.
– Frame view and turn off perspective
– It may be beneficial to sculpt on a layer
– Activate wrap on every brush you are using (Brush->Curve->set WrapMode to 1 or higher)
– Sculpt as you please
– Simple
– Fast
– Can be used to generate awesome “wallpapers” and patterns
– Danger of very repetitive results
– Can cause geometry to deform at the edges (though that may be something you want)

by I Fought A Bear’s Avatar
A sophisticated variation on method 2.
– Get custom ZBrush scene from: or follow to create it yourself
– Work with wrap (like in method 2) on inner rectangle
– To get a tiling mesh out of this, you must get rid of the outer squares.
– Simple
– Fast
– Can be used to generate awesome “wallpapers” and patterns
– Slightly tedious to make the base setup and to cut off useless geometry at the end
– Danger of very repetitive results

by George Sokol
– Set Document size to 1024×1024 or 2048×2048 (or other square with power of 2 resolution)
– Create standard ZBrush plane (this is not optional, as it sets the frame for the rest of the work)
– Frame view and turn off perspective
– Append Subtool (for example, a Brick) and modify if necessary
– Move the Subtool over an edge of the plane with the Transpose Brush
– Open the Deformation tab in the Tool Panel, select the right axis and Offset by 100
Note: Don’t merge the duplicated subtools. In the end you could get rid of all the duplicates at the edges and you would have a perfectly tiling mesh.
– Continue adding subtools as described above till all edges are covered
– Add subtools to the free area inbetween
– Truly 3D result
– Simple
– Very tedious
– Danger of repetitive results around edges
NOTE: A similar process could be used in just about any other 3D application.

by Nick Miller (nyx702)
This is more of a work-flow-help than a tiling sculpt creation tool. Consider it an inspiration on how to use ZBrush’s array tools.
– Install a plug-in from and learn how to operate it based on
(You add a Subtool. It gets repeated in X and Y according to your input. You can additionally let the plug-in rotate random subtools 90 and 180 degrees along the X axis. You can sculpt on the result.)
– Fast
– Simple
– Danger of repetitive results mitigated through tiling preview
– Great for simple repetitive objects
– Can lead to somewhat simple results
Note: Not really necessary. Similar results can be achieved with ZBrush’s array tools as well as standard tools in many 3D apps like Blender, Maya, 3DS Max, Houdini, etc.

by Piggyson
This plug-in is intended for the creation of 3D tiling textures, but I am reasonably sure that it could be used to create tiling meshes.
– Install a plug-in from!-unofficial-Information-Installation and learn how to operate it based on the forum posts
(When you place a subtool on an edge it will get automatically duplicated to the right spot like in method 4. The plug-in also comes with various filters for the the creation of tiling textures and the latest version of the plug-in also has an integration of method 2. )
– Fast
– Simple
– Powerful and efficient
– Comes with awesome Filters for creating tiling textures. (Even if your final product is a complex tiling mesh, you could use the textures on planes for lower level of detail meshes.)
– Getting an actual tiling mesh out of this requires some manual clean-up

Group selection logic in Houdini

An absolutely essential part of Houdini is to control selection and grouping. Fortunately Houdini offers amazing tools for this. Unfortunately some of the most powerful and practical tools are easily overlooked.

I could not explain these tools any better than the Side FX people themselves:

Below is a copy-paste of the important bit. These patterns can all be used directly in the “Group” fields of almost every sop. What’s more is, you can execute script in those fields by putting it in back-ticks.
So for example  0-`npoints(opinputpath(“.”,0))-2`  selects all points but the last.

Pattern Meaning
* In the Group SOP: all points/primitives. In other SOPs: every named group.
n Point/primitive number n.
n-m Points/primitives numbered from n to m (inclusive).
n-m:step Points/primitives numbered from n to m (inclusive) skipping every step. For example, 1-100:2 means every other number from 1 to 100.
n-m:keep,step Points/primitives numbered from n to m (inclusive). Use the first keep numbers and then skip every step after that.
!pattern Every point/primitive except the ones matching the pattern. For example, !1-10 means every point/primitive except the numbers 1 to 10.

pattern may be a numeric pattern, attribute pattern, or group name pattern.

^pattern Remove points/primitives matching the pattern from the results of the preceding pattern. For example, 0-100:2 ^10-20 means every other number from 1 to 100 except the numbers 10 to 20.

pattern may be a numeric pattern, attribute pattern, or group name pattern.

@attributeopvalue Selects the points/primitives where attribute matches value, based on the op, which can be one of =, == (same as =), !=, >, <, >=, or <=.

For example, @v>0 will create a group of all points whose v attribute is greater than 0.

You can specify components using [index] after the attribute name, for example @Cd[2] will get the blue channel of the diffuse color (Cd) attribute. As a convenience, you can also use .x, .y, and .z instead of [0], [1], and [2], for example P.x to get the X-axis component of the position (P) attribute. (If you don’t specify a component for a multi-component attribute type, the comparison will use the first component.)

For example, @P.y>0 will create a group of all points whose Y component is greater than 0.

For string attributes you must put quotation marks around the value if it contains spaces, for example @myattr="foo bar".

You can use wildcards (* and ?) in the value when using =, ==, and != on string attributes.

You can combine the attribute syntax and the range syntax:


You can also use the attribute syntax with a space separated list of integer values, but you need to enclose the list in quotes:

    @id="5 8 10 15"
group_name In SOPs other than the Group SOP, you can specify a named group of points/primitives (created with the Group SOP).

You can use pattern matching (*, ?, and [ ]) in the group name. For example, arm* includes all point/primitive groups whose names start with arm. ^ can be used in the pattern by enclosing the pattern in { }. For example, {arm* ^arm3*} includes all groups whose names start with arm, but not arm3.