Back to plugins

Wave for AC3D


Download Windows version 1.1
Download Linux (RedHat/Fedora) version 1.1* courtesy of Eldon Brown
Download Linux (Gentoo) version 1.0.1** courtesy of AJ MacLeod
Download source code version 1.1

* NOTE: The RedHat version contains all source code as well as its own README.

** NOTE: This Linux version was compiled and linked on a Gentoo x86 install. If this does not work for you, the source code has been proven to compile/link under Linux, so you may wish to download the source code and compile for your system.

Transforms the selected vertices using an axis-aligned waveform.

See below for examples and usage

This plugin and code are freely distributable

AC3D versions prior to version 5 have not been tested with this script.



  • Fixed: subdivisions are only recalculated when a subdivided object is changed
  • Frequency always starts at the minimum axis value. Before, the sin wav always started at 0,0,0, whereas it now starts at the minimum axis value of the selection.
  • Frequency can be spread across a selection rather than expressed in units. Checking the "Frequency expressed in units" box will cause the wave plugin to behave the "old" way, where the frequency = the number of AC3D units. Unchecking this box causes the frequency to be the number of sin waves applied across the selection (so, 0.5 means 1/2 of a sin wav will be spread across the selection).
  • GUI defaults and increments tweaked.


  • Fixed: result of wave shows up in subdivided objects.


Copy the wave.tcl and wave.p files to your AC3D plugins folder (for example, if using Windows, C:\Program Files\AC3D5\plugin) and (re)start AC3D.

You will find the "Wave..." menu item under the "Tools" menu.


Wave is an AC3D plugin that allows you to transform your selected vertices using a waveform. This plugin was originally created for adding simple curves/sweeps to surfaces, such as warping panels and boards, but many interesting shapes can be derived.

The interface options are as follows:

Frequency axis Dictates the direction along which the wave will be applied ("length").
Amplitude axis Dictates the direction in which the wave's "height" will be applied.
Frequency The number of times a wave will be repeated.
Frequency expressed in units

If checked, "Frequency" will be the number of waveforms that span a single AC3D unit.
If unchecked, "Frequency" will be the number of waveforms that span the current selection.

Amplitude The maximum height of a wave in AC3D units.
Offset % The percentage to "offset" the waveform. Setting the percentage to 50% will cause the waveform's peaks/valleys to alternate.
Additive If unchecked, the selected vertices will change to conform to the shape of a wave. If checked, the wave amount will be added to the existing vertices.
Apply wave with random offset Applies the settings to the selected vertices, but ignores the "Offset %" setting and instead starts the waveform's shape at a random point. This random offset is changed for each object in the selection.
Apply wave Applies the settings to the selected vertices.

Frequency, amplitude, and offset


NOTE : All examples below were created using version 1.0 of the Wave plugin, before the "Frequency expressed in units" option was added. To recreate the examples below, ensure the "Frequency expressed in units" box is checked. Note that generally, however, you will probably want to leave this box unchecked, as it is often better to predict results when applying frequency to a selection rather than by AC3D units.

Example : Creating a waveform

In this example we'll show a simple waveform transformation onto vertices.

First, create a horizontal line with only two points in the Front (XY) view. Make the line four units wide. 6

Next, with the line selected, press Ctrl+Shift+I (or in the menu use "Vertex->Insert Vertex") a total of six times. You should have a line like the one below.

Select the "Wave..." menu item under the "Tools" menu. This brings up the Wave interface. Set the following options:

  • The Frequency axis should be set to X - this is the axis along which we want the wave to flow, because it is the axis along which the line is "drawn".
  • Amplitude axis should be set to Y. This will create the wave shape in the Front (XY) view. Setting it to Z would cause it to wave in the Top (XZ) view.
  • Frequency for this example will be 1. This means that for every AC3D unit, we will have one full waveform.
  • Set the Amplitude to 0.2. This means that the highest peak and the lowest valley will be at most 0.2 units from the center of the waveform.
  • Leave Offset % at zero.
  • Leave Additive unckecked.

If you followed these steps, you should have only had to change the Amplitude for this example. Clicking Apply wave at this point should give you the following shape in the Front (XY) view.

The red lines drawn on this image show one waveform - my "major" grid is set to one unit, and you'll see that a complete wave stretches over one unit (because my frequency is set to 1).

Example : Expanding the shape

Let's take this same shape and perform some more wave transformations on it.

With the same line you've just created still selected, Apply a new wave. Change the following settings from the last wave:

  • Amplitude axis = Z
  • Amplitude = 0.3
  • Offset % = 25
Applying this wave will result in the following shape. This shape is similar to what you can get by using the "Revolve" tool.

Now, Undo the last waveform we applied and change the Frequency axis to 0.25, then apply the waveform. Because our line is 4 units long, this means we'll only be applying one waveform (1/4). This gives us:

Now, Undo this last change. Set the Amplitude axis back to Y, the Offset % to zero, and leave the frequency and amplitude the same as the last step (0.25 and 0.3).

This time, check the Additive checkbox and apply the waveform.

Note : Applying waves to objects

Below is a waveform applied to a segmented cylinder (the cylinder was made by extruding the top face of a normal cylinder using the numeric extrude tool).

In order for this to work, however, you must use the Additive option. Otherwise, all vertices will snap together along the frequency axis.

Experiment with other settings to get more shapes and styles.

Example : Creating a cartoon fence

The above fence was created in moments using the random waveform feature ("Apply wave with random offset"). A cartoonish fence is shown because it better illustrates the function, but subtle, random warping of objects is just as possible.

To achieve this effect, I first created a fence composed of segmented slats. The first slat was created by making a small section and extruding it upward until I had the height I wanted. This slat was duplicated across to make a perfectly aligned fence wall. I added a very small amount of space between each slat, and added two horizontal slats behind the fence wall. Finally, I set the surface type to "Smooth" so that any curves applied would not be faceted.

My fence ended up being about 5 units wide and 3 units tall. The flat part if the fence faced the Front view (XY axis). I selected the vertical slats and brought up the Wave tool. I set my Frequency Axis to Y, the direction that the slats went vertically. The Amplitude Axis was set to Z, because I wanted the fence to boards to have a wavy "in and out" look.

The Frequency value was set to 0.25. This means that an entire waveform would stretch across 4 units (my fence was only 3 units tall). I wanted there to be no more than one wavelength applied.

The Amplitude value was set to 0.05. This gives the extreme "in and out" bowing against the rear horizontal slats.

The Additive checkbox was enabled. Without this, the vertices would have snapped together in the Y direction.

Finally, I clicked the "Apply wave with random offset". This function ignores the Offset value and picks a random offset for each selected object. If I didn't like the random pattern that the function provided, I could Undo and try again until it was acceptable.

NOTE: if all of these slats had been in a single object, I would not have achieved this randomness --- all slats would have had the same random waveform applied. Randomness here is on a per-object basis.

Next, I wanted to bow the boards slightly from "side-to-side". Otherwise, if the camera faced the fence directly it would look perfectly straight.

To achieve this effect, I changed the Amplitude to 0.01 and set the Amplitude Axis to X. All other values were left as they were after the first step. I used the random apply again.

Finally, I wanted to give the boards uneven heights.

To achieve this effect, I changed the Frequency Axis to X, the Amplitude Axis to Y, the Frequency to 0.1, and Amplitude to 0.02. All other values were left as they were after the previous step.



  • Introduced source code courtesy of AJ MacLeod to allow compilation under Linux.

Back to plugins

All content Copyright © 2006 Dennis Hawthorne, except where explicitly noted
supercoldmilk © 2006 Dennis Hawthorne