2. Patterns

Patterns are the basic building blocks for our models. In this tutorial we will explain what they are, and go from the basics all the way to advanced functionality.

Create a New Project

Start by creating a new project by clicking on File -> New Project, and then choose a location to save your project. We will call our project tutorial1. Waveform will then create the directory structure and present us with a blank workspace.

Note that Waveform will first create a solution directory with your specified name, and then put the project inside of that. So in our case, it will generate tutorial1/tutorial1.wfxml.

(1 / 4) Creating a Sphere

The next thing to do is add a workspace item, so we can begin building a pattern. To do this click on the + icon on the Workspaces toolbar and select Add Pattern. Give it a name such as Sphere and click OK. You should then see this in your editor:


This is the default pattern setup, and is added for you so you can hit the ground running. In this image you can see I have selected the root block because of the yellow border. Select the root block yourself to generate the sphere in the 3d View.


By selecting the block, Waveform ran through the block set and generated the sphere model. Lets now work through the blocks row by row to understand what they are doing:


In Waveform we call the basic shapes patterns. These are always started with a pattern header block, which tells us the name and has an optional comment on the right. You can edit the name by clicking on it and selecting rename variable.

Set Position

This is the most important command in the process, and describes the curve used to generate the sphere. To see the curve click on the White icon:

Curve Editor

This brings up the curve editor, which shows us the curve used by both the Position and Scale components of the process. Try dragging the points around and see how the 3d model changes in response. Once done, click Cancel to exit this screen.

There is a lot going on on this block we haven't covered yet, so let's go throug them now. As a process is sequential, lets go through in the order that Waveform will actually process the curve:

# Step Description
1 1 The user created curve, to convert to 3d.
2 1 Specifies the Degree of Change to use when generating the points from this curve. A bigger angle means less points, and a smaller angle means more points.
3 1 The command consists of 3 channels representing |X|Y|Z|. It's use is to swap around the axis values from the curve, or to ignore some channels altogether. In this case we pass along XYZ which means don't change anything.
4 1 The left hand side block also has it's own command, and this time we take the X value, but ignore the Yand Z values. If you look at the curve again, and just take the X value of each point, you can see how this means we actually get a straight line instead.
5 1 The curve to use the values for. During generation, we can specify the Position, Scale or Rotation curve. These curves are combined together to then generate the final model.

Every model needs at least a Position and Scale curve, and as can be seen we specify the Scale curve next:

Scale Curve

Here we actually re-use the same curve the position uses, but if you look at the left hand side command we have YYY instead. This means it takes the Y component of every point on the curve, and uses that value for the X, Y and Z channels. The result is the same half-circle scale is used on all 3 axis', which is what we want to generate a sphere.


So far we've specified the path to take and the scale to use, but we've yet to specify a 2d surface to actually extrude along this path. This is what this block does; if you click on the White icon again you will see a circle:


This is what will be extruded along the position curve. We can imagine that this would produce a cylinder, if it wasn't for the scale curve making it smaller at the beginning, biggest in the middle, and small again at the end, producing a sphere.


This block is what actually tells the engine to generate the model. Up to now we've just been specifying what curves and surface to use. This block will actually begin the generation process with that information. You can test this by selecting the block and dragging it away to disconnect it, and the model will disappear.

This :end command tells the engine to iterate all the way to the end of the position curve. Later we will see that we can specify custom stop points, so we change the surface before continuing. This is where the blend value comes in handy.


This final block specifies the rigid body to generate for physics calculations. You can view it by clicking on View -> PhysicsBodies in the 3d View. Try selecting Enable... -> Enable Physics too to see the ball fall under gravity. We will cover physics in more detail later in the Physics tutorial.

(2 / 4) Creating a Cylinder

In this example we'll go over editing the workspace, to convert our Sphere to a Cylinder. In order to create a Cylinder we could edit our existing curve to be a straight line, and let the commands take care of the rest. Or, we could add a new curve just for the scale.

We will take the second approach to explore new functionality. On the left of the workspace we have the toolbox, which lists a set of categories. By clicking on the Patterns category we are shown a set of blocks that we could use for creating patterns with. Drag out the [Curve] block, and replace the [Use Position Curve] block with it, so you get this workspace:


Alternatively a faster, and more convenient way, of creating the curve block would be to right click the existing position curve and select duplicate from the context menu.

Note you can add as many blocks as you want to a single workspace, but to keep your project simple, it is better to have each set of blocks under it's own heading in the workspaces list, so you can quickly navigate between them.

Open the Scale Curve Editor, and select the line and move it up in the Y axis. You should see this creates a Cylinder that gets bigger as you increase the Y value.


The Curve Editor

This is where the main work happens to design patterns in Waveform. The idea is you can specify curves with as many points as you like, and the engine will interpolate the curves to create the final 3d mesh. You can double click on any part of a line to create a new point, and so modify the curve in new ways. By clicking on a point you get 2 handles which can be used to rotate the curve path. Here is an example:


Play around with the curve to see what else you can create. Hold down ALT while moving the mouse around to auto select nearby points, so you can see their information quicker.

Note that your Cylinder has two empty holes on either side of it, because the scale starts at a non-zero value and ends on a non-zero value too. To fix this you generally always need to start the scale from zero and end on zero, in order to generate a closed shape.

(3 / 4) Creating Teeth

One advanced usage is to take a pattern you have generated, and tell it to also generate itself across a curve you have specified. This can be useful for creating teeth for example. To see this in action open the patterns tutorial project, and click on the teeth pattern item.

3d teeth


The block set contains the Add Process block, which allows you to add a pattern at each point on the Position curve instead. The added pattern also gets a new rotation value, as well as has it's bend_point modified. To understand the values better try changing them.

Note that 15 Uniform Samples are taken as well. This is useful for when you don't want Waveform to calculate the most optimised set of points for you, but instead want it to take a number of equally spaced points along the curve.

(4 / 4) Multiple Surfaces

The sample also includes a way to change the extrude surface as you iterate along a position curve. Open the multi_surface item in the tutorial project to see how this can be used to create more complex shapes:


Try playing around with the blend values to see how they affect how jagged or smooth the transition is from one surface to the next. Look at the SportsCar sample for another use of blending.

< Prev Tutorial | Next Tutorial >

More Links


Keep up with the latest information.


Engage with the Waveform community. Find answers to your questions here, or help out fellow users.


Are you a game developer who doesn't have time to make art for your game? Find out why this tool is for you.