I'm trying to create a visual representation of EM waves traveling through space and I'm having a tough time. I found these images I like but I am having trouble coming up with a good way to render them. I'm using cycles and it is a still image so I don't need to worry about animating.


enter image description here

enter image description here


2 Answers 2


You can recreate the first image fairly well using the math function mesh (Add --> Mesh --> Math Function --> Z Math Function).

This is what we're aiming for here: End result

First, you need to enable the AddMesh:Extra Objects add-on (press CtrlAltU to access the system preferences)

enter image description here

Type in the wave function you want to display in the input box (I used Z = sin(x) + sin(y) for this example).

Create basic object

Then, delete the edges along one axis (I deleted the ones along X):

  1. Select and add each edge loop using AltShiftRight Mouse Button.
  2. After you've got 'em all, delete edges and faces only (X --> Only Edges and Faces).

Delete Edges

From here you can take it to many different places, but here's a suggested workflow:

  1. Convert the mesh to a curve, then add a fill.

Set curve

  1. Add a taper object (bezier curve with an arch shape along the Y axis), and set it as a taper object for the wave curve.


  1. Add a subsurf modifier to get smoother curves. Subsurf

  2. In Cycles, set an emission material to the wave object and choose a proper color.


  1. If you want to add particles for added effect, create another copy of the original wave mesh, then add a particle system to it.


  1. Add a simple mesh circle (Add --> Mesh --> Circle).

    Set Fill type: Triangle Fan

    and Vertices: 6

Then rotate 90 degrees on X so that the circle faces the Y axis.

Apply rotation (CtrlA --> Rotation).

Apply the same material you created for the wave to this circle.

  1. Use the following particle settings:

    Emission: Number: 50000 Jittering Amount: 2

    Velocity: Random: 2 Rot: 1

    Physics: Size: 0.025 Random Size: 1 Mass: 0

    Render: Emitter: False (uncheck) Render type: Object Dupli Object: The hexagonal circle you created earlier.

  2. In the Scene tab on the Properties Window, turn Gravity off.


  1. Run the animation (AltA) for a bit until you have a nice distribution of particles around your mesh.

That's about it!

You can enhance this further by adding depth of field or motion blur, but I'll let you find tutorials or other answers to find out how to do this.

  • $\begingroup$ @gtbuzztim Thanks! And if this answer works for you, please mark it as accepted: blender.stackexchange.com/tour $\endgroup$
    – TLousky
    Commented Feb 7, 2016 at 14:16
  • 3
    $\begingroup$ For anyone else reading this: Z Math Function is not enabled by default. You need to go to User Preferences > Addons and enable the "Add Mesh: Extra Objects" plugin. $\endgroup$
    – Somatic
    Commented Feb 7, 2016 at 16:50

You can similar effects using procedural shaders.

The second example image is similar to that produced in this answer, specifically :

enter image description here

Also, consider this related answer which uses similar techniques but in 3 dimensions and would be relevant to your first example image.

For example, this material :

waves material

Can produce this :

waves rendered

Tweaking the parameters and Color Ramp should be able to produce the desired result.

EDIT : Another technique would be to use a similar method to generate the waves on a surface generated from a Noise texture (although you could also use a Wave texture for more regular waves) and to use a Modulo function to use the Y coordinate to generate multiple contour lines as shown. Tweaking the Scale in the Mapping node allows the effect of the Noise texture to be varied independently along each dimension.

enter image description here


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .