Shapeitup
Manual and documentation for "ShapeItUp"
Overview
"ShapeItUp" is a set of three nodegroups that covers the need of basic shapes that Blender lacks when you want to create some procedural material.
In Blender you have textures like Voronoi, noise and Musgrave... but if you want a simple square, circle or a brick with rounded corners you will not find it! You have to create your own from scratch, which demands some skill and takes time. This is where "ShapeItUp" comes in to the picture. I have created every shape that you normally find in the Substance Designer's "Shape" node. Yes, all those shapes that you lack every single time you start doing a material in Blender :).
All is open and in node groups (with sub groups), which means that you can dive in to everything to see how it's done or even change or add things. If not...well, then you can just use it as it is, but nothing is hidden and all is "regular Blender", so no AddOns, images or anything extra is used.
The three nodegroups
The only node groups you will need to use is those that starts with the prefix "Main_". There is one for basic shapes, one for "good to have" patterns and one that can be used to mask images.
Name | Description |
Main_Shape | This is the main group where you will find all those shapes you normally need to create your material. |
Main_Patterns | This an "extra" node group that I did for fun. There are a few really "good to have" patterns here that could spice things up like simple flowers, weave patterns and polygons. If you find a pattern of your own that you like, it's rather easy to add it in to the nodegroup. I will explain how in the technical documentation further down in this manual. |
Main_Mask | One shape is good..but many combined is often better. The Main_Mask helps you to mask out just that part of the shape you want to keep. You can do a "simple" mask by using the X and Y coordinates... or you can use an input mask, which often is another shape, to filter any irregular shape. |
All groups can be reached as you normally reach a node group. You just press Shift+A, go to group and there you have them. If working in another project, then just append the Main... groups and all the other groups that has dependencies will follow along.
Main_Shape
The Main Shape looks like this:
Output
All the outputs are different types of shapes, except color. That means that it is very easy to try some input setting on several different shapes by just switching witch node output you will use. The shapes you can get are:
Name | Visual | Use parameter "Pattern Specific" |
Square | No | |
Disc | No | |
Hemisphere | No | |
Paraboloid | No | |
Bell | No | |
Gaussian | No | |
Thorn | No | |
Sphere | Yes | |
Pyramid | No | |
Brick | Yes | |
Gradation | Yes | |
Waves | Yes | |
Half Bell | Yes | |
Ridged Bell | Yes | |
Crescent | Yes | |
Capsule | Yes | |
Cone | Yes |
All the output parameters in the table above that has a "Yes" in "Parameter specific" can change appearance depending of what value you use in parameter specific. Exactly how they change depend on shape. For instance, the "capsule" can be a long pill or just a round circle while it in "waves" means amount of waves you will use. It is just to try out and you will see what happens.
Then we have the color output. The color output gives a square with a randomized color. To use that color on your shape, the easiest way is to use a MixRGB node like this:
The above settings will give you this result:
If you want other colors, then you can change the value in the input called "Seed". Play and test :)!
Input
The inputs is the same for both this node and for the "Main_Patterns" node, so I will only describe it here. What you have are the following:
Name | Description | Example | Value used |
Vector/UV | You must give a vector to make this work! The normal input is "UV", but you can add other things as well...but the result might be strange. I have left this open, so that you can tweak the shapes with different things like noise or mathematic before showing the shapes to distort it. | ||
Pattern Specific | This change a shape or patterns way and looks a bit depending of what value you add to it. For some shapes it has no effect, while it does a lot on others. You can check the table above to see what shapes can be changed using the parameter. | (Sphere) |
1 |
Tiling | Repeats the pattern in X and Y that many times you add as value. | (brick) |
10 |
Seed | Seed is a value you change if you want different sets of random numbers. It is used mainly for color output and for "Random Tiling Filter" | ||
Random Tiling Filter | To filter away random amount from a tiled shape or pattern. A value of 0 does not filter anything, while a value of 1 filter away all. | (Brick) |
0.4 |
Scale | This is just scale of the shape. The value is from 0 to 1, where 1 is filling the complete area and 0 is the smallest scale. Depending on pattern or shape, the smallest size can have some variations. You can exceed 1 if you write in a value manually. It could be on some occasions when you want to "cut" some of the outer areas from a shape or pattern. | (Brick) |
0.5 |
Random Scale Amount (New in ver 1.1) | This input is added so that you can get random variations even in the scale for tiled patterns. Also changed output depending on what you use as "seed" on input. | (Filled Polygons) |
1.0 |
SizeX and SizeY | These values will change the aspect of the shape so it gets wider or thinner in one direction. | (Waves) |
Size X 0.2 |
Degrees | This rotates a shape or pattern in degrees, so use something between 0-360. | (Half Bell) |
35 |
Max Random Degrees | Randomly turns each shape between 0 and "Max Random Degrees" degrees. Adds this value to what you have put in "Degrees" | (Half Bell) |
60 |
Rotation 45 (0 or 1) | Turns the complete tile 45 degrees instead of individual shapes. If using 0, no turn. If something is >0 as input you will get a 45 degrees rotation. | (Brick) |
1 |
Main_Patterns
This nodegroup has this visual appearance:
Output
All outputs can be changed using the "Pattern Specific" for patterns, so it is a bit different compared to shapes where some shapes had a very static visual. The patterns you get are:
Name | Description | Visual | Pattern Specific |
Propeller | Will give you four blades. | Thickness of the blades. | |
Flower | Will give you a similar appearance as propeller, but the amount of petals vary. | Amount of petals. | |
Polygons | This gives polygons and amount of sides you control with your specific parameter. The smallest amount is four sides. The scale of 1 is just a tiny bit bigger than the drawing area. This is to be able to merge polygons together in nice looking patterns when using tiles...so by design :). | Amount of sides. | |
Filled Polygons | As Above | Amount of sides | |
Weave1 | Typical use would be on metallic floors. Normally something you tile. | The flatness of each line. | |
Weave2 | This is the pattern you often see on woven baskets and similar. Normally something you tile. | The flatness on each face. | |
Fiber | This is a "rope like" pattern. Try out Scale X and Scale Y together with the pattern specific parameter to really take advantage of this pattern. | Amount of lines going round the rope. | |
Ping Pong | This is a very versatile pattern that changes a lot depending on what you add as a pattern specific input. | Changes pattern completely, but are symmetrical in shape. | |
Chain1 | This is the classical pattern used when metallic parts weaves together. Is normally a tiled pattern that is perfect for things like fence. | Flattens the lines. |
|
Chain2 | A harder version where the difference between top and bottom of each line is more clear...more metallic. With a high value in the pattern specific setting it is perfect for metallic floors. | Flattens or shrinks lines. |
Input
When it comes to the input, the same base is used as the "Main_Shape" node, so just check that chapter above and the explanation should be clear.
Main_Mask
This is the node that you use when you want to mask away things from the shape result. The output is the masked image result. It looks and is very simple:
Input
Name | Description |
ObjectToMask | This is the image you want to mask away stuff from. |
X | By changing X you decrease or increase the field to mask. A value of 1 means that you are using no mask and then you can decrease it all the way down to 0 where everything is masked. It decreases equal amount from right and left (or up and down if using Y). |
Y | See above |
OffsetX | This moves the complete mask to left or right depending of what you set as value. |
OffsetY | This moves the complete mask up or down depending on the value you use. |
Rotate | Here you rotate the complete mask to the value you wish. Uses values between 0 to 360. |
Mask | This is if you want to add an image to mask with. It will be added together with the X and Y mask. White color means that you will keep it while black value in the image will mask away from the input image. |
Examples
To make it easy to start, I have done a few examples. One is the "Donut", where the result looks like this:
The node tree for the donut is this one:
...so what does it have?
It uses only two shapes. The "Crescent" (the small shape node) is the donut shape. It already have what is needed. The bigger shape node on top is using "Capsule" with a "pattern specific" of 0.6. This creates the shape for the sprinkles. The rest of the nodes is just to combine this two with colors and so on.
I want many sprinkles in many colors. I could have used the "Color" output from our shape node, but to get it independent and show how to combine stuff, I added the colors outside the shape node. So this part:
creates the color. I start with an UV out. It will be in the range 0 to 1. By adding a scale of 16, I get the UV in the range 0 to 15. Now we get all those small little numbers with decimals as well...so it will be a lot of numbers in total...and we do not want that. What we want is 16 different values. Thus I add "Floor", which will give the lowest integer number for each range. Now we get a clear 0 a clear 1 a clear 2 and so on... no 2.2345 something just pure integers. These numbers generates a random input seed to the "White Node texture" and out comes random colors that we paint our sprinkles with!
The colors for the donut is much simpler. It is just a "Colorramp" that can be used directly from the shape "Crescent" since it has a gradient falloff.
Now we need to mix the colors together, so that we do by adding a "MixRGB" node. We need to mix it in a good way, so we gt the sprinkles color only on the sprinkles and that we do by adding the "Capsule" output as "fac" input for the mix node. I multiply with 3 because the "Capsule" is not pure white but by increasing with 3, I get a contrast that works for the mix node.
To make the sprinkles really standout I also add some bump. First a gray finetuning scale for the donut using a colorramp and then I add the height from sprinkles... and we are done! The shape does all the work :)!
(I also play with roughness to get more shiny sprinkles...but this is all there is to it)!
Technical "in depth" stuff
As I wrote in the beginning, it could be so that you want to add your own pattern and get all the advantages with tiling rotation and so on in to your pattern. To make that happen, you add the "Main_Patterns" group to a material, so it is reachable. Then select it and press "CTRL+G". That will open up the "base" group for the patterns. The "only" thing you will need to know now is that you in here create your new pattern as a sub group and you also need to know which inputs to use.
If you follow this table, I think you will do just fine:
Visual Output | Description | Should be input on your new group. |
From the "Vector Rotate" you will see a lot of noodles going out. This is the main output for the vector input you will use for your new pattern. Everything like tiling, rotating and so on is taken care of before that, so it is just to plug it in. | In your new node group you will need a "Vector" in that you can create the pattern from. | |
This node is what decides if your little square in a tiled system should be visible or not. If output is 1, then you will have it visible and if it 0 it will be gone. To handle that in your own group, you should end everything with a "Multiply" node last that you connect to this since it the n will make your pattern black if 0, since 0 x any number will give 0 as result. | In your node group make an input called "OnOff" | |
This should be rather self explanatory. You use it for the Scale X and Scale Y on your new node group. To handle it inside your group, the most commonly used way is to take the input vector and divide it with the input of X and Y... and perhaps also add a "Maximal" to prevent the scale to trash things if it is too low. This is an example of how it could look inside your own group: |
You should call the inputs "ScaleX" and ScaleY" | |
Pattern Specific | If you want to tweak your pattern, you need to take the "raw" input from pattern specific straight in to your node group and do what you want with it. Try to use value between 0 and 1, since that is how it is limited in the "Main_Patterns". | Same name "Pattern Specific" is a good option in your node group. |
That is all input you will need to be able to create your own pattern. You will of course have some knowledge and skill to be able to do the math to create those pattern... but when you get that skill (if you do not have it already)... this will ease things up for you so you don't have to create that pattern manually every time.
Sales | 10+ |
Dev Fund Contributor | |
Published | almost 3 years ago |
Blender Version | 2.83, 2.9, 2.91, 2.92, 2.93 |
Render Engine Used | Cycles, Eevee |
License | Royalty Free |
Have questions before purchasing?
Contact the Creator with your questions right now.
Login to Message